Umfrage mit php

  • Hey Leute, ich bastle an einer Umfrage mit php "Auswertung", die mit E-Mail dann versandt werden soll. Dazu sollen leere benutzereingaben fehler ausgeben, wenn das Formular abgesendet wurde


    hier mal das was ich im Moment habe, komme nich weiter... http://website2.dietotenkoepfe.de/umfr.php


    wer am php-code interessiert ist schaut unter: http://pastebin.com/TiEAtQfs


    vor allem bringt mir die captcha und des mehrfachnennen probleme




    Bitte um Hilfe

  • du kannst ja um deine ganze eingabenprüfung einen if block machen und diesen nur ausführen wenn das Formular abgesendet wurde
    indem du deinen submit button auch noch einen namen gibtst z.b. und diesen dann prüftst
    oder einfach fragst ob isset($_POST['geschlecht']) z.b.

  • Guck mir das grad an und das erste (was eigtl nicht gefragt war :D) was ich sehe ist:
    - selected="selected" oder auch checked="checked" kann bei radio buttons / chkboxen weg. Ich halte es für sinnvoller dem Nutzer am Anfang ein komplett neutrales Formular zu übergeben.
    - bei "Anregungen/Wünsche/Sonstiges" ist ein td "kaputt" ( td> )
    - bei <select name="meinung" multiple="multiple"> bekommst Du nur eine Auswahl zurück.
    besser: <select name="meinung[]" multiple="multiple">
    durch das [] bekommst Du ein array zurück


    edit:
    also was da bei der sicherheitsabfrage passiert, kann ich nicht nachvollziehen.
    Aber den rest hab ich mal überarbeitet:

  • 1. Danke für die Hilfe,


    2. Bin ich noch nicht sehr geübt in php,


    3. Kann man das z.B. echo valOrErr($gekegelt,array(null),'Sie haben nicht gewählt, ob Sie schon einmal bei uns gekegelt haben!')."<br>"; auch direkt in das Feld wo ich <?php if(isset($fehler_gekegelt) [...] ?> reinschreiben?


    4. Habe ich auch ein kleines Problem mit der Captcha... könnte mir jemand entweder bei dieser Captcha helfen, oder mir eine funktionierende senden? Bin wie gesagt noch nicht so fix :whistling:


    5. soll der footer auch vor dem absenden des Formulars da sein...


    6. Die Weiterleitung funkst auch nicht

  • 1. Gerne. Hab momentan nix zu schreiben, nur am lesen =)


    2. Daher lesen lesen lesen =)


    3. Die echo sind eigtl erstmal nur zur Testausgabe gedacht. Im eigtl Einsatz wirst Du sicherlich nicht alle Eingaben des Benutzers noch einmal anzeigen lassen.
    Die Funktion valOrErr sollte nur zeigen, dass man die Prüfung vieler gleicher Abläufe in einer Funktion auslagern kann.
    Ich habs mal umgestaltet. Ist halt wichtig, dass Du verstehst was da passiert.
    Ach ja - Dir fehlt ein name="senden" beim Senden Button.


    4. hab mir das mal angesehen. Ich denke ich habs verstanden =)


    5. durch if gefixt


    6. welche Weiterleitung?


    hier also mal die geänderte Version:
    (Prüfung immer vor der Ausgabe des Formulars)

  • 1. Wiederum Danke für die Hilfe


    2. Gibt es noch ein kleines Problemchen mit dem Rechencaptcha, da schon beim öffnen der Umfrage die Fehlermeldung kommt...


    3. Sollte dann die Benutzereingabe per Mail übertragen werden, wenn alles richtig ist.


    Bitte um kleine Hilfe :)

  • 2. dann das hier:

    PHP
    1. /*rechenaufgabe checken
    2. $_POST['zip'] ist die benutzer eingabe -- seine lösung (eingabefeld name="zip")
    3. $_POST['zip2'] ist der md5 hash der richtigen lösung (hiddefield name="zip2")
    4. es muss nun also die benutzereingabe (des benutzers lösung)
    5. in einen md5 hash gewandelt werden um zu prüfen, ob beide hashes gleich sind.
    6. */
    7. if(md5($_POST['zip']) != $_POST['zip2']){
    8. echo 'Die Rechenaufgabe ist leider falsch!';
    9. }


    mit in die if Abfrage

    PHP
    1. if(isset($_POST['senden']))


    damit es nur beim Senden des Formulars geprüft wird.


    Alternativ geht auch:

    PHP
    1. if(isset($_POST['senden'] AND md5($_POST['zip']) != $_POST['zip2']){
    2. echo 'Die Rechenaufgabe ist leider falsch!';
    3. }


    3.
    Naja, Du musst nun prüfen, ob ein Fehler vorkam und darauf hin handeln.
    Also wenn kein Feher vorkam, dann kannst Du per mail() (http://www.php.net/manual/de/function.mail.php) die eMail senden.
    Falls doch ein Fehler vorkam gibst Du dem Benutzer den Fehler aus.


    Es gibt viele Wege zum Ziel. Du kannst zB:

  • Ich habe es jetzt so gelöst:


    PHP
    1. if(isset($_POST['senden']) AND md5($_POST['zip']) != $_POST['zip2']){
    2. echo 'Die Rechenaufgabe ist leider falsch!';
    3. }
    4. else
    5. {
    6. $mail = mail($empfaenger, $betreff, $text . "\n" . 'Content-Type:text/plain; charset="UTF-8"');
    7. }


    Allerdings wird bei jedem Öffnen der Umfrage eine mail versendet....


    muss ich dass dann mit


    PHP
    1. elseif(isset($_POST['senden']))
    2. {
    3. mail(....);
    4. }


    lösen?

  • ok hat sich erledigt... muss ich mit elseif machen :P


    Jetzt habe ich es so gelöst:




    Allerdings wird kein Fehler bei der Meinung ausgegeben... Wie muss ich das dann machen?

  • Die ganzen IFs ab Zeile 73 -> du moppelst doppelt :D
    Über die Funktion isErr() wird geprüft, ob das Feld leer oder "Bitte...." ist. Und Du prüfst extra noch in einer IF davor =)


    Und die eMail wird immer gesendet, sobald POST "senden" gesetzt ist.
    Also auch wenn Fehler vorkommen.


    Du musst die Funktion isErr() auch nicht nutzen. War nur ein Bsp wir man Wiederholungen einsparen kann.
    Und wie Du im Moment siehst hast Du nun viele Wiederholungen in den IFs ab Zeile 73.


    Ausserdem ist in der ersten IF ab Zeile 20 jetzt nur die Funktion drin :D Das mach keinen Sinn.
    Dort waren doch vorher die Fehlerabfragen drin.


    Du musst Dir den Code in ruhe ansehen und verstehen. Sonst können konische Sachen passieren und/oder Du siehst irgentwann garnicht mehr durch.
    =)

  • wie kann ich dass dann machen ohne die if's?


    weil wenn kein fehler ist soll erst die mail versendet werden


    könnte ich das machen mit


    PHP
    1. if(isset($_POST['senden']) AND isErr($gastsein,array($leeres_textfeld)))
    2. {
    3. echo 'Bitte sagen Sie uns, ob Sie einmal Gastkegler sein wollen!';
    4. }


    ???

  • Nein. Ich denke wir gehen das Ganze mal ohne functions an.
    So könnte das Ganze funktionieren:


    Aber wie gesagt - lesen und verstehen. Sonst bringt Dir das alles nix.
    =)