Wenn ich mich einloggen möchte kommt die Fehlermeldung.:-(
lima-city → Forum → Programmiersprachen → PHP, MySQL & .htaccess
code
datum
einloggen
fehler
fehlermeldung
header
hinweis
index
konflikt
login
nutzer
parameter
spiel
string
tieferen sinn
tippen
vorname
weglassen
zeile
zugang
-
Hallo,
Ich habe ein problem wenn ich nicht einloggen möchte kommt die Fehlermeldung.
Könnt ihr mir bitte helfen.
Warning: mysqli_num_rows() expects parameter 1 to be mysqli_result, boolean given in E:\xampp\htdocs\spiele\login\login.php on line 25
<html> <head><title>index</title></head> <style type="text/css"> <!-- body { background-image: url(bg/bg3.jpg); background-repeat:repeat-x; background-color:#d9deeb; } --> </style> <link href="index.css" rel="stylesheet" type="text/css" /> <link rel="icon" href="img/icon.png" type="image" /> <!--datepicker --> <script type="text/javascript" charset="utf-8"> jQuery(function($){ $(".date").datepicker(); }); </script> <body> <div class="mainr"> <div class="topleft"> <img src="img/logo.png" width="200" height="60" /></a></div> <form action="login/login.php" method="post"> <div class="qwerty"> <div class="label"> <div class="email style1"> UserName</div> <div class="password"> Password</div> </div> <div class="label1"> <div class="emailtext"> <input name="nutzername" type="text"/> </div> <div class="passwordtext"> <input name="passwort" type="password" /> <input name="submit" type="submit" class="greenButton" value="Login" /> </div> </div> <div class="label2"> <div class="password"> Forgot Password?</div> </div> </div> </form> </div> <div class="downleft"> <div class="picture"> <img src="bg/log.png" width="500" height="330" /> </div> <div class="field"> <div class="signup">Sign Up</div> <div class="free">It's free, and always will be</div> <div class="text"> <form method="POST"> </form> </div> </div> </body> </html>
<?php $seitentitel = 'Login'; require_once('includes/zugang.php'); $fehlermldg = ""; if (!isset($_SESSION['id'])) { if (isset($_POST['submit'])) { $db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_PASSWORT, DB_NAME); mysqli_set_charset($db, "utf8"); $nutzername = mysqli_real_escape_string($db, trim($_POST['nutzername'])); $passwort = mysqli_real_escape_string($db, trim($_POST['passwort'])); if (!empty($nutzername) && !empty($passwort)) { $sql = <<< EOT SELECT id, nutzername, vorname ,Account FROM nutzer WHERE nutzername = '$nutzername' AND passwort = SHA('$passwort') EOT; $daten = mysqli_query($db, $sql); if (mysqli_num_rows($daten) == 1) { // Login erfolgreich, also die Cookies setzen und den Benutzer zur Hauptseite umleiten $zeile = mysqli_fetch_array($daten); $_SESSION['id'] = $zeile['id']; $_SESSION['nutzername'] = $zeile['nutzername']; $_SESSION['vorname'] = $zeile['vorname']; $_SESSION['Account'] = $zeile['Account']; setcookie('id', $zeile['id'], time() + (60 * 60 * 24 * 30)); // Verfällt in 30 Tagen setcookie('nutzername', $zeile['nutzername'], time() + (60 * 60 * 24 * 30)); // Verfällt in 30 Tagen $hauptseite = 'http://' . $_SERVER['HTTP_HOST'] . dirname($_SERVER['PHP_SELF']) . '/seite2.php'; mysqli_close($db); header('Location: ' . $hauptseite); exit(); } else { $fehlermldg = 'SIE Müssen gültige-Zugangsdaten eingeben, um Sich einzuloggen.'; } } else { $fehlermldg = 'Sie m&um;ssen Ihre Zugangsdaten eingeben, um sich einzuloggen.'; } } } ?> <div id="wrapper"> <?php require_once('includes/header.php'); if($fehlermldg != "") { echo '<p class="fail">' . $fehlermldg . '</p>'; } ?> <link href="../bilder-spiel.ico" rel="SHORTCUT ICON"> <meta http-equiv="content-type" content="text/html; charset=UTF-8"> <p><a href="../index.php"><font size="7">Zurück</font></a></p> </div><!-- #wrapper -->
-
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage
-
Die Fehlermeldung besagt wohl, dass da wohl ein Fehler in deiner SQL-Syntax liegt. Ich würde mal auf
tippen, welches imhoSHA('$passwort')
heissen sollte. Zudem würde ich Spaltennamen immer in Gravis ( ` ) einschließen, um mögliche Konflikte zu vermeiden. Auch die EOT-Variante wäre mir ein wenig zu unsauber und Fehleranfällig, aber mag sein, dass das einen tieferen Sinn hat.SHA($passwort)
PS: Eine weitere Möglichkeit wäre, dass die SQL-Verbindung nicht richtig klappt. Die Zeile etwas erweitert auf
könnte Aufschluss geben.$db = mysqli_connect(DB_HOST, DB_BENUTZER, DB_PASSWORT, DB_NAME) or die("Error " . mysqli_error($db));
Beitrag zuletzt geändert: 23.9.2013 21:10:22 von noxious -
1. Es wäre ganz nett wenn du Hilfe haben möchtest, dann lass uns bitte nicht "Zeile 25" erst suchen, sondern mache wenigstens einen Hinweis wo sie trotz Zeilenumbrüche zu finden sei.
2. EOT weglassen.
Dann sieht der SQL-String so aus:
$sql = ' SELECT id, nutzername, vorname, Account FROM nutzer WHERE nutzername = ' . $nutzername . ' AND passwort = SHA(' . $passwort . ');'
Alternativ um SQL-Injection vorzubeugen:
$sql = sprintf(" SELECT id, nutzername, vorname, Account FROM nutzer WHERE nutzername = '%s' AND passwort = SHA('%s'), mysql_real_escape_string($nutzername ), mysql_real_escape_string($passwort ) ");
3. Du erwartest ein TRUE nach deinem SELECT in der folgenden Zeile:
if (mysqli_num_rows($daten) == 1) {
Was aber wenn es dann plötzlich ein FALSE wird? Dein IF-ELSE fängt das FALSE nicht ab.
Das passiert nämlich hier. Deine Fehlermeldung sagt dir, dass ein Boolean zurückgegeben wurde.
MYSQLI_QUERY() gibt bei einem erfolgreichen SELECT eine RESOURCE zurück, bei einem Fehler ein FALSE.
Versuche es stattdessen mit MYSQL_AFFECTED_ROWS() oder MYSQL_RESULT(). -
Diskutiere mit und stelle Fragen: Jetzt kostenlos anmelden!
lima-city: Gratis werbefreier Webspace für deine eigene Homepage