user bereits vorhanden aber mysql_num_rows ergibt 0?

Einklappen
X
 
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • user bereits vorhanden aber mysql_num_rows ergibt 0?

    Und wieder komme ich nicht weiter
    Ich versuche zu prüfen, ob ein User, bevor er angelegt wird bereits vorhanden ist. Dies versuche ich mit einem
    Select Statement zu bewerkstelligen:
    PHP-Code:
    mysql_select_db("datenbank");
        
    $sqluser "SELECT user_id FROM user WHERE user_id = ' " $_POST['user'] . " ' ";
        print 
    mysql_error();
        
    $abfrage mysql_query($sqluser)or die(mysql_error());
        print 
    mysql_error();
        
    $ergebnis mysql_num_rows($abfrage);
        print 
    mysql_error();
        echo 
    $_POST['user'];
        echo 
    $ergebnis
    es wird mir an keiner Stelle eine Fehlermeldung ausgegeben.
    echo $_POST['user'] zeigt mir sauber den eingegebenen Wert. Der wird also richtig übergeben.
    Allerdings bekomme ich als $ergebnis immer eine 0 obwohl der User in meiner db vorhanden ist.
    Tausche ich die Form-Variable im Select-Statement einfach mit einer User_id als String aus,
    findet er den User und gibt mir eine 1 aus. Nur mit $_POST['user_id']
    klappt es nicht

    Ich weis, das es noch gehen würde das mysql_error auszulesen, da die user_id in meiner db uniqe ist.
    Allerdings empfinde ich das als nicht optimal, da das Script bei einem Fehler ja sterben würde und das nicht
    heisst das es nicht auch ein anderer Fehler sein könnte. Zbsp. Server aus
    oder ähnliches..

    Habe ich irgendeinen Fehler in meiner Abfrage? Wir würdet Ihr solch eine Überprüfung umsetzen?
    mit einem Select in der db oder mysql_error() auslesen?

    Vielen Dank für eure Tips!

  • #2
    Hallo,

    erstens musst du dich entscheiden, ob es ein SQL-Problem ist oder ein PHP-Problem. PHP-Code hat bei einem SQL-Problem nichts verloren und die Ursache liegt auch nicht bei MySQL, daher *move*.

    Die Benennung deiner Variablen ist verwirrend (insbesondere $abfrage).

    Dieses Script ist anfällig für SQL-Injections, weil du die POST-Daten ungeprüft in der Abfrage verwendest.

    Der Fehler ist offensichtlich: Wenn du dir mal die Abfrage ($sqluser) ausgeben ließest, würdest du sehen, dass dort Leerzeichen um die User-Id drinstehen, die du selbst dort eingebaut hast.

    Edit: Die Überprüfung durch Fehlerprovokation zu umgehen, halte ich für keine gute Idee, aber schlag im MySQL Handbuch mal "insert ... on duplicate key update" nach, denn das ist es, was du suchst.

    Gruß,

    Amica
    Zuletzt geändert von AmicaNoctis; 22.01.2010, 13:08.
    [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
    Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
    Super, danke!
    [/COLOR]

    Kommentar


    • #3
      Zitat von jaffi Beitrag anzeigen
      Ich weis, das es noch gehen würde das mysql_error auszulesen, da die user_id in meiner db uniqe ist.
      Allerdings empfinde ich das als nicht optimal, da das Script bei einem Fehler ja sterben würde
      Quark. Sterben tut es nur, wenn du es sterben lässt.

      die() ist aber allgemein keine sinnvolle Fehlerbehandlung.

      und das nicht heisst das es nicht auch ein anderer Fehler sein könnte.
      Deshalb fragt man an einer solchen Stelle ab, welcher Fehler aufgetreten ist (über die Fehlernummer).
      I don't believe in rebirth. Actually, I never did in my whole lives.

      Kommentar


      • #4
        Zitat von AmicaNoctis Beitrag anzeigen
        Hallo,

        erstens musst du dich entscheiden, ob es ein SQL-Problem ist oder ein PHP-Problem. PHP-Code hat bei einem SQL-Problem nichts verloren und die Ursache liegt auch nicht bei MySQL, daher *move*.
        Bitte entschuldige das ich das als Anfänger nicht immer gleich
        verifizieren kann...

        Der Fehler ist offensichtlich: Wenn du dir mal die Abfrage ($sqluser) ausgeben ließest, würdest du sehen, dass dort Leerzeichen um die User-Id drinstehen, die du selbst dort eingebaut hast.
        Die Leerzeichen hab ich wirklich übersehen, zumal sie in der Ausgabe auch nicht angezeigt wurden. Hätte ich selbst drauf kommen können. Jetzt funktioniert es!

        Danke, wieder was gelernt!

        P.S: nichts für ungut aber ich muss das mal loswerden: kann es sein das in diesem Forum keine "Absolut-Anfänger erwünscht sind?
        Wenn man einige Antworten so liest bekommt man echt das Gefühl vermittelt als seien solche Fragen unerwünscht...

        Ich hab aber mal gelernt es gibt keine doofen Fragen sondern nur doofe Antworten...;o) wie gesagt ist nicht böse gemeint,
        wollte es nur mal los werden. Solche Foren sollen einem doch den Einstieg erleichtern und nicht das Gefühl geben das man sich
        erst anmelden darf wenn man PHP und MySql auswendig kann !! ;o)

        Tausend Dank und viele Grüsse

        Kommentar


        • #5
          Zitat von jaffi Beitrag anzeigen
          Bitte entschuldige das ich das als Anfänger nicht immer gleich
          verifizieren kann...
          Dann empfehle ich folgende Faustregel: Benutze bei Mischcode den Teil, der für das Problem relevant ist. Die Sprache dieses Teils ist das erste Indiz für die Wahl des Forums.

          Beispiel: PHP-generiertes HTML-Dokument mit generiertem JavaScript-Code. Problem: beim Klicken auf Button XYZ passiert nicht ABC, sondern DEF. Klicken bedeutet: clientseitige Interaktion, bedeutet: Event-Handler arbeitet nicht richtig, bedeutet: nicht der PHP-Code, sondern der generierte JavaScript-Code ist fehlerhaft, bedeutet: im "HTML, JavaScript, AJAX und CSS"-Forum den Code posten, den der Client bekommt. Wenn ich dagegen dort dann PHP-Code sehe, der das ganze noch komplizierter macht, bin ich genervt.

          Sorry, wenn ich überreagiert habe.

          Zitat von jaffi Beitrag anzeigen
          kann es sein das in diesem Forum keine "Absolut-Anfänger erwünscht sind?
          Wenn man einige Antworten so liest bekommt man echt das Gefühl vermittelt als seien solche Fragen unerwünscht...
          Definiere Absolut-Anfänger. Ein paar Grundlagen (auch Forenregeln) sollte man intus haben, damit man überhaupt in der Lage ist, die Antwort zu verstehen (ist jetzt nicht auf dich bezogen, sondern allgemein). Die Idee, sich mal den generierten SQL-Code anzusehen (z. B. mit echo), sollte imho eigentlich recht naheliegend sein. Das erweckt bei mir den Eindruck (keine Unterstellung, nur ein persönlicher Eindruck), dass der Fragende keine Lust hat, selbst nach dem Fehler zu suchen.

          Nichts für ungut. Ich hatte heute vielleicht auch einen etwas schlechten Start in den Tag.

          Gruß,

          Amica
          [COLOR="DarkSlateGray"]Hast du die [COLOR="DarkSlateGray"]Grundlagen zur Fehlersuche[/color] gelesen? Hast du Code-Tags benutzt?
          Hast du als URL oder Domain-Beispiele example.com, example.net oder example.org benutzt?
          Super, danke!
          [/COLOR]

          Kommentar


          • #6
            Du fragst hier, weil du, bzw. den Code, verbessert werden möchtest. Also sei doch nicht sofort beleidigt, wenn das auch geschieht.

            Und ja, für das Erarbeiten der Grundlagen ist jeder selber zuständig. Denn hier kann man nicht mit jedem Anfänger einen individual Grundlagenkurs durchziehen.


            Nur zur Information:
            Ich hab aber mal gelernt es gibt keine doofen Fragen sondern nur doofe Antworten...;o)
            Da hast du was falsches gelernt.
            Das ist nur eine durchhalte Parole für Dokuleseverweigerer und DAUs.
            Wir werden alle sterben

            Kommentar


            • #7
              *del* Amica
              Zuletzt geändert von AmicaNoctis; 22.01.2010, 20:33. Grund: Flaming

              Kommentar

              Lädt...
              X