Login.php

Hallo!

Ich bekomme immer diese Fehlermeldung:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /users/mypli/www/login.php on line 15

und ich habe den Code:

<?php // Session starten session_start (); // Datenbankverbindung aufbauen $connectionid = mysql_connect ("localhost", "-", "-"); if (!mysql_select_db ("-", $connectionid)) { die ("Keine Verbindung zur Datenbank"); } $sql = "SELECT ID, Mail FROM user WHERE Mail like '".$_POST["mail"]."') AND Password = '".MD5($_POST['pwd'])."';"; $result = mysql_query($sql); if (mysql_num_rows ($result)) { // Benutzerdaten in ein Array auslesen. $data = mysql_fetch_array ($result); // Sessionvariablen erstellen und registrieren $_SESSION["user_id"] = $data["Id"]; header ("Location: index.php"); } else { header ("Location: formular.php?fehler=1"); } ?>

Bei SELECT müsste mysql_num_rows doch eigentlich klappen, warum aber nimmt er ihn dann nicht an?

Danke im Voraus!

Aber nur, wenn das SELECT-Statement überhaupt “geklappt” hat.
Und diese Meldung bekommt man i.a.R. dann, wenn das eben nicht der Fall war - mysql_query also false zurückgeliefert hat (das kontrolliert man in einem vernünftig aufgebauten Script erst mal), und demzufolge auch weitere mysql-Funktionen damit nicht arbeiten können.

Übliches Debug-Vorgehen:

  • Kontrollausgabe des per PHP generierten Query-Strings
  • Nutzung von mysql_error

Ausserdem ist die Nutzung von LIKE an so einer Stelle ziemlich blödsinnig. LIKE benutzt man zusammen mit Wildcards wie %, um Inhalte zu finden, in denen der Suchbegriff enthalten ist - sowas will man aber bei einem Vergleich von Username und Passwort nicht, sondern man will auf exakte Gleichheit prüfen - also nimmt man = statt LIKE.