2 If-Befehle zusammenführen

Diese Seite verwendet Cookies. Durch die Nutzung unserer Seite erklären Sie sich damit einverstanden, dass wir Cookies setzen. Weitere Informationen

  • 2 If-Befehle zusammenführen

    Hallo Leute!
    Ich habe ein Problem und zwar hab ich in einem Registrierungformular versucht ein CAPTCHA einzubauen.
    CAPTCHA wird angezeigt, alles soweit gut. Jedoch hab ich ein Problem, wenn die Registrierung durchgeführt werden soll (sprich -> Registrieren-Button wird gedrückt)
    1. Egal, ob das CAPTCHA richtig eingegeben wurde, die Fehlermeldung, dass die Sicherheitsabfrage falsch war, wird trotzdem angezeigt.
    2. Der Benutzer wird erstellt, völlig gleichgültig, ob CAPTCHA richtig oder falsch eingegeben wurde.

    Ich denke, dass es daran liegt, dass ich 2 If-Befehle zusammenführen muss. Ich bin jetzt nicht so erfahren, aber das ist glaub ich das einzige was sinnvoll ist.
    1. If-Abfrage prüft, ob die Felder nicht leer waren. Wenn erscheint die Fehlermeldung.
    2. If-Abfrage prüft, ob die Verbindung zur MySQL-Datenbank korrekt war, sprich der Benutzer wurde erstellt. Wenn erscheint ein Hinweis.
    3. If-Abfrage prüft den CAPTCHA und hier liegt glaub ich das Problem, da diese Abfrage mit der 2. kombiniert werden muss.
    Nur, wie mache ich das jetzt? Ich steh völlig auf dem Schlauch!

    Hier der Code:
    Hier wurde das CAPTCHA eingefügt:

    Quellcode

    1. <td><img src="captcha.php" border="0" alt="captcha"></td>
    2. <td><input type="text" name="captcha" size="5"></td>

    Und hier wurden die If's bestimmt:

    Quellcode

    1. if(isset($_POST["reg"])) {
    2. if(!empty($var_user) && $var_pass != md5("")) {
    3. include("sqlcon.php");
    4. mysql_query("insert into authuser (user, pwd, email) values('$var_user', '$var_pwd', '$var_mail');");
    5. if ( md5($income['captcha']) == $_SESSION['captcha'] )
    6. if (mysql_affected_rows() == 1)
    7. {echo "Benutzer wurde hinzugefügt!";
    8. ?><script>window.setTimeout("location.href=\"index.php\"", 2000);</script><?php
    9. }
    10. else {
    11. echo "Benutzer konnte nicht hinzugefügt werden!";
    12. }
    13. else {
    14. echo "Bitte gib die richtige Zahlen-/Buchstabenkombination ein!";
    15. }
    16. }
    17. else {
    18. echo "Name / Passwort leer";
    19. }
    20. }
    21. ?>
    Alles anzeigen


    Vielen Dank im Vorraus!
  • ich würde vorschlagen das du des einfach in ne funktion auslagerst und dann einfach nur test() aufrufst.

    das problem mit deinem code ist auserdem das du den Benutzer zuerst hinzufügst und erst danach den captcha code überprüfst.

    hier mal so wie ich des machen würde. (habs aber net getestet ;)

    Quellcode

    1. function test() {
    2. if(!isset($_POST["reg"])) return; // formular nicht übertragen
    3. if(empty($var_user)) {
    4. echo 'Sie müssen einen Benutzer eingeben';
    5. return;
    6. }
    7. if ($var_pass == md5("")) {
    8. echo 'Das Passwort darf nicht leer sein';
    9. return;
    10. }
    11. if ( md5($income['captcha']) != $_SESSION['captcha'] ) {
    12. echo 'Der CAPTCHA Code wurde falsch eingegeben.';
    13. return;
    14. }
    15. // benutzer einfügen
    16. include("sqlcon.php");
    17. mysql_query("insert into authuser (user, pwd, email) values('$var_user', '$var_pwd', '$var_mail');");
    18. if (mysql_affected_rows() == 1) {
    19. echo "Benutzer wurde hinzugefügt!";
    20. ?><script>window.setTimeout("location.href=\"index.php\"", 2000);</script><?php
    21. return;
    22. }
    23. echo "Benutzer konnte nicht hinzugefügt werden!";
    24. }
    25. ?>
    Alles anzeigen
  • Also erst mal: Bitte achte auf eine durchgehend gleichmäßige Einrückung deines Codes.
    Hier schon mal der (hoffentlich) korrekte Code mit Schönheitsoperation:

    Quellcode

    1. if(isset($_POST["reg"])) {
    2. if(!empty($var_user) && $var_pass != md5("")) {
    3. //Hier wurde $income durch $_POST ersetzt
    4. if ( md5($_POST['captcha']) == $_SESSION['captcha'] ) {
    5. //Hier wird erst gerantiert, dass der Benutzer das Captcha richtig eingegeben hat
    6. include("sqlcon.php");
    7. mysql_query("insert into authuser (user, pwd, email) values('$var_user', '$var_pwd', '$var_mail');");
    8. if (mysql_affected_rows() == 1) {
    9. echo "Benutzer wurde hinzugefügt!";
    10. ?>
    11. <script>window.setTimeout("location.href=\"index.php\"", 2000);</script><?php
    12. }
    13. else {
    14. echo "Benutzer konnte nicht hinzugefügt werden!";
    15. }
    16. }
    17. else {
    18. echo "Bitte gib die richtige Zahlen-/Buchstabenkombination ein!";
    19. }
    20. }
    21. else {
    22. echo "Name / Passwort leer";
    23. }
    24. }
    25. ?>
    Alles anzeigen

    Der Benutzer wird in deinem Code schon angelegt, sobald er etwas in die Eingabefelder hineingeschrieben hat, egal, ob er das Captcha richtig oder falsch eingibt.
    Diese beiden Zeilen fügen den Benutzer der Tabelle hinzu:

    Quellcode

    1. include("sqlcon.php");
    2. mysql_query("insert into authuser (user, pwd, email) values('$var_user', '$var_pwd', '$var_mail');");

    Dieser Code wird jedoch schon ausgeführt, wen folgende if-Abfrage wahr ist:

    Quellcode

    1. if(!empty($var_user) && $var_pass != md5(""))

    Sie ist war, wenn Wenn Benutzername und Passwort nciht leer sind. An diesem Punkt ist jedoch noch nicht garantiert, dass der Benutzer das Captcha richtig eingibt.
    Die Überprüfung des Captchas geschieht erst hier:

    Quellcode

    1. if ( md5($_POST['captcha']) == $_SESSION['captcha'] )

    Wenn hier wahr rauskommt, dann hat der Benutzer das Captcha richtig eingegeben.
    Des weiteren würde ich gerne wissen, woher

    Quellcode

    1. $income['captcha']
    kommt.
    In deinem HTML Code steht:

    Quellcode

    1. <td><input type="text" name="captcha" size="5"></td>

    Also ist der Wert vom Textfeld unter

    Quellcode

    1. $_POST['captcha']

    gespeichert.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • Also es klappt immer noch nicht.
    Man hat mir 'income' gesagt, hab mich aber selber gewundert, da mir POST viel logischer erschien.
    Momentan wird alles, was eingegeben wurde, als falsch empfunden, egal obs richtig oder falsch war.
    Vielleicht liegt es am Captcha selbst? Ich poste mal captcha.php. Es ist ein Rechen-Captcha (z.B. 2 + 2 = ?)
    captcha.php:

    Quellcode

    1. <?php
    2. session_start();
    3. unset($_SESSION['captcha']);
    4. $zahl1 = rand(10,20); //Erste Zahl 10-20
    5. $zahl2 = rand(1,10); //Zweite Zahl 1-10
    6. $operator = rand(1,2); // + oder -
    7. if($operator == "1"){
    8. $operatorzeichen = " + ";
    9. $ergebnis = $zahl1 + $zahl2;
    10. }else{
    11. $operatorzeichen = " - ";
    12. $ergebnis = $zahl1 - $zahl2;
    13. }
    14. function encrypt($string, $key) {
    15. $result = '';
    16. for($i=0; $i<strlen($string); $i++) {
    17. $char = substr($string, $i, 1);
    18. $keychar = substr($key, ($i % strlen($key))-1, 1);
    19. $char = chr(ord($char)+ord($keychar));
    20. $result.=$char;
    21. }
    22. return base64_encode($result);
    23. }
    24. $_SESSION['captcha'] = encrypt($ergebnis, "29jfkd921"); //Key
    25. $_SESSION['captcha'] = str_replace("=", "", $_SESSION['captcha']);
    26. $rechnung = $zahl1.$operatorzeichen.$zahl2." = ?";
    27. $img = imagecreatetruecolor(80,15);
    28. $schriftfarbe = imagecolorallocate($img,13,28,91);
    29. $hintergrund = imagecolorallocate($img,162,162,162);
    30. imagefill($img,0,0,$hintergrund);
    31. imagestring($img, 3, 2, 0, $rechnung, $schriftfarbe);
    32. header("Content-type: image/png");
    33. imagepng($img);
    34. imagedestroy($img);
    35. ?>
    Alles anzeigen

    Diesen CAPTCHA habe ich von der Seite: stoppt-den-spam.info/webmaster…a/captcha-php-script.html
    Viele Grüße und danke nochmals!
  • Deadman44 schrieb:

    unter die seite, die die ich dir u. A. gepostet habe. Also die Seite, die das Captcha überprüft, Bentuzer anleg(en sollte).
    Aber bitte vor dem schließenden

    Quellcode

    1. ?>
    . Also noch in den PHP-Bereich deiner Datei


    Gemacht.
    Wenn ich auf die Seite gehe, erscheint jetzt unter dem Anmeldeformular:

    Quellcode

    1. NULL
    2. NULL


    Und wenn man sich versucht zu registrieren:

    Quellcode

    1. string(2) "16"
    2. NULL


    Da wo "16" steht, ist immer die Lösung gemeint, die eingegeben wurde. (In meinem Fall 16)

    EDIT: Ist es jetzt nicht besser die Variablen zu übergeben und das CAPTCHA auf der nächsten Seite zu überprüfen? Dann ist es, glaube ich, einfacher.
  • Quietschi schrieb:

    EDIT: Ist es jetzt nicht besser die Variablen zu übergeben und das CAPTCHA auf der nächsten Seite zu überprüfen? Dann ist es, glaube ich, einfacher.


    Ja das wäre auch in meinen Augen sinnvoller bzw. strukturierter.

    Zu deinem Problem:
    Ich habe das Captchaskript (also das, was du von der Webseite herunterladen bzw. kopiert hast) gerade mal selbst ausprobiert und daran liegt es definitiv nicht. Bitte poste mal deine vollständige captcha.php. Ich bin mir sicher, dass du dort einen Fehler gemacht hast.
    Open Source --> Programmieren aus Leidenschaft :!:

    Ich stehe weder für privaten Support per PM noch über einen IM zur Verfügung. Danke.
  • d0nut schrieb:

    kann es sein, dass du auf der Formularseite keine Session startest? sieht für mich danach aus. Oder sind andere Session Informationen vorhanden?


    Eine Session habe ich wirklich nicht gestartet. *peinlich*
    Aber jetzt habe ich sie gestartet, aber es kommt auch jetzt nichts raus.
    Wenn jemand sich registriert erscheint:
    string(2) "19"
    string(3) "Yms"

    19 war die Lösung bei meinem Captcha, aber was hat es mit Yms auf sich?
    EDIT: Und es erscheint, dass die falsche Lösung eingegeben wurde.