Danny: Ausgabe mehrdimensionales Array

Guten Tag,

ich habe ein kleine Problem mit einer Ausgabe. Ich habe in einer MYSQL Userdaten. Jeder User kann mehrere Einträge (Zeilen) in der Datenbank haben.
Jede Zeile hat eine eindeutige id.

Nun möchte ich alle Zeilen eines Users abfragen und die Werte der entsprechenden id zuordnen und ausgeben - und da komme ich leider nicht weiter.

  
$query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."' GROUP BY id";  
  
$result=mysql_query($query,$db);  
  
$row = mysql_fetch_assoc($result);  
  
echo $ausgabe['$id']('$name']; //Leider klappt das so nicht  

  1. hi,

    echo $ausgabe['$id']('$name']; //Leider klappt das so nicht

    Ein var_dump() auf jeweils jede Variable, die keine mehr ist, sollte aufschluss bringen.

    mfg

    1. hi,

      echo $ausgabe['$id']('$name']; //Leider klappt das so nicht

      Ein var_dump() auf jeweils jede Variable, die keine mehr ist, sollte aufschluss bringen.

      mfg

      Das hilft mir leider auch nicht weiter...

      1. echo $ausgabe['$id']('$name']; //Leider klappt das so nicht

        Ein var_dump() auf jeweils jede Variable, die keine mehr ist, sollte aufschluss bringen.

        mfg

        Das hilft mir leider auch nicht weiter...

        Wieso? Was wird denn ausgegeben?

      2. hi,

        var_dump()
        Das hilft mir leider auch nicht weiter...

        Wenn var_dump() dir nicht helfen kann, dann kann dir nur noch Quakenet helfen.

        Sorry, aber was erwartest du von uns, sollen wir Hellsehen, was du probiert und versucht hast, und was von den Vorschlägen nicht geklappt hat?

        Steht denn wenigstens error_reporting(E_ALL) am Scriptanfang?

        mfg

  2. Hallo,

    Guten Tag,

    ich habe ein kleine Problem mit einer Ausgabe. Ich habe in einer MYSQL Userdaten. Jeder User kann mehrere Einträge (Zeilen) in der Datenbank haben.
    Jede Zeile hat eine eindeutige id.

    $query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."' GROUP BY id";

    warum verwendest Du

    [code lang=sql]SELECT *

      
    statt  
      
    ~~~sql
        SELECT  
            <kommagetrennte liste der benötigten Spalten>  
        FROM  
            tabelle  
    
    

    Die GROUP-BY-Klausel ist (nach Deiner Beschreibung) überflüssig. Was wolltest Du mit dieser Klausel erreichen?

    $result=mysql_query($query,$db);

    mysql_query liefert nicht immer eine Ressource zurück. Du berücksichtigst leider nur den Gut-Fall.

    Das Ergebnis ist (nach Deiner Beschreibung) eine Anzahl von Datensätzen. Iteriere mit einer passenden Schleife durch das Ergebnis, bespielsweise

    Solange das Holen eines Datensatzes aus der Ergebnismenge erfolgreich ist,
        Gebe die benötigten Daten aus.

    Du holst nur den ersten Datensatz aus der Ergebnismenge ab und prüfst noch nicht einmal, ob dieses Abholen erfolgreich ist. Leere Ergebnismengen sind *kein* Fehler.

    $row = mysql_fetch_assoc($result);
    echo $ausgabe['$id']('$name']; //Leider klappt das so nicht

    Nein, das Ergebnis ist *kein* zweidimensionales Array. Erst recht nicht mit der festen Zeichenkette $id als Index. Auch nicht mit den ID-Werten als Index.

    Schau Dir den Inhalt von $row mit var_dump() an. Einpacken in ein pre-Element hilft bei der Lesbarkeit.

    Freundliche Grüße

    Vinzenz

    1. Hallo,

      das nützt mir leider nichts. Natürlich sehe ich den vra_dump mit der jeweiligen id - aber wie gebe ich dies aus?

      1. Hallo,

        das nützt mir leider nichts.

        meine Hinweise auf die Fehler, die Du gemacht hast, nützen Dir nichts? [1]

        Natürlich sehe ich den vra_dump mit der jeweiligen id - aber wie gebe ich dies aus?

        So wie im Beispiel zu mysql_fetch_assoc() gezeigt. [2]

        Nochmals: Du hast *kein* mehrdimensionales Array, Du hast ein assoziatives Array.

        Vermutlich möchtest Du innerhalb der Schleife etwas wie

        echo [link:http://de.php.net/manual/de/function.htmlspecialchars.php@title=htmlspecialchars]($row['id']), htmlspecialchars($row['name']);

        haben. Ich gehe dabei davon aus, dass die Ausgabe als HTML zu einem Browser geschickt wird.

        Freundliche Grüße

        Vinzenz

        [1] den Hinweis von Don P solltest
            Du ebenfalls nicht ignorieren.
        [2] Das Beispiel, der überflüssige Einsatz von mysql_num_rows(), die
            "Fehlerbehandlung" (die keine ist) und ganz besonders die zweite
            Anmerkung vor der Ausgabeschleife, halte ich für nicht besonders
            gelungen :-(

        1. Hallo Vinzenz,

          ich verstehe es wohl nicht.

            
          $query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."'";  
            
          $result=mysql_query($query,$db);  
            
          $row = mysql_fetch_assoc($result);  
            
          echo $ausgabe['$id']['$name']; //Leider klappt das so nicht  
          
          

          Ich möchte den Namen von der Zeile mit "echo" in einem Browser ausgeben in der die id "1" ist-keine Schleife und auch nicht "alles nebeneinander".

            
          echo htmlspecialchars($row['id']['$name']) //Leider klappt das so nicht  
          
          

          Danny

          1. Hallo Danny,

            Ich möchte den Namen von der Zeile mit "echo" in einem Browser ausgeben in der die id "1" ist-keine Schleife und auch nicht "alles nebeneinander".

            wenn es mehr als einen passenden Datensatz gibt, dann benötigst Du eine Schleife. Punkt. Du schriebst selbst:

            Jeder User kann mehrere Einträge (Zeilen) in der Datenbank haben.

            OK, als *benötigst* Du eine Schleife. Du magst wollen oder nicht. [1]

            echo htmlspecialchars($row['id']['$name']) //Leider klappt das so nicht

              
            Ja, klar. Sag' ich doch. Gibt's ja auch nicht.  
              
            Es gibt  
              
              $row['id']  
              
            Es gibt  
              
              $row['name']  
              
            Deswegen schrieb \*ich\*:  
              
                `echo htmlspecialchars($row['id']), htmlspecialchars($row['name']);`{:.language-php}  
              
            Wie die Ausgabe aussehen soll, weiß ich nicht. Hast Du uns noch nicht verraten. Nur, dass die Werte nicht nebeneinander stehen sollen. Wie soll's denn aussehen?  
              
              
            Grüße  
              
            Vinzenz  
              
            [1] Bei meynem Fast-Familiennamensvetter geklaut (Band I).
            
            1. Hallo Vinzenz,

              ich möchte z.B. auf einer Website in einem Browser den Inhalt der Spalte "name" ausgeben Und zwar an einer Stelle den "name" aus der Zeile mit der id "1".
              An einer anderen stelle den Wert "name" aus der Zeile mit der id "5" (oder 3, oder 6...).

              Beispiel:

                
              echo "In der Datenbankzeile mit der id \"1\" steht der Name '".$datenbankausgabe[name wo id=1]."'";  
                
              echo "In der Datenbankzeile mit der id \"3\" steht der Name '".$datenbankausgabe[name wo id=3]."'";  
              
              

              Mehr möchte ich nicht.

              Viele Grüsse

              1. Hallo Danny,

                ich möchte z.B. auf einer Website in einem Browser den Inhalt der Spalte "name" ausgeben Und zwar an einer Stelle den "name" aus der Zeile mit der id "1".

                kann es zur gleichen Person verschiedene Einträge mit verschiedenen Namen geben?
                Ich erinnere Dich an

                Jeder User kann mehrere Einträge (Zeilen) in der Datenbank haben.

                Freundliche Grüße

                Vinzenz

                1. Hallo,

                  ja, jeder user kann mehrere Einträge (Zeilen) in der Datenbank haben.
                  Das Feld "name" ist nicht gleich "user"!
                  Das spielt aber ja auch keine Rolle-das Ergebniss zählt:

                    
                  echo "In der Datenbankzeile mit der id \"1\" steht der Name '".$datenbankausgabe[name wo id=1]."'";  
                    
                  echo "In der Datenbankzeile mit der id \"3\" steht der Name '".$datenbankausgabe[name wo id=3]."'";  
                  
                  
              2. Hallo,

                $row = mysql_fetch_assoc($result);

                echo $ausgabe['$id']['$name']; //Leider klappt das so nicht

                  
                Du hast dasen ersten Datensatz in `$row`{:.language-php}, und willst ihn dann aus `$ausgabe`{:.language-php} lesen?  
                Wie soll das auch gehen?  
                  
                Du suchst den Namen, und der steht vermutlich in  
                `$row['name']`{:.language-php}  
                Die zugehörige ID steht wohl in  
                `$row[$id]`{:.language-php} (hier keine Anführungzeichen um $id).  
                  
                Was hindert dich jetzt daran, diese auzugeben?  
                  
                Und Vinzenz hat recht:  
                Du hast mit `$row = mysql_fetch_assoc($result);`{:.language-javascript}  
                erst einen einzigen Datensatz abgeholt. Für die nächste ID musst du aber wieder einen abholen usw... also brauchst du eine Schleife!  
                  
                Gruß, Don P  
                
                
                1. Hallo,

                  ich habe ja eine Schleife.

                    
                  $query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."'";  
                    
                  $result=mysql_query($query,$db);  
                    
                  while($row = mysql_fetch_assoc($result))  
                  {  
                  echo $row ['$id']['$name']; //Leider klappt das so nicht  
                  }  
                  
                  
                  1. Hallo Danny,

                    ich habe ja eine Schleife.

                    $query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."'";

                    $result=mysql_query($query,$db);

                    Hier gehört eine Prüfung hin, ob mysql_query() erfolgreich war.

                    Falls nicht, gibt mysql_query den boolschen Wert FALSE zurück.

                    Ich gehe im Folgenden davon aus, dass es die Spalten

                    #    id
                    #    name

                    in Deiner Tabelle gibt.

                    while($row = mysql_fetch_assoc($result))
                    {
                        # echo $row ['$id']['$name']; //Leider klappt das so nicht

                    # Das ist ja auch klar:
                          # a) $row ist ein einfaches assoziatives Array
                          # b) Ich halte es für unwahrscheinlich, dass Deine Spaltennamen
                          #        $id
                          #        $name
                          #    lauten. Mit Dollarzeichen im Namen.

                    # Was liefert Dir
                          $ausgabe = sprintf(
                              'In der Datenbankzeile mit der id "%s" steht der Name "%s"',
                              htmlspecialchars($row['id']),
                              htmlspecialchars($row['name'])
                          );

                    }

                      
                      
                      
                    Freundliche Grüße  
                      
                    Vinzenz
                    
                    1. Hallo Vinzenz,

                      lieben Dank für deine Geduld.
                      Das folgende liefert keine Ausgabe-auch keinen Fehler:

                        
                      ...  
                      while ($row = mysql_fetch_assoc($result))  
                      {  
                      $ausgabe = sprintf(  
                                'In der Datenbankzeile mit der id "%s" steht der Name "%s"',  
                                htmlspecialchars($row['id']),  
                                htmlspecialchars($row['name'])  
                            );  
                      }  
                      
                      

                      Mitlerweile habe ich etwas gefunden was in die richtige Richtung geht-aber leider kann ich damit nur das feld "name" ansprechen. Wie komme ich nur an die anderen Felder der DB?

                        
                      $query="SELECT DISTINCT id, name FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."' GROUP BY id";  
                      $result=mysql_query($query,$db);  
                      while ($row = mysql_fetch_assoc($result))  
                      {  
                      $ausgabe[$row['id']] = $row['name'];  
                      }  
                      echo $ausgabe['1']; // Gibt den Wert "name" aus in der Zeile mit der id "1"  
                      echo $ausgabe['5']; // Gibt den Wert "name" aus in der Zeile mit der id "5"  
                      ...  
                      
                      

                      Wenn ich nun die Datenbankabfrage um z.B. die Spalte "ort" erweitere-wie kann ich diesen ausgeben?

                      Liebe Grüsse

                      Danny

                      1. Hallo,

                        Das folgende liefert keine Ausgabe-auch keinen Fehler: [...]

                        Du gibst ja auch nirgends an, dass eine Ausgabe erfolgen soll.

                        Wenn ich nun die Datenbankabfrage um z.B. die Spalte "ort" erweitere - wie kann ich diesen ausgeben?

                        Vielleicht so:

                          
                        $query="SELECT DISTINCT id, name, ort FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."' GROUP BY id";  
                        $result=mysql_query($query,$db);  
                          
                        while ($row = mysql_fetch_assoc($result))  
                        {  
                          $ausgabe[$row['id']] = array('name'=>$row['name'], 'ort'=>$row['ort']);  
                        }  
                        echo $ausgabe['1']['name']; // Wert "name" aus der Zeile mit der id "1" ?  
                        echo $ausgabe['1']['ort'];  // Wert "ort" aus der Zeile mit der id "1" ?  
                        echo $ausgabe['5']['name']; // Wert "name" aus der Zeile mit der id "5" ?  
                        echo $ausgabe['5']['ort'];  // Wert "ort" aus der Zeile mit der id "5" ?  
                        
                        

                        Das erscheint mir aber umständlich...
                        Viel logischer wäre einfach
                        while ($ausgabe[] = mysql_fetch_assoc($result)){}
                        um ein zweidimensionales Array namens $ausgabe zu erhalten. Das könnte man dann mit foreach durchlaufen.

                        Wie schon gesagt: Ich bin PHP auch erst am Lernen, aber so wäre es für mich logisch. Das hier sind meine ersten Trockenübungen, ungetestet... also nichts für ungut, wenn ich Mist schreibe ;)

                        Gruß, Don P

                        1. Hallo und vielen Dank,

                          auch das führt nicht zum gewünschten Ergewbnis.
                          Ich werde wohl einfach mehrere select ausführen und Gut ist.

                          Danke an alle.

                          Danny

                          1. Hi,

                            auch das führt nicht zum gewünschten Ergewbnis.

                            Dein ständig wiederholtes „funzt nich“ führt auch zu nichts.

                            Wie wär's, wenn du mal anfängst, dir anzuschauen, welche Struktur deine Daten jeweils haben?
                            var_dump ist dazu ein gut geeignetes Werkzeug. Also einfach mal einen Datensatz, oder mehrere in einem Array, holen, mit var_dump ausgeben lassen - und dann schauen, wie das ganze aufgebaut ist.

                            Wenn du dich mal selbst bemühst, sowas zu verstehen - dann hilft dir das sicher mehr, als wenn dir immer wieder Code-Schnippsel gepostet werden, bei denen du offenbar wenig bis gar nichts verstehst, und du dann einfach als Reaktion immer und immer wieder nur „funktioniert auch nicht“ von dir gibst.

                            Ich werde wohl einfach mehrere select ausführen und Gut ist.

                            Nein, Mist wäre.

                            MfG ChrisB

                            --
                            “Whoever best describes the problem is the person most likely to solve the problem.” [Dan Roam]
                  2. Hallo,

                    ich habe ja eine Schleife.

                    Schön. Das ist aber neu.

                    Es ist ja nicht so, dass ich PHP könnte, aber probier' doch mal das:

                    $query = "SELECT * FROM tabelle WHERE user_id = '".mysql_real_escape_string(trim($user_id))."'";

                    $result=mysql_query($query,$db);

                    while($row = mysql_fetch_assoc($result))
                    {

                    echo $row ['id'];    // die id, wenn das Datenfeld "id" heißt
                         echo $row ['name'];  // der Name, wenn das Datenfeld "name" heißt

                    }

                      
                    Ob `$query`{:.language-php} überhaupt korrekt zusammengebaut ist, weiß ich nicht.  
                    Was ergibt denn `mysql_num_rows($result)`{:.language-php} ?  
                    Es müsste die Anzahl der gefundenen Datensätze sein.  
                      
                    Und was steht jeweils in `$row`{:.language-php} ? Mach doch mal ein vardump davon... Das kann doch nicht so schwer sein...  
                      
                    Gruß, Don P  
                    
                    
  3. echo $ausgabe['$id']('$name']; //Leider klappt das so nicht

    -----------------------^