Fehlermeldung in Login script

Fragen zu allen Themen rund ums Programmieren außerhalb von phpBB können hier gestellt werden - auch zu anderen Programmiersprachen oder Software wie Webservern und Editoren.
Antworten
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

Fehlermeldung in Login script

Beitrag 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?
Benutzeravatar
StarWolf3000
Mitglied
Beiträge: 1019
Registriert: 25.07.2005 10:20
Wohnort: Stolpen
Kontaktdaten:

Beitrag 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'";
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
Benutzeravatar
S2B
Ehemaliges Teammitglied
Beiträge: 3258
Registriert: 10.08.2004 22:48
Wohnort: Aachen
Kontaktdaten:

Beitrag 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. :wink:

@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? :wink:
Gruß, S2B
Keinen Support per ICQ/PM!
Hier kann man meine PHP-Skripte und meine MODs für phpBB runterladen.
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag 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) :roll:

[ externes Bild ]
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

Beitrag 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?
Benutzeravatar
StarWolf3000
Mitglied
Beiträge: 1019
Registriert: 25.07.2005 10:20
Wohnort: Stolpen
Kontaktdaten:

Beitrag von StarWolf3000 »

@larsneo: was hat denn der "Karl Klammer" hier zu suchen?
MOD-Einbauhilfe und Installationen über ICQ, TeamSpeak 2/3 und TeamViewer. Support nur im Forum, eingeschränkt per TeamViewer, aber nicht mehr per PN! • KB:knigge
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag 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.
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
langeweile
Gesperrt
Beiträge: 234
Registriert: 03.12.2006 14:48
Kontaktdaten:

Beitrag 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>
Benutzeravatar
larsneo
Mitglied
Beiträge: 2622
Registriert: 07.03.2002 15:23
Wohnort: schwäbisch gmünd
Kontaktdaten:

Beitrag 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.
gruesse aus dem wilden sueden
larsneo
..::[krapohl.net]::..
Benutzeravatar
Miriam
Mitglied
Beiträge: 12310
Registriert: 13.10.2004 07:18
Kontaktdaten:

Beitrag von Miriam »

Hier ist noch was zum Lesen, weil ihr gerade bei dem Thema seid: mysql_real_escape_string() versus Prepared Statements
Gruss, Miriam.
Ich schmeiß' alles hin und...
... lasse es liegen
Antworten

Zurück zu „Coding & Technik“