You are not logged in.

  • Login

Dear visitor, welcome to Coder Forum. If this is your first visit here, please read the Help. It explains in detail how this page works. To use all features of this page, you should consider registering. Please use the registration form, to register here or read more information about the registration process. If you are already registered, please login here.

1

Wednesday, July 15th 2009, 10:32pm

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:

PHP Quellcode

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

Und hier wurden die If's bestimmt:

PHP Quellcode

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


Vielen Dank im Vorraus!

2

Thursday, July 16th 2009, 10:33am

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 ;-)

PHP Quellcode

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
function test() {
    if(!isset($_POST["reg"])) return; // formular nicht übertragen
 
    if(empty($var_user)) {
        echo 'Sie müssen einen Benutzer eingeben';
        return;
    }
    if ($var_pass == md5("")) {
        echo 'Das Passwort darf nicht leer sein';
        return;
    }
    if ( md5($income['captcha']) != $_SESSION['captcha'] ) {
        echo 'Der CAPTCHA Code wurde falsch eingegeben.';
        return;
    }
    // benutzer einfügen
      include("sqlcon.php");
      mysql_query("insert into authuser (user, pwd, email) values('$var_user', '$var_pwd', '$var_mail');");
      if (mysql_affected_rows() == 1) {
           echo "Benutzer wurde hinzugefügt!";
          ?><script>window.setTimeout("location.href=\"index.php\"", 2000);</script><?php
          return;
      }
      echo "Benutzer konnte nicht hinzugefügt werden!";
}
?>

3

Thursday, July 16th 2009, 12:22pm

Hm...Das hat leider nicht geklappt.
Wenn ich den Registrieren-Button drücke, wird die Seite ganz einfach neugeladen. Die Daten in den Feldern sind weg, es erscheint keine Meldung und in der Datenbank erscheint der Nutzer auch nicht.

4

Friday, July 17th 2009, 1:06pm

Also erst mal: Bitte achte auf eine durchgehend gleichmäßige Einrückung deines Codes.
Hier schon mal der (hoffentlich) korrekte Code mit Schönheitsoperation:

PHP Quellcode

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

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:

PHP Quellcode

1
2
include("sqlcon.php");
                        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:

PHP 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:

PHP 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

PHP Quellcode

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

HTML Code

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

Also ist der Wert vom Textfeld unter

PHP Quellcode

1
$_POST['captcha']

gespeichert.

5

Friday, July 17th 2009, 2:55pm

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:

PHP Quellcode

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

Diesen CAPTCHA habe ich von der Seite: http://www.stoppt-den-spam.info/webmaste…php-script.html
Viele Grüße und danke nochmals!

6

Friday, July 17th 2009, 4:25pm

Bitte mal folgendes unter die Seite anhängen:

PHP Quellcode

1
2
3
4
echo "<pre>";
var_dump($_POST['captcha']);
var_dump($_SESSION['captcha']);
echo "</pre>";

und uns die Ausgabe schreiben.

7

Friday, July 17th 2009, 4:34pm

Bitte mal folgendes unter die Seite anhängen:

PHP Quellcode

1
2
3
4
echo "<pre>";
var_dump($_POST['captcha']);
var_dump($_SESSION['captcha']);
echo "</pre>";

und uns die Ausgabe schreiben.


Unter captcha.php? Oder die Seite mit dem Captcha?

8

Friday, July 17th 2009, 5:00pm

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

PHP Quellcode

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

9

Friday, July 17th 2009, 6:37pm

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

PHP Quellcode

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


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

PHP Quellcode

1
2
NULL
NULL


Und wenn man sich versucht zu registrieren:

PHP Quellcode

1
2
string(2) "16"
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.

10

Saturday, July 18th 2009, 2:50pm

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.

11

Saturday, July 18th 2009, 9:08pm

Das ist die vollständige captcha.php
mehr hab ich da nicht drin.

12

Sunday, July 19th 2009, 11:30am

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

13

Sunday, July 19th 2009, 11:47am

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:

Quoted

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.

14

Sunday, July 19th 2009, 2:03pm

du musst die 19 mit der Funktion encrypt aufrufen, siehe http://www.stoppt-den-spam.info/webmaste…bau-script.html

Das Script ist übrigens unnötigt kompliziert. Da die Sessioninformationen auf dem Server gespeichert sind und nicht für den Benutzer sichtbar sind, braucht man das das ganze encrypten nicht.

15

Sunday, July 19th 2009, 4:39pm

Es hat geklappt.
Den Teil auf der Webseite hab ich gar nicht gesehen :-O
Naja, egal. Danke schön!!

Mit freundlichen Grüßen,
Quietschi

Similar threads

Social bookmarks