Carl : mysql_num_rows - Problem

Hi

ich brauch mal wieder Eure Hilfe. Ich grüble jetzt schon den ganzen Tag da drüber nach, kann den fehler allerdings nicht finden.

Ich habe folgendes in meinem script stehen:

$query = "SELECT user, pw, group FROM dnd_users where pw ='".$_COOKIE["passwort"]."' AND user = '".$_COOKIE["username"]."'";
 $result = mysql_query($query);
 if(mysql_num_rows($result) == 1)
  {
  while($rows = mysql_fetch_row($result))
   {
   $user = $rows[0];
   $pw = $rows[1];
   $group = $rows[2];
           //Hier folgt dann die ausgage der seite

wenn ich nun allerdings auf das script zugreife bekomme ich folgende fehlermeldung zurück:

Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/htdocs/v038143/dnd_scripte/header.php on line 5

Ich vermute mal, es liegt daran, dass ich die if-Abfrage habe und gleich danach das while, aber ich komme einfach nicht darauf, wie ich es sonst lösen könnte.

Wenn Ihr Ideen habt, dann würde ich mich über eure Hilfe freuen.

Gruss
Carl

  1. Hallo Carl

    $query = "SELECT user, pw, group FROM dnd_users where pw ='".$_COOKIE["passwort"]."' AND user = '".$_COOKIE["username"]."'";

    Das ist ein guter Anfang, um etwas Debugging einzubauen:

    echo $query, "<br>\n";

    zeigt Dir Deine Abfrage, vielleicht steht da schon nicht das drin, was Du erwartest.

    $result = mysql_query($query);

    ...

    if(mysql_num_rows($result) == 1)
      {
      while($rows = mysql_fetch_row($result))
    wenn ich nun allerdings auf das script zugreife bekomme ich folgende fehlermeldung zurück:
    Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /www/htdocs/v038143/dnd_scripte/header.php on line 5

    Verwende mysql_error(), http://www.php.net/manual/de/function.mysql-error.php, um herauszufinden, was genau schiefgegangen ist. Vielleicht liefert Dir Deine Abfrage _keine_ Ergebnisse.

    Gruss,

    Vinzenz

    1. Hallo Vinzenz

      scheint sich um einen fehler mit der group spalte zu handeln.

      hier die fehlermeldung, wenn ich mir mysql_error() ausgeben lasse:

      1064: You have an error in your SQL syntax near 'group, user, pw FROM dnd_users where pw = und so weiter

      ich hab hier das group an die erste stelle nach dem select gestellt, wenn es an der letzten stelle steht, so heißt die fehlermeldung:

      1064: You have an error in your SQL syntax near 'group FROM dnd_users where pw =

      Irgendeine Idee was das ist?
      Hier vielleicht noch meine Spalte mit der group ID aus der Datenbank:

      Feld Typ Attribute Null Standard
      group  tinyint(5)   Nein  1

      Gruss
      Carl

      1. Hallo Carl,

        scheint sich um einen fehler mit der group spalte zu handeln.

        1064: You have an error in your SQL syntax near 'group, user, pw FROM dnd_users where pw = und so weiter

        Genau, was ich sagte. Nenn die Spalte um.

        Liebe Grüße aus http://www.braunschweig.de

        Tom

        --
        Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
    2. Hallo Carl,

      $query = "SELECT user, pw, group FROM dnd_users where pw ='".$_COOKIE["passwort"]."' AND user = '".$_COOKIE["username"]."'";

      Das ist ein guter Anfang, um etwas Debugging einzubauen:

      echo $query, "<br>\n";

      zeigt Dir Deine Abfrage, vielleicht steht da schon nicht das drin, was Du erwartest.

      Und die näcshte Fehlermeldung lässt Du Dir am besten nach dem mysql_query() ausgeben: echo mysql_error().

      Vielleicht steht dann sogar drin, dass "group" als Spaltenname nicht gestattet ist; ist nämlich ein Schlüsselwort. Könnte aber auch ein anderer Fehler im Query sein. Jedenfalls hat Dein Query kein gültiges Resultat ergeben. Der Zeiger des Resultsets zeigt daher auf keine gültige Position.

      Das sagt die Fehlermeldung.

      supplied argument is not a valid MySQL result resource
      das übergebene Argument ist kein gültiger MySQL Ergebnis-Zeiger

      Mit Resources sind hier Datenbestände, aufbereitete Datenmengen gemeint. Genau das macht die Abfrage ja. Eine Datenteilmenge aus der Gesamtmenge der verfügbaren zusammenstellen und für Dich auf dem Server bereithalten, bis du mysql_free_result() auslöst. Über den "Resource Locator", das ist der "Schlüssel zum Ergebnis" kannst Du dann mit mysql_fetch_asscoc() & Co. Teildaten daraus abfordern.

      Liebe Grüße aus http://www.braunschweig.de

      Tom

      --
      Intelligenz ist die Fähigkeit, aus Fehlern Anderer zu lernen und Mut die, eigene zu machen.
      1. Hallo Tom

        Danke.

        es war wohl tatsächlich die Sache mit der Bezeichnung der Spalte als group.
        Nachdem ich die Spalte in groupid umbenannt habe, geht es.
        Nochmals Danke

        Gruss
        carl

      2. Hallo Tom,

        Vielleicht steht dann sogar drin, dass "group" als Spaltenname nicht gestattet ist; ist nämlich ein Schlüsselwort. Könnte aber auch ein anderer Fehler im Query sein. Jedenfalls hat Dein Query kein gültiges Resultat ergeben. Der Zeiger des Resultsets zeigt daher auf keine gültige Position.

        Du bist heute weit aufmerksamer als ich, die Kollision des Feldnamen
            group
        mit dem SQL-Schlüsselwort (-wörtern)
            GROUP BY
        hätte mir auch auffallen müssen.

        Klar, dass MySQL sich beschwert. Witzigerweise wurde die Tabelle mit diesem Feld angelegt. Also sollte
            'group'
        als Spaltenname auch in der Abfrage ein Ergebnis zeigen.

        Aber grundsätzlich gilt, dass man reservierte Wörter (Worte?) nicht als Spaltennamen verwenden sollte ;-)

        Gruss,

        Vinzenz

        1. Moin!

          Aber grundsätzlich gilt, dass man reservierte Wörter (Worte?) nicht als Spaltennamen verwenden sollte ;-)

          Naja, das gilt (jedenfalls wenn ich den PHPMyAdmin-Source betrachte) nur bis zu einer gewissen MySQL-Version. Danach kann man es grundsätzlich tun. Und gerade im Fall von "group" wäre diese Feldbezeichnung durchaus nicht abwegig als eigene Spaltenbezeichnung.

          - Sven Rautenberg

          --
          "Bei einer Geschichte gibt es immer vier Seiten: Deine Seite, ihre Seite, die Wahrheit und das, was wirklich passiert ist." (Rousseau)
  2. Hi

    ich bins nochmal.

    Hängt jetzt zwar nicht wirklich mit dem Thema zusammen, aber ich denke nicht, das es nötig ist ein neues Thema aufzumachen.

    Also ich lde meine ganze Seite in 2 Frames. In beiden Frames findet eine Passwortabfrage statt, da der Navigationsframe abhängig ist von der groupid und für die brauche ich eine userauthentifizierung.

    Auf jeden fall ist es so, dass wenn man nicht eingeloggt ist, im hauptframe ein Login angezeigt wird. Dieser ruft dann ein script auf, dass überprüft, ob die eingegebenen Daten richtig sind. Falls ja, wird geprüft, ob die cookies gesetzt sind. Wenn das der Fall ist, wird wieder zu der Frameseite zurückgeleitet, wenn nicht, werden die cookies gesetzt und man wird zur frameseite weitergeleitet.
    Die weiterleitung mache ich mit header(Location).
    Das Problem ist, dass mir in diesem Fall nur der Mainframe neu gelden wird, der naviagtionsframe wird nicht neu geladen. wenn ich dann auf den Reload-button des browsers klicke, wird dieser neu geladen und mir wird der naviagtionsframe angezeigt. aber das ist natürlich nicht der sinn der sache.
    Hat jemand eine Idee, was ich da machen könnte?