Seite 1 von 1
Fehlermeldung in Login script
Verfasst: 15.12.2006 15:22
von langeweile
Wenn ich folgendes Script aufrufe erscheint diese Fehlermeldung:
Code: Alles auswählen
Warning: mysql_fetch_assoc(): supplied argument is not a valid MySQL result resource in /var/www/web12/html/test/index.php on line 7
Code: Alles auswählen
<?php
$passwort_cookie = $_COOKIE['passwort'];
$name = $_COOKIE['name'];
include ("dbconnect.php");
$sql_update = "SELECT passwort FROM User WHERE name='$name'";
$sql_update_now = mysql_query($sql_update52);
$row = mysql_fetch_assoc($sql_update_now52);
$passwort_db = $row['passwort'];
if ($passwort_cookie == $passwort_db)
{
echo "Du bist eingeloggt";
}
else
{
?>
Bitte einloggen<br>
<form action="login.php" method="post">
<input type="text" name="name" size="50" maxlength="40"><br>
<input type="password" name="passwort" size="50" maxlength="40"><br>
<input type="submit" value="Einloggen">
</form>
<?php
}
?>
wie kann ich diesen fehler beheben?
Verfasst: 15.12.2006 15:29
von StarWolf3000
du verwendest ein Feld in der WHERE-Bedingung, das nicht mit in der Abfrage ausgewählt wird
korrekt müsste es lauten:
Code: Alles auswählen
$sql_update = "SELECT name, passwort FROM User WHERE name='$name'";
Verfasst: 15.12.2006 16:03
von S2B
StarWolf3000 hat geschrieben:du verwendest ein Feld in der WHERE-Bedingung, das nicht mit in der Abfrage ausgewählt wird
Das spielt keine Rolle, das funktioniert trotzdem.
@langeweile:
Code: Alles auswählen
$sql_update_now = mysql_query($sql_update52);
$row = mysql_fetch_assoc($sql_update_now52);
Was ist
$sql_update52 und
$sql_update_now52?

Verfasst: 15.12.2006 17:46
von larsneo
Code: Alles auswählen
$name = $_COOKIE['name'];
$sql_update = "SELECT passwort FROM User WHERE name='$name'";
das beinhaltet übrigens eine nette möglichkeit zur sql-injektion (von der idee, kennwörter unverschlüsselt im keks abzulegen mal ganz zu schweigen)
[ externes Bild ]
Verfasst: 15.12.2006 17:53
von langeweile
lag an dem 52 hinter den beiden variblen, aber waren auch noch ne menge andere fehler drin, habs jetzt fertig und es geht, sieht jetzt so aus:
Code: Alles auswählen
<?php
$passwort_cookie = $_COOKIE['passwort_s7c1f'];
$name = $_COOKIE['name_s7c1f'];
include ("dbconnect.php");
$sql_update = "SELECT passwort FROM User WHERE name='$name'";
$sql_update_now = mysql_query($sql_update);
$row = mysql_fetch_assoc($sql_update_now);
$passwort_db = $row['passwort'];
if (isset($passwort_cookie))
{
if ($passwort_cookie == $passwort_db)
{
echo "Du bist eingeloggt";
echo $passwort_cookie;
}
}
else
{
?>
Bitte einloggen<br>
<form action="login.php" method="post">
<input type="text" name="name" size="50" maxlength="40"><br>
<input type="password" name="passwort" size="50" maxlength="40"><br>
<input type="submit" value="Einloggen">
</form>
<?php
}
?>
das schlimmste war die login.php da waren tausende fehler drinne, aber jetzt geht alles *glücklich sei*
verschlüsselt werden die passwörter später schon noch, aber wie kann man da sql injektion oder so durchführen und wie kann ich das verhindern?
Verfasst: 15.12.2006 17:59
von StarWolf3000
@larsneo: was hat denn der "Karl Klammer" hier zu suchen?
Verfasst: 15.12.2006 18:05
von larsneo
grundlegender lesestoff auf jeden fall
http://de3.php.net/mysql_real_escape_string
generell gehören benutzer-bezogene daten aber in keinem fall in den keks, über ein brauchbares session management lässt sich das wesentlich besser realisieren - so dass sich z.b. bei einem xss nicht die userdaten sondern nur eine (an den useragent, die ip und ggfs. auch zeitlich limitierte) session hijacken lässt mit der 'böser angreifer' dann nix anfangen kann.
Verfasst: 15.12.2006 20:15
von langeweile
kannst du vllt. mal den code mal so umbasteln, dass es statt cookies mit sessions funktioniert?
die login.php sieht so aus:
Code: Alles auswählen
<?php
include ("dbconnect.php");
if (!empty($_POST['name']))
{
$passwort = $_POST['passwort'];
$name = $_POST['name'];
$sql_update = "SELECT passwort FROM User WHERE name='$name'";
$sql_update_now = mysql_query($sql_update);
$row = mysql_fetch_assoc($sql_update_now);
if ($passwort == $row['passwort'])
{
setcookie (name_s7c1f, $name, time()+3600);
setcookie (passwort_s7c1f, $passwort, time()+3600);
}
}
include ("dbconnect.php");
if (!isset($_POST['name']))
{
?>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<input type="text" size="40" maxlength="30" name="name">
<input type="password size="40" maxlength="30" name="passwort">
<input type="submit" value="Einloggen">
</form>
<?php
}
if (isset($_POST['name']))
{
$name = $_POST['name'];
$passwort = $_POST['passwort'];
$sql_update = "SELECT passwort FROM User WHERE name='$name'";
$sql_update_now = mysql_query($sql_update);
$row = mysql_fetch_assoc($sql_update_now);
if ($passwort == $row['passwort'])
{
echo "Du hast dich erfolgreich eingeloggt";
}
else
{
echo "Benutzername und Passwort stimmen nicht überein, bitte versuche es erneut";
}
}
?>
<br><a href="index.php">Zurück zur Startseite</a>
Verfasst: 15.12.2006 21:15
von larsneo
kannst du vllt. mal den code mal so umbasteln, dass es statt cookies mit sessions funktioniert?
nachdem du noch nicht einmal das mysql_real_escape_string eingearbeitet hast sehe ich da keinen wirklich sinn drin - zumal du dich via google und z.b.
http://php.net/session erst einmal in die grundsätzliche thematik einarbeiten solltest.
Verfasst: 15.12.2006 23:27
von Miriam
Hier ist noch was zum Lesen, weil ihr gerade bei dem Thema seid:
mysql_real_escape_string() versus Prepared Statements