wieso geht die Funktion nicht?

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

  • wieso geht die Funktion nicht?

    Hallo. Ich habe eine Funktion geschrieben, die mir einen Link zu einem Userprofil liefert, wenn ich als Argument die Userid angebe.

    Hm, ich hab ne etwas verschachtelte SQL Abfrage drinne, die nicht funktioniert.

    Ich poste mal die ganze Funktion.

    PHP-Code:
    function getuserlink($userid) {
        
    // datenbank classe machen und connecten
        
    $db = new db;
        
    $db->connect();
        
    $db->select_db("wiewowarum");

        
    $result $db->query_first("SELECT www_user.nick, www_user.userid, www_user.punkte, www_groups.gruppentext FROM www_user, www_groups WHERE www_user.userid = '".$userid."' AND www_groups.groupid=www_user.groupid");

            
    $userlink "<a href=\"index.php?page=profile&userid=".$result["www_user.userid"]."\"";
            
    $userlink .= " title=\"Punkte: ".$result["www_user.punkte"]." \n";
            
    $userlink .= "Gruppe: ".$result["www_groups.gruppentext"]."\">".$result["www_user.nick"]."</a>";

        return 
    $userlink;

    Naja, geht halt nicht, ist aber von den Feldern in der Tabelle her alles richtig.

  • #2
    poste mal deine query_first($query) funktion

    und dein link hat auch eine exotische url
    Zuletzt geändert von graf; 03.07.2003, 15:09.

    Kommentar


    • #3
      PHP-Code:
      // Ein SELECT, welches nur einen Beitrag ausgibt.
              
      function query_first($query) {

              if(
      $this->db_status == "connected")
              {
                  if(!
      $this->result mysql_query($query))
                      {
                          
      $this->errormessage mysql_error();
                          
      $this->errornumber mysql_errno();
                          return 
      0;
                      }
                 else
                     {
                             
      $this->query($query);
                             if(!
      is_array(mysql_fetch_array($this->result))) 
                             {
                                 
      $result_first mysql_fetch_array($this->result);
                             }
                             else
                             {
                                 
      $result_first array_shift(mysql_fetch_array($this->result));
                             }
                             return 
      $result_first;

                     }
              }
              else
                  {
                         return 
      0;
                  }
              } 
      Wieso, ich übergebe nur die userid in dem link und den Modus profile...
      Und als title="" gibts eben einpaar infos zum User...
      Die Funktion geht aber, nach einigen Tests..
      Zuletzt geändert von OliOli; 03.07.2003, 15:18.

      Kommentar


      • #4
        ok, also erstmal heissen deine spalten
        $result["punkte"] etc. der tabellenname kommt nicht mit.

        und das versteh ich nich
        PHP-Code:
        if(!is_array(mysql_fetch_array($this->result)))     { // wenn das result nicht leer ist, dann IST es ein array
            
        $result_first mysql_fetch_array($this->result); // und wenn es leer ist, dann wird es auch hier kein array
        }
        else {
            
        $result_first array_shift(mysql_fetch_array($this->result));

        mach
        PHP-Code:
        $result mysql_fetch_array($this->result);
        if (
        sizeof($result)>1$result array_shift($result); 
        nein, nein, nein ... an was ich gerade wieder gedacht habe!?

        pack in deine sq-abfrage doch einfach noch ein
        LIMIT 0,1 rein, dann kommt auch nur ein Datasatz.

        und mein letzter code-vorschlag ist natürlich QUATSCH, weil die sizeof in deiner Abfrage auf jeden Fall größer als 1 ist.

        wenn du an der stelle ein array_shift nutzt, dass beschränkst du dein ergebnis auf die spalte "nick"
        Zuletzt geändert von graf; 03.07.2003, 15:45.

        Kommentar


        • #5
          hm, also stimmt, dann war das result leer, denn er hat mir mal gesagt, dass array_shift ein array braucht, und da hab ich gedacht, ok, ist im result eben nur ein Datensatz, muss dann ja kein array sein...

          Nein, also er will eben nicht. Wenn ich alles ab WHERE rausnehme, dann gibt er bei allen results den Buchstaben F aus, wobei bei einem Eintrag in der Datenbank der nick mit F anfängt...
          Wäh, komisch...

          Kommentar


          • #6
            du kriegst wohl eh nur einen datansatz zurück, weil die userID sollte ja nicht mehrmals vorkommen. also wirst du auch kein LIMIT brauchen.

            mach dein sql-query
            und der link ist dann sowas in der art.
            PHP-Code:
            $userlink "<a href=\"index.php?page=profile&userid=".$result["userid"]."\"";
            $userlink .= "&punkte=".$result["punkte"];
            $userlink .= "&gruppentext=".$result["gruppentext"]."\">".$result["nick"]."</a>"

            Kommentar


            • #7
              und dein query sollte eher so lauten
              PHP-Code:
              "SELECT U.nick, U.userid, U.punkte, G.gruppentext FROM www_user U LEFT JOIN www_groups G ON(groupid) WHERE U.userid = ".$userid

              Kommentar


              • #8
                hm, geht nicht... Verdammt, fehlt in deiner Abfrage nicht vielleicht ein Teil, dass er den Gruppentext nehmen soll, zu welchem die groupid gehört, welche in der Usertabelle steht?

                Weil bei solchen Abfragen steig ich net durch... Hab noch kein tut oder so gefunden, welches genau beschreibt wie das mit JOIN und so funzt..

                Kommentar


                • #9
                  beschreib mal deine tabellen und deren möglichen inhalt, zu wievielen

                  gruppen kann ein user gehören?

                  und im zweifel, beschreib anhand der inhalte, was du als ergebis genau haben willst.

                  Kommentar


                  • #10
                    Original geschrieben von OliOli
                    hm, geht nicht... Verdammt, fehlt in deiner Abfrage nicht vielleicht ein Teil, dass er den Gruppentext nehmen soll, zu welchem die groupid gehört, welche in der Usertabelle steht?

                    Weil bei solchen Abfragen steig ich net durch... Hab noch kein tut oder so gefunden, welches genau beschreibt wie das mit JOIN und so funzt..
                    Durch das LEFT JOIN werden die beiden Tabellen "quasi" zu einer. Zu jedem User holt er den Eintrag aus GROUPS, dessen groupID mit der groupID des Users übereinstimmt, wenn es eine gibt. deswegen JOIN .. ON (groupid)
                    wenn es keine entsprechende groupid in GROUPS gibt, würden bei diesem join die felder die aus GROUPS kommen NULL sein.

                    wenn es IMMER eine groupid gibt, kannst du auch INNER JOIN nehmen, ohne das dir ein user nicht angezeigt werden könnte.

                    Kommentar


                    • #11
                      PHP-Code:
                      #
                      # Tabellenstruktur für Tabelle `www_user`
                      #

                      CREATE TABLE www_user (
                        
                      userid int(5NOT NULL auto_increment,
                        
                      nick varchar(50) default NULL,
                        
                      email varchar(50) default NULL,
                        
                      passwort varchar(32) default NULL,
                        
                      usertext text,
                        
                      datum int(32) default '0',
                        
                      punkte int(4) default '0',
                        
                      homepage varchar(200) default NULL,
                        
                      status tinyint(1) default '0',
                        
                      hobbys text,
                        
                      groupid int(3NOT NULL default '4',
                        
                      PRIMARY KEY  (userid),
                        
                      UNIQUE KEY id (userid)
                      TYPE=MyISAM;

                      #
                      # Daten für Tabelle `www_user`
                      #

                      INSERT INTO www_user VALUES (1'Oli''jan--oliver@web.de''750bf8bb97e4a4b1f5b9c18ea69b5e86'''10564621810'http://'1''1);
                      INSERT INTO www_user VALUES (2'Fabi''webstarfabi@web.de''cf2bbbc4abaec07ba07bec4c9c0c0156'''10564629240'http://'1''1);
                      INSERT INTO www_user VALUES (3'karl''karl@karl.de''598d4c200461b81522a3328565c25f7c'''10564718870'http://'0''4); 
                      Das ist die Tabelle www_user mit drei Usern drinne


                      PHP-Code:
                      #
                      # Tabellenstruktur für Tabelle `www_groups`
                      #

                      CREATE TABLE www_groups (
                        
                      groupid int(5NOT NULL auto_increment,
                        
                      groupname varchar(50) default NULL,
                        
                      gruppentext varchar(20NOT NULL default '',
                        
                      allows varchar(15NOT NULL default '',
                        
                      PRIMARY KEY  (groupid),
                        
                      UNIQUE KEY id (groupid)
                      TYPE=MyISAM;

                      #
                      # Daten für Tabelle `www_groups`
                      #

                      INSERT INTO www_groups VALUES (1'admin''Administrator''');
                      INSERT INTO www_groups VALUES (2'smods''Supermoderator''');
                      INSERT INTO www_groups VALUES (3'mod''Moderator''');
                      INSERT INTO www_groups VALUES (4'user''User'''); 
                      und www_groups, mit den Gruppen drinne

                      Ausgegeben werden müsste nick(www_user) als Linkname, als title Feld des Links die punkte (www_user) und die group (www_groups)

                      Kommentar

                      Lädt...
                      X