Problem mit if mysql abfrage ob wert vorhanden

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

  • Problem mit if mysql abfrage ob wert vorhanden

    Hi,

    habe leider ein Merkwürdiges problem festgestellt in meiner 2. if abfrage.

    In der 2. If Abfrage soll geprüft werden ob der Wert "input" in der Datenbank "bewertungen" in der spalte "userid" vorhanden ist.

    userid hat in meiner sql der Primärschlüssel.

    In userid stehen in der Datenbank die Usernummern.



    Folgendes merkwürdiges problem tritt auf:

    Wenn anstelle von IRGENDEINER Zahl ein Buchstabe oder mehrere Buchstaben übergeben werden, meint die 2. if abfrage das der übergebene Wert vorhanden ist und löst den else dadrunter aus.
    Wenn nur irgend eine Zahlenkombination wie 123456789 (die nicht in der Datenbank ist) übergeben wird, verhält sich diese if abfrage korrekt und gibt die korrekte Fehlermeldung aus.


    Beim Script Aufruf wird normalerweise der Wert "user" übergeben welcher dann zu "input" wird.



    PHP-Code:
    $dbconnect=mysql_connect("SERVER","SQLNUTZER","SQLPASSWORT");
    $dbusername "SQLDBUSER";
    $dbtable "bewertungen";
    $dbsuchspalte "userid";
    $input $_GET['user'];
    $inputvorschlag "userid";
    $inputvorschlag2 "USERID";


    if(
    $input!="")
    {

    mysql_select_db($dbusername$dbconnect);

    $sql_checkbefehl="SELECT $dbsuchspalte FROM $dbtable WHERE $dbsuchspalte =" $input;
    $checkergebnis=mysql_query($sql_checkbefehl,$dbconnect) OR die(mysql_error());

    if (
    mysql_num_rows($checkergebnis)==OR $input==$inputvorschlag OR $input==$inputvorschlag2)
        {
    ausgabe wenn user nicht in der Datenbank oder gleich ist mit inputvorschlag und imputvorschlag2 
        
    }

    else
         { 
    ausgabe wenn user in Datenbank vorhanden
         
    }




    }
    else
        {
    Ausgabe wenn kein Wert für input übergeben wurde 
        

    Ich hoffe ihr könnt mir damit weiterhelfen, da ich unbedingt die Fehlermeldung ausgeben muss.
    Gibt leider einige "tölpel" die ihrem usernamen anstelle der userid beim script aufruf verwenden. Und das trotzt das ich eine userid Liste bereitstelle mit fertigen script aufruf -.-
    Zuletzt geändert von thx-sound; 31.07.2009, 13:51.

  • #2
    Zitat von thx-sound Beitrag anzeigen
    Wenn anstelle von IRGENDEINER Zahl ein Buchstabe oder mehrere Buchstaben übergeben werden, [...]
    ... dann wird dein SQL-Statement dadurch augenblicklich fehlerhaft; schliesslich hast du keinerlei Kontrolle des Wertes auf Gültigkeit vorgesehen.

    Dass dein Script dann noch weiter als bis zum OR die(mysql_error()); kommen soll, kann ich mir schwer vorstellen.


    Btw: Die zusätzlichen Bedingungen, die du in diesem if auch noch drin hast, finde ich an dieser Stelle höchst unsinnig untergebracht. Wenn "userid" oder "USERID" als Suchbegriff übergeben wurden, dann willst du doch vermutlich gar nicht in der Datenbank suchen, weil das unsinnige (Default-?)Werte sind - warum tust du's dann trotzdem?
    I don't believe in rebirth. Actually, I never did in my whole lives.

    Kommentar


    • #3
      ich möchte nicht wirklich nach dem "userid" oder "USERID" suchen lassen.

      in der Musteraufruf Vorlage steht eben "userid" an der stelle wo dann die userid von dme user selbst gesetzt werden soll. Und wenn jemand ausversehen nur das als Url eingibt soll ja auch ne fehlermeldung ausgegeben werden

      ich kann es natürlich anders herum stellen:

      PHP-Code:
      if ($input==$inputvorschlag OR $input==$inputvorschlag2 OR mysql_num_rows($checkergebnis)==
      Aber das hat ja kein einfluss auf eine falsche userid.


      Wie es anders gehen soll weiß ich leider nicht. Habe keine ahnung. War froh das ich mit hilfe einiger user das gesamt script zum laufen bekommen hatte.
      Die Abfrage wurde mir ja schon halbwegs hier aus dem Forum generiert vor 2 Monaten. Allerdings hat sich das Script ziemlich verändert seit damals...




      Also momentan erhalte ich als fehlerausgabe beim scriptaufruf mit einen text als "user" :


      Unknown column 'irgendeintext' in 'where clause'



      Allerdings kann ich nicht 100% sagen ob sich das nicht schon auf die mysqlabfrage bezieht die in der else ist für die ausgabe der Daten.




      Was ich natürlich einfach machen könte., ich könte den übergebenen Wert nach Buchstaben durchsuchen lassen und diese gegen igend eine zahl austauschen.
      Aber das ist glaube ich nicht im sinn und zweck für eine if abfrage. Sowas hatte ich gemacht um einen vernünftigen Dateinamen aus dem generierten Bild zum abspeichern zu bekommen, da dort nicht die userid zum einsatz kommen soll..
      Zuletzt geändert von thx-sound; 31.07.2009, 14:28.

      Kommentar


      • #4
        Zitat von thx-sound Beitrag anzeigen
        ich kann es natürlich anders herum stellen:
        PHP-Code:
        if ($input==$inputvorschlag OR $input==$inputvorschlag2 OR mysql_num_rows($checkergebnis)==
        Genauso unsinnig - wieso willst du zuerst die Datenbank-Abfrage machen, wenn der Suchwert "userid" lautet?

        Mach sie in dem Fall gar nicht erst!

        Also momentan erhalte ich als fehlerausgabe beim scriptaufruf mit einen text als "user" :

        Unknown column 'irgendeintext' in 'where clause'

        Allerdings kann ich nicht 100% sagen ob sich das schon auf die mysqlabfrage bezieht
        Natürlich tut es das.

        Und natürlich hast du bei der Fehlersuche ja auch eine Kontrollausgabe der Query gemacht - so wie die aussieht, sollte dir daran doch etwas auffallen ...?

        Was ich natürlich einfach machen könte., ich könte den übergebenen Wert nach Buchstaben durchsuchen lassen und diese gegen igend eine zahl austauschen.
        Das wäre ja noch blödsinniger - dann kommt am Ende noch ein Suchtreffer heraus, trotz abwegigem Suchwert.

        Entweder schreibst du die Abfrage so, dass sie auch mit Buchstaben umgehen kann (und dann einfach nur keinen Wert liefert);
        oder du prüfst den Wert vorher auf Gültigkeit - und machst dann gar nicht erst eine Abfrage, wenn er nicht gültig ist. (Das ist dann prinzipiell wieder das gleiche, wie mit dem Wert 'userid' - warum danach überhaupt erst suchen lassen, wenn danach zu suchen nicht im geringsten einen Sinn ergibt?)
        I don't believe in rebirth. Actually, I never did in my whole lives.

        Kommentar


        • #5
          Zitat von wahsaga Beitrag anzeigen
          Genauso unsinnig - wieso willst du zuerst die Datenbank-Abfrage machen, wenn der Suchwert "userid" lautet?

          Mach sie in dem Fall gar nicht erst!


          Natürlich tut es das.

          Und natürlich hast du bei der Fehlersuche ja auch eine Kontrollausgabe der Query gemacht - so wie die aussieht, sollte dir daran doch etwas auffallen ...?


          Das wäre ja noch blödsinniger - dann kommt am Ende noch ein Suchtreffer heraus, trotz abwegigem Suchwert.

          Entweder schreibst du die Abfrage so, dass sie auch mit Buchstaben umgehen kann (und dann einfach nur keinen Wert liefert);
          oder du prüfst den Wert vorher auf Gültigkeit - und machst dann gar nicht erst eine Abfrage, wenn er nicht gültig ist. (Das ist dann prinzipiell wieder das gleiche, wie mit dem Wert 'userid' - warum danach überhaupt erst suchen lassen, wenn danach zu suchen nicht im geringsten einen Sinn ergibt?)




          Sorry ich steige bei deinen Text nicht wirklich durch.

          Ich will ja quasi mit der checkabfrage Prüfen ob der Wert gültig ist in dem ich überprüfe ob der in der Datenbank ist.

          Mir ist inzwischen schon klar geworden das es wohl der Falsche sql abruf ist, aber ich weiß nicht wie ich es anders Prüfen kann ob der Wert in der datenbank ist.
          ich fand es schon immer merkwürdig das da am ende ein = . $input in der sql abfrage für das überprüfen steht und nicht irgend wo weiter vorne


          Wenn ich es besser wüßte wie es geht, würde ich garnicht erst Fragen.


          Gruss Stefan

          Kommentar


          • #6
            Zitat von thx-sound Beitrag anzeigen
            Ich will ja quasi mit der checkabfrage Prüfen ob der Wert gültig ist in dem ich überprüfe ob der in der Datenbank ist.
            Das ist so, als ob du ins Telefonbuch schauen würdest, um zu "prüfen", ob 12345678 ein in Deutschland vorkommender Familienname ist ...

            ich fand es schon immer merkwürdig das da am ende ein = . $input in der sql abfrage für das überprüfen steht und nicht irgend wo weiter vorne
            Nein, das ist nicht merkwürdig, sondern normale SQL-Syntax.
            Was du dabei nicht berücksichtigst ist aber, dass MySQL wie auch andere Sprachen wie bspw. PHP, Zahlenwerte anders notiert als Textstrings.

            Wenn ich es besser wüßte wie es geht, würde ich garnicht erst Fragen.
            Und wenn du dir mal ein bisschen Grundlagenwissen aneignen würdest, statt dir per Copy&Paste irgendwas zusammenzubasteln, was vielleicht zufällig am Ende mal "funktioniert" - dann bräuchtest du gar nicht erst fragen.


            Also, überlege dir, wie du vorgehen willst.

            Willst du das ganze simpel so schreiben, dass die Datenbank "alles mögliche" vorgesetzt bekommt? Dann informiere dich, wie der Wert in der WHERE-Klausel so unterzubringen ist, dass auch Buchstaben dort nicht die Syntax zerstören.

            Oder willst du vorher prüfen, so dass du alles, was gar keine Zahl ist, gar nicht erst an die Datenbank schickst?
            Dann überlege dir auch dazu, a) wie diese Prüfung aussehen könnte, und b) wie man das ganze dann vom Ablauf her gestaltet - wann du eine Datenbankabfrage machst, und wann nicht, sondern gleich eine entsprechende (Fehler-)Meldung ausgibst.
            I don't believe in rebirth. Actually, I never did in my whole lives.

            Kommentar


            • #7
              also es funktioniert nun folgendes mit preg_match :


              PHP-Code:
              $dbconnect=mysql_connect("SERVER","SQLNUTZER","SQLPASSWORT");
              $dbusername "SQLDBUSER";
              $dbtable "bewertungen";
              $dbsuchspalte "userid";
              $input $_GET['user'];



              if(
              $input!="")
                 {

              if (
              preg_match("/^[0-9]*$/"$input)===)
                  {
              print 
              "ausgabe wenn nicht nur Zahlen enthalten sind";
                   }
              else
                   {

              mysql_select_db($dbusername$dbconnect);

              $sql_checkbefehl="SELECT $dbsuchspalte FROM $dbtable WHERE $dbsuchspalte =" $input;
              $checkergebnis=mysql_query($sql_checkbefehl,$dbconnect) OR die(mysql_error());

              if (
              mysql_num_rows($checkergebnis)==)
                  {
              print 
              "ausgabe wenn user nicht in der Datenbank"
                  }

              else
                   { 
              print 
              "ausgabe wenn user in Datenbank vorhanden";
                   }

                   }


                   }
              else
                  {
              print 
              "ausgabe wenn kein Wert für input übergeben wurde";
                   } 
              Ist das gut oder soll da noch etwas verbessert werden?
              Auf eine bestimmte anzahl an zahlen darf es nicht beschrängt werden.

              Wenn als Input Buchstaben und zahlen kommen erfolgt auch die korrekte Ausgabe des Fehlers.
              Zuletzt geändert von thx-sound; 31.07.2009, 23:42.

              Kommentar


              • #8
                richtiges einrücken üben

                Peter Kropff - PHP - Programmierstile - Einrückungen
                Gruß
                Uzu

                private Homepage

                Kommentar

                Lädt...
                X