Forus: Problem mit IE7 und

Hallo liebe Community,

Ich möchte ein Usersystem in meine Homepage integrieren und arbeite mit folgendem Code (das entscheidende Fragment daraus):

...
elseif ($_POST['login']!="" && $_POST['login_user']!="" && $_POST['login_pw']!="")
 {
  $res=dbquery("SELECT * FROM users WHERE LCASE(user_nick)='".strtolower($_POST['login_user'])."' AND user_password='".md5($_POST['login_pw'])."';");
                 if (mysql_num_rows($res)>0)
  {
                         //set background to user-bg
                  $left='login';

$arr=mysql_fetch_assoc($res);
   $s['user_id']=$arr['user_id'];
   $s['id']=$arr['user_id'];
   $s['user_nick']=$arr['user_nick'];
   $s['nick']=$arr['user_nick'];
...
}

Mit Firefox funktionier alles ohne Probleme.

Die Bedingung:

if (mysql_num_rows($res)>0){...}

ist im IE(7)aber nie erfüllt; jedenfalls nicht zum Zeitpunkt des Ausführens.

Wenn ich allerdings irgendwo im Quellcode folgende Zeile einfüge:

if (mysql_num_rows(dbconnect("..."))>0)
      echo "erfolg";

wird "erfolg" auf der Seite angezeigt - die Schleife durchlaufen.

Meine Frage:
Wo ist der Fehler? Warum klappt das einloggen mit Firefox ohne Probleme?
Ich habe nach 4stündigem googeln nichts speziefisch zu diesem Thema finden können und bin völlig ratlos.

Cheers
Forus

  1. echo $begrüßung;

    Mit Firefox funktionier alles ohne Probleme.

    Die Bedingung:

    if (mysql_num_rows($res)>0){...}

    ist im IE(7)aber nie erfüllt; jedenfalls nicht zum Zeitpunkt des Ausführens.

    Kontrollausgaben von Variableninhalten und Ergebnissen von Ausdrücken helfen oftmals solchen Fehlern auf die Spur zu kommen. Geeignete Hilfsmittel dazu sind neben echo und print() noch var_dump() und print_r(). Ebenso hilft es, das error_reporting beim Entwickeln auf E_ALL zu stellen, um Zugriffe auf nicht vorhandene Variablen und Array-Elemente angezeigt zu bekommen.

    Warum liefert mysql_num_rows() immer 0? Das wird am SQL-Statement liegen. Es wird keine Datensätze liefern, weil die Bedingungen nicht erfüllt werden. Prüfe die Werte, die in das Statement eingefügt werden. Baue das Statement zuerst in einer weiteren Variable zusammen, gibt diese dann an dbquery() weiter, und vorher mal zur Kontrolle aus.

    Wie sieht es mit dem Auswerten von MySQL-Fehlern aus? Kümmert sich dbquery() darum, wenn die darin verwendeten mysql_*-Funktionen durch ihren Rückgabewert das Auftreten eines Fehlers signalisieren?

    Wird das $_POST-Array von IE und Firefox gleichermaßen gefüllt oder gibt es da Unterschiede? Array-Inhalte lassen sich gut mit print_r() anzeigen. Eine übersichtlich formatierte Ausgabe erhält man im Browser, wenn man davor ein <pre> einfügt/ausgibt.

    $res=dbquery("SELECT * FROM users WHERE LCASE(user_nick)='".strtolower($_POST['login_user'])."' AND user_password='".md5($_POST['login_pw'])."';");

    mysql_query() erwartet nur ein einzelnes SQL-Stetement. Das ; am Statement-Ende wird von MySQL nicht benötigt.

    echo "$verabschiedung $name";

    1. Vielen Dank für die Hinweise!
      Das mit E_ALL werde ich umgehend ausprobieren.

      1. Ich habe das Problem gefunden.
        Für die welche es interessiert:

        während Firefox durchaus mit einer solchen SQL anfrage zurechtkommt:

        $querry="SELECT * FROM users WHERE LCASE(user_nick)= ' ".$var." '..'";

        funktioniert das ganze bei IE nur wenn man vom obigen Beispiel Konsequent " mit ' und umgekehrt vertauscht.

        Trickreich von Firefox oder konsequent bei IE, wie auch immer :)

        Cheers,
        Forus

        1. echo $begrüßung;

          während Firefox durchaus mit einer solchen SQL anfrage zurechtkommt:
          $querry="SELECT * FROM users WHERE LCASE(user_nick)= ' ".$var." '..'";
          funktioniert das ganze bei IE nur wenn man vom obigen Beispiel Konsequent " mit ' und umgekehrt vertauscht.

          Dein Problem liegt an einer ganz anderen Stelle. Diesen PHP-Code bekommt weder der Firefox noch der IE noch irgendein anderer Browser zur Ausführung durchgereicht. Es gibt aber Unterschiede im Verhalten der Browser beim Versenden von Formularelementen. Wenn dein Script browserabhängig reagiert, liegt das an den ihm übergebenen Parametern. Du solltest den Unterschied im $_POST-Array suchen.

          echo "$verabschiedung $name";