if abfrage geht nicht, trotz richtiger eingaben

oconner

oconner

Aktives Mitglied
Thread Starter
Dabei seit
11.01.2006
Beiträge
281
Reaktionspunkte
0
Hallo,

ich habe folgendes programmier

PHP:
<?php

//die Datei wo fuer die login aktion ist

$page_title = "Login";

//post übertragung
$name = $_POST['nick'];
$pw = $_POST['pass'];

$pw_md = md5($pw);

$sql_login = "SELECT `user_id`, `user_name`, `user_pass` FROM $user_table WHERE `user_name` = '$name'";
$login_query = mysql_query ( $sql_login );
$login_row = mysql_fetch_object ( $login_query ) OR die (mysql_error());

if ($name == $login_row->user_name AND $pw_md == $login_row->user_pass)
	{
	setcookie ($cookie, $login_row->user_id, time()+3600);
	echo '	<div class="field" style="width:480px" align="left">
			<fieldset>
			<legend><strong>'.$info.'</strong></legend>
			<span class="norm">Dein Login war erfolgreich!</span><br><bt>
			Du kannst <a href="index.php"><b>hier</b></a> zum Index zurückkehren.
			</fieldset>
		</div>';
	}
	else
	{
	echo '	<div class="field" style="width:480px" align="left">
			<fieldset>
			<legend><strong>'.$info.'</strong></legend>
			<span class="rot">Du hast eine falsches Passwort oder einen falschen Benutzernamen eingegeben!</span><br><bt>
			<a href="javascript:history.back()"><b>zurück</b></a> zum Login
			</fieldset>
		</div>';

	}

?>

eigentlich sollte es gehen, aber leider tut es das nicht, obwohl ich richtige Daten in das Formular eingebe was an die Datei geschickt wird. Es wird einfach immer die else ausgegeben. Ich hab auch schon zum test die Vergleichs Anweisung ausgeben lassen, und die hat auch gestimmt.

Aber wieso geht mein script nicht? :motz:

Ich mir kann irgendjemand weiterhelfen.
 
Moin,

gib mal zur Kontrolle den Inhalt des Feldes "user_pass" aus der Datenbank aus und vergleiche das mit dem Inhalt von "$pw_md". Ich vermute den Fehler dort.

LG Ralf
 
Gib doch einfach mal folgendes vor der if-Abfrage ein.
PHP:
printf("Username: %s – DB: %s - Vergleich: %d", $name, $login_row->user_name, $name == $login_row->user_name);
printf("Password: %s – DB: %s – Vergleich: %d", $pw_md, $login_row->user_pass, $pw_md == $login_row->user_pass);
Dann kannst Du besser sehen wo und warum der Vergleich fehl schlägt.

Pingu
 
Zuletzt bearbeitet:
oconner schrieb:
Ich hab auch schon zum test die Vergleichs Anweisung ausgeben lassen, und die hat auch gestimmt.

Genau das hab ich doch schon gemacht was ihr meint. Und laut dieser hab ich richtige Daten eingegeben und die Vergleichung stimmte.
 
Vielleicht mal Klammern drumsetzen? Das wirkt teilweise Wunder :)
Versuch ists Wert:

if (($name == $login_row->user_name) AND ($pw_md == $login_row->user_pass))
 
Probiers mal mit diesem Code (davon ausgehend, dass der DB-Connect irgendwo schon früher geschieht):

PHP:
<?php 

//die Datei wo fuer die login aktion ist 

$page_title = "Login"; 

//post übertragung 
$name = $_POST['nick']; 
$pw = $_POST['pass']; 

$pw_md = md5($pw); 


$result = mysql_query("SELECT `user_id`, `user_name`, `user_pass` FROM $user_table WHERE `user_name` = '$name'");
while ($login_row = mysql_fetch_object($result)) {


if ($name == $login_row->user_name AND $pw_md == $login_row->user_pass) 
    { 
    setcookie ($cookie, $login_row->user_id, time()+3600); 
    echo '    <div class="field" style="width:480px" align="left"> 
            <fieldset> 
            <legend><strong>'.$info.'</strong></legend> 
            <span class="norm">Dein Login war erfolgreich!</span><br><bt> 
            Du kannst <a href="index.php"><b>hier</b></a> zum Index zurückkehren. 
            </fieldset> 
        </div>'; 
    } 
    else 
    { 
    echo '    <div class="field" style="width:480px" align="left"> 
            <fieldset> 
            <legend><strong>'.$info.'</strong></legend> 
            <span class="rot">Du hast eine falsches Passwort oder einen falschen Benutzernamen eingegeben!</span><br><bt> 
            <a href="javascript:history.back()"><b>zurück</b></a> zum Login 
            </fieldset> 
        </div>'; 

    } 
 

 }

?>

Viele Grüße
Norman
 
Ist das hier richtig?

... FROM $user_table WHERE ...
 
vielleicht sind leerzeichen in der datenbank drin.
hatte ich mal, k.a. warum.
jedenfalls musst du diese dann weg-TRIM()-men.
 
Ich habs eben mal getestet. Der Codeblock, den ich weiter oben gepostet habe, hat bei mir funktioniert. If-Abfrage war erfolgreich. Probiers mal.

Viele Grüße
Norman
 
Du bist dir schon im klaren darüber, dass die Zeilen

Code:
$name = $_POST['nick'];
und
Code:
WHERE `user_name` = '$name'

der PHP-Super-DAU-GAU schlechthin sind, oder?
 
DeineMudda schrieb:
Du bist dir schon im klaren darüber, dass die Zeilen

Code:
$name = $_POST['nick'];
und
Code:
WHERE `user_name` = '$name'

der PHP-Super-DAU-GAU schlechthin sind, oder?

Und warum erklärst du es dann nicht? Man könnte die übergebene Post-Variable zwar auch direkt in die SQL-Query setzen, aber was spricht gegen diesen Weg?
 
Zuletzt bearbeitet:
Ich würde die Abfrage einfach ganz anders stellen. Warum nicht einfach die DB die Arbeit machen lassen? Warum nocheinmal Vergleichen?
PHP:
<?php

//die Datei wo fuer die login aktion ist

$page_title = "Login";

$sql_login = sprintf("SELECT `user_id` FROM %s WHERE `user_name` LIKE '%s' AND `user_pass` LIKE '%s'",
                       $user_table,
                       mysql_real_escape_string($_POST['nick']),
                       mysql_real_escape_string(md5($_POST['pass'])));

$login_query = mysql_query ($sql_login);

if ($login_row = mysql_fetch_object($login_query)) {

    setcookie ($cookie, $login_row->user_id, time()+3600);
    echo '    <div class="field" style="width:480px" align="left">
            <fieldset>
            <legend><strong>'.$info.'</strong></legend>
            <span class="norm">Dein Login war erfolgreich!</span><br><bt>
            Du kannst <a href="index.php"><b>hier</b></a> zum Index zurückkehren.
            </fieldset>
        </div>';

} // if ($login_row = mysql_fetch_object($login_query))
else  {

    echo '    <div class="field" style="width:480px" align="left">
            <fieldset>
            <legend><strong>'.$info.'</strong></legend>
            <span class="rot">Du hast eine falsches Passwort oder einen falschen Benutzernamen eingegeben!</span><br><bt>
            <a href="javascript:history.back()"><b>zurück</b></a> zum Login
            </fieldset>
        </div>';

} // if ($login_row = mysql_fetch_object($login_query)) ... else

?>

Pingu
 
:D http://de.wikipedia.org/wiki/SQL_Injection

Man könnte als Nick z.B.

Code:
abc'; DROP TABLE [i]xyz[/i]; SELECT * FROM abc WHERE a = 'b

eingeben und damit schwuppsdiwupps deine Tabellen löschen.

Merke: Benutzer-Eingaben nie (NIE!) (Nein, wirklich NIE!) in SQL-Statements übernehmen, ohne zu quoten!
 
Normaniac schrieb:
Und warum erklärst du es dann nicht? Man könnte die übergebene Post-Variable zwar auch direkt in die SQL-Query setzen, aber was spricht gegen diesen Weg?
Eingabe: whatever' -- DROP TABLE users;
 
DeineMudda schrieb:
:D http://de.wikipedia.org/wiki/SQL_Injection

Man könnte als Nick z.B.

Code:
abc'; DROP TABLE [i]xyz[/i]; SELECT * FROM abc WHERE a = 'b

eingeben und damit schwuppsdiwupps deine Tabellen löschen.

Merke: Benutzer-Eingaben nie (NIE!) (Nein, wirklich NIE!) in SQL-Statements übernehmen, ohne zu quoten!

Ok, das ist natürlich richtig. :)
 
Ich kenn mich mit PHP nicht so aus, aber müßte dies:

if ($name == $login_row->user_name AND $pw_md == $login_row->user_pass)

nicht

if ($name == $login_row->user_name && $pw_md == $login_row->user_pass)

heißen?
 
LaForce schrieb:
Ich kenn mich mit PHP nicht so aus, aber müßte dies:

if ($name == $login_row->user_name AND $pw_md == $login_row->user_pass)

nicht

if ($name == $login_row->user_name && $pw_md == $login_row->user_pass)

heißen?

Das geht beides.
 
also nun hab ich folgendes gemacht

Ich hab zum test die ganze if abfrage rausgeschmissen. Nun kommt natuerlich die meldung das der es funktioniert hat. Aber ein cookie wurde nicht gespeichet. Also ist wahrscheinlich auch der an dem Fehler der if abfrage schuld.

Ich hab in der Datei wo dr ganze Inhalt ist auch eine die includiert wird, die folgendes codes enthaelt

PHP:
$nav_cookie = $_COOKIE[$cookie];

if (!isset($nav_cookie))
	{
	echo "ausgeloggt";
	}

if (isset($nav_cookie))
	{
	echo "eingeloggt!";
	}

Kann das den Fehler verursachen?

mein cookie setz code sieht so aus

PHP:
    setcookie ($cookie, $login_row->user_pass, time()+3600);

[EDIT: ok, problem lag in der Datenbank, ich hab nicht genug Zeichen freigegeben. Danke für eure vielen hilfen und sry fuer meinen Fehler]
 
Zuletzt bearbeitet:
Zurück
Oben Unten