Function Laienfrage

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

  • Function Laienfrage

    Hallo Forum!

    Die unten aufgeführte Funktion gibt mir immer false zurück, und ich hab nicht rausgefunden warum

    PHP-Code:
    function getname($plid) {
        
    $found=0;
        
    //load mysql class & settings
        
    global $mysql,$settings;
            
    //query for user
            
    $getname_r=$mysql->query($settings['mysql']['db'],
                                               
    "SELECT userName 
                                                FROM userlog 
                                                WHERE userID="
    .$plid);
            while(
    $getname=mysql_fetch_array($getname_r,MYSQL_BOTH))
            {  
             
    $found=$getname['userName'];
            }
         
    //return false if no user was found
         
    if ($found==0){ return false; }
         else { return 
    $found; }
        }
        
        echo 
    getname(1);
        exit(); 

    Wahrscheinlich seh ich den Wald vor lauter Bäume nicht mehr ^^ Also lacht mich nicht aus :P

    Zu der Funktion: userID 1 existiert, Tabellen und Spaltennamen sind richtig geschrieben.

    Danke im Voraus für die Hilfe und MfG
    Onyx
    Zuletzt geändert von Onyxagargaryll; 04.07.2008, 10:51.

  • #2
    da hilft nur ein vernünftiges debugging

    peter
    Nukular, das Wort ist N-u-k-u-l-a-r (Homer Simpson)
    Meine Seite

    Kommentar


    • #3
      Hab ich schon Hab aber nix gefunden.
      Und wenn ich den Query manuell direkt im SQL eingebe erhalte ich auch das Resultat.

      Danke für die Antwort, MfG

      Kommentar


      • #4
        PHP-Code:
         echo getname(1);
        exit(); 
        Das noch hinter einen return zu setzen ist grober Unfug.

        // Edit: Wäh, das gehört garnicht mehr zur Funktion. Okay... Komisch eingerückt.

        Ich vermute mal, dass dein Query einfach nichts zurückliefert.

        Kommentar


        • #5
          Das war zur Demonstration, zu Testzwecken. Das hab ich zum Debuggen gebraucht.

          Wie gesagt, die SQL manuell eingegeben liefert das Resultat, $mysql und $settings sind gesetzt & vorhanden.


          Danke auch dir für die Antwort, Gruss
          Onyx


          EDIT: Ja das Einrücken bereitet mir hier im Forum z.T. ein wenig Schwierigkeiten ^^ Ich entschuldige mich dafür.

          Kommentar


          • #6
            Original geschrieben von Onyxagargaryll
            Hab ich schon Hab aber nix gefunden.
            Glaub ich dir nicht.
            Hast Du die fertige Query ausgeben lassen?
            mysql_error() ausgeben lassen?
            Die Anzahl der gefundenen Datensätze mittels mysql_num_rows() ausgeben lassen?
            In jeder gefundenen Zeile den Wert von "getname" ausgeben lassen?

            Kommentar


            • #7
              1. Ja
              2. ist leer
              3. =1 bei manueller Eingabe, da $found noch = 0 ist: 0 beim Script
              4. Was meinst du damit..? In jeder gefundenen Zeile die Funktion ausgeben..? Du meinst den userName? Darum gehts ja in der Qery.

              Was ich vergass zu erwähnen: die userID ist auto_increment, also werden nicht mehrere Datensätze ausgelesen.


              Danke für deine Antwort, MfG
              Onyx

              Kommentar


              • #8
                PHP-Code:
                function getname($plid)
                {
                    
                //load mysql class & settings
                    
                global $mysql,$settings;

                    
                //query for user
                    
                $sql 'SELECT userName FROM userlog WHERE userID= ' intval($plid) . 'LIMIT 1';
                    
                $res $mysql->query($settings['mysql']['db'],$sql);
                    while(
                $getname=mysql_fetch_array($res,MYSQL_BOTH))
                        return 
                $getname['userName'];

                    return 
                false;
                }
                    
                echo 
                getname(1); 
                Das erscheint mir bei deinem Vorhaben irgendwie vernünftiger.
                Spätestens jetzt kannst du dir auch mal die Query ausgeben lassen! Und hier posten, sowie zeitgleich in PMA gegenchecken.

                Und die seltsame und vor allem inkonsequente Verwendung der SQL-Klasse ist wahrscheinlich auch recht fehleranfällig.
                EDIT:
                Die While-schleife ist jetzt natürlich überflüssig (so wie vorher eigentlich auch schon), weil ja höchstens ein Datensatz kommt.
                Zuletzt geändert von TobiaZ; 04.07.2008, 11:09.

                Kommentar


                • #9
                  Hier die Funktion in der mysql Klasse:
                  PHP-Code:
                    function query($db$query="") {
                        
                  // load the settings
                        
                  require("settings.inc.php");
                        
                        
                  // connect to server
                        
                  $link            =    mysql_connect($settings['mysql']['host'],
                                                          
                  $settings['mysql']['user'],
                                                          
                  $settings['mysql']['passwd']);
                        if(!
                  $link) { // can't connect to the db
                          
                  return mysql_error();
                        }
                        
                        
                  // select the db
                        
                  $selected_db    =    mysql_select_db($db$link);
                        if(!
                  $selected_db) { // can't select the db
                          
                  return mysql_error($link);
                        }
                        
                        
                  // create the query
                        
                  if ($query == "") {
                      return 
                  "No Query.";
                      }
                        
                        
                  // execute the query
                        
                  $result            =    mysql_query($query$link);
                        if(!
                  $result) {
                          return 
                  mysql_error($link);
                        }
                        
                        
                  // give the result back
                        
                  return $result;
                    } 
                  Leider hat das LIMIT 1 auch nichts gebracht..

                  Ja das while wäre überflüssig Ich änder das nachher, lasse das für jetzt vorerst stehen.


                  Danke für die Hilfe, Gruss
                  Onyx


                  EDIT: Was ist PMA?

                  Kommentar


                  • #10
                    Hier die Funktion in der mysql Klasse:
                    Die ist ja mal sowas von überflüssig...

                    Leider hat das LIMIT 1 auch nichts gebracht..
                    Das hat auch keiner erwartet.

                    Aber alle erwarten hier ein vernünftiges Debugging! Der Peter hat schon drauf hingewiesen und auch Pekka hat dich gebeten die Query auszugeben. Warum postest du die Ausgabe nicht mal hier? Und hast du sie auch im PMA geprüft? Was kam dabei raus? Wundert uns das? Fragen über Fragen...

                    PMA = phpMyAdmin (oder von mir aus auch ein anderes Programm mit dem du Queries fehlerfrei an deine DB absetzen kannst.)

                    Kommentar


                    • #11
                      Wenn mysql_num_rows() 0 ist, stimmt entweder die Query nicht oder sie wird an die falsche Datenbank abgesetzt.

                      Kommentar


                      • #12
                        Query:
                        SELECT userName FROM userlog WHERE userID=1 LIMIT 1
                        Auf den Rest der Debugging-Anfragen habe ich weiter oben geantwortet.

                        Was ist PMA? Google will mir das nicht sagen..
                        EDIT: Ah ok Wie gesagt, im PMA gehts und er gibt mir das richtige zurück ("Im SQL" -> damit meinte ich PMA )

                        Danke für eure Geduld MfG
                        Onyx

                        EDIT: Datenbank geprüft, es ist die richtige. Und einen Connection-error gibts leider auch nicht.
                        Zuletzt geändert von Onyxagargaryll; 04.07.2008, 11:24.

                        Kommentar


                        • #13
                          Original geschrieben von TobiaZ
                          PMA = phpMyAdmin (oder von mir aus auch ein anderes Programm mit dem du Queries fehlerfrei an deine DB absetzen kannst.)

                          Kommentar


                          • #14
                            Bis auf die Tatsache, dass deine Query-Klasse für jeden Query neu connectet (was schon recht blöd ist)... hat ise nichtmal einen Vorteil, wenn du nicht alles komplett in der Klasse hast (die auch noch PHP4 ist)...

                            Btw: Sicher, dass die Namen wirklich korrekt sind?

                            userName und userlog .. warum nicht userLog?

                            Was passiert, wenn du den die Verbindung + Query ganz normal irgendeine gesonderte Funktion abschickst?

                            mfg

                            Kommentar


                            • #15
                              EDIT: Ah ok Wie gesagt, im PMA gehts und er gibt mir das richtige zurück
                              Dann solltest du mal deine Pseudo-Klasse deguggen, oder ganz in die Tonne werfen. Die ist mir ein bisschen wüst um sie jetzt auch noch zu kontrollieren. Aber wenn angeblich alles Richtig ist, müssen die Daten ja da irgendwo verschluckt werden.

                              Kommentar

                              Lädt...
                              X