Susi: Felder aus MySQL auslesen und in PHP einzeln ansprechen

Hallo,

ich habe hier ein Problem wo ich nicht weiterkomme...

Ich lese aus meiner Datenbank die Felder Menü-Name aus, aber wie lese dich die Felder aus dem Array in PHP?

Ich habe das so gemacht aber es funktioniert nicht?
---------
 $dbh = getConn();
$db_tabelle = "menu";
$query = "SELECT menu FROM $db_tabelle ORDER BY mid ASC";
$result = mysql_query(($query),$dbh);

while ($row = mysql_fetch_array($result)) {
        echo $row[0];
    }
---------

Alle Date werden im Feld 0 vom Array geschrieben aber ich möchte jeden datensatz in ein eigenes Array Feld schreiben so das ich dann
$row[0] $row[1] $row[2] einzeln auslesen kann

Was mache ich den falsch? Ich versteh das irgendwie nicht mehr...

Gruß Susi

  1. Hallo,

    Du musst echo $row[Feld der Tabelle das ausgelesen werden soll] schreiben!

    samy,

    1. Du musst echo $row[Feld der Tabelle das ausgelesen werden soll] schreiben!

      Hallo,

      nein das geht auch nicht.

      Ich habe die Spalte menu und in jeder Zeile steht ein Datensatz z.B.:
      Wir über und
      Philosphie
      Leistung
      Kontakt

      Aber nach meinem Code wird der Komplette Datensatz wieder geben.

      Ich möchte gerne folgendes Variablen in mein Variablen stehen haben welches natürlich aus der Datenbank kommen soll ich schreibe es aber nochmals auf um zu verdeutlichen was ich meine $row[0]='Wir über uns' $row[1]='Philosphie' $row[2]='Leistung' etc.

      Aber ich habe in $row[0] folgendes stehen: $row[0]='Wir über undPhilosphieLeistungKontakt' Aber so ist das falsch! Ich will die in ein Array haben aber nicht alle im ersten Feld sondern jeden Datenbankzeile in ein eigenes Array Feld aber warum geht das bei mir nicht?

  2. hi

    Ich lese aus meiner Datenbank die Felder Menü-Name aus, aber wie lese dich die Felder aus dem Array in PHP?

    Ich habe das so gemacht aber es funktioniert nicht?

    $dbh = getConn();
    $db_tabelle = "menu";
    $query = "SELECT menu FROM $db_tabelle ORDER BY mid ASC";
    $result = mysql_query(($query),$dbh);

    $i=0;
     while ($row = mysql_fetch_array($result)) {
             echo $row[$i];
             $i++;
         }
    so?

    gruß
    bjb

  3. ne abend Susi,

    while ($row = mysql_fetch_array($result))

    diese funktion kann sowohl ein numerisches array (mit zahlen als index) als auch ein assoziatives array (strings als index) erzeugen. der standard ist eigentlich beides, kann aber sein, dass es geändert wurde. mit mysql_fetch_array($result, MYSQL_NUM) legst du fest, dass er nur das numerische erzeugen soll. versuch es mal damit als:

    while ($row = mysql_fetch_array($result, MYSQL_NUM))

    Ilja

    1. while ($row = mysql_fetch_array($result, MYSQL_NUM))

      Das geht auch nicht? Warum schreibt der das nicht in ein Arry? So wie es mir aussieht ist das nur 1 String aber laut Manuel sollte es doch gehen?

      Verstehe ich nicht?

    2. Hi Ilja,
      Zunächst betrachte ich es mal als riesen Vorteil die Felder über Ihren Spaltenanmen anzusprechen.
      Sorry was soll dann der Quatsch mit numerischen Array ausserdem löst es das Prob nicht.

      TomIRL

      1. Ich habe mir un gedacht ich muß erst das Arry erzeugen aber das funktioniert auch nicht...

        Als Ausgabe bekomme ich dann folgendes:
        ArrayArrayArrayArrayArrayArrayArray

        Ich weiß gar nicht wo der Denkfehler ist oder wo ich was falsch mache?

        $row = array();
        $i=0;
        while ($row[$i] = mysql_fetch_array($result, MYSQL_NUM))
         {
                 echo $row[$i];
                 $i++;
             }

        1. hi

          $i=0;
          while ($row[$i] = mysql_fetch_array($result, MYSQL_NUM))

          ^^^^ich glaube das muss da nicht rein
          meiner meinung nach einfach:
            while ($row = mysql_fetch_array($result))
          geht das nicht?
          ich habe das auch mal so benutzt und das ging einwandfrei

          gruß
          bjb

          1. hi nochmal:

            while ($row[$i] = mysql_fetch_array($result, MYSQL_NUM))
                          ^^^^ich glaube das muss da nicht rein
            meiner meinung nach einfach:
              while ($row = mysql_fetch_array($result))

            korrektur:
            ich habe dann in der while-schleife iene neuen array benutzt:
            $newarray[$i] = $row;  <-- in den array

            gruß
            bjb

    3. Hallo,

      Ich werde das Problem jetzt mal löeen damit hier nicht so viel rumgerätzelt wird.
      Also er schreibt alles in das Array aber nach einander also wenn die while-Schleife das erste mal durchläuft dann hat $row[0] den Wert "Wir uber uns" und dann bei dem zweiten durchlauf der Schleife den Wert "keine Ahnung" also wenn du allse unter ein ander haben wilst dann schreib einfach in die Schleife:

      echo $row[0]."<br>";

      oder mach das ganze in einer Tabelle.
      denn wenn du nur "echo $row[0];" schreibst dann wird einfch alles nach einander ausgegeben.

      samy,

      1. Hallo Samuel,

        Also er schreibt alles in das Array aber nach einander also wenn die while-Schleife das erste mal durchläuft dann hat $row[0] den Wert "Wir uber uns" und dann bei dem zweiten durchlauf der Schleife den Wert "keine Ahnung" also wenn du allse unter ein ander haben wilst dann schreib einfach in die Schleife:

        echo $row[0]."<br>";

        Moment bist Du Dir da sicher?
        Ich bin mir auch sicher, dass Du gerade echten Mist verzapfst!
        row[0] exsitiert nicht!
        row[menue] dafür.
        Ich glaube mir fallen gleich wieder Haar aus.
        :-)

        Tom

      2. echo $row[0]."<br>";

        oder mach das ganze in einer Tabelle.
        denn wenn du nur "echo $row[0];" schreibst dann wird einfch alles nach einander ausgegeben.

        »»
        »»
        »»
        »»
        »»
        »»

        Nee da hast du mich falsch verstanden, das wär ja auch zu einfach als Lösung

        Ich möchte nicht alles in $row[0] stehen haben sondern der nächste Werte soll in $row[1] und der übernächste  Wert in $row[2] geschrieben werden Die Werte lese ich aus der Tabelle auch Zeilenweise aus. Das heisst jede Zeile hat eine ID die ich aber nicht brauche.

        1. Ich möchte nicht alles in $row[0] stehen haben sondern der nächste Werte soll in $row[1] und der übernächste  Wert in $row[2] geschrieben werden Die Werte lese ich aus der Tabelle auch Zeilenweise aus. Das heisst jede Zeile hat eine ID die ich aber nicht brauche.

          Ich erkenne den Sinn nicht:
          Aber trotzdem:

          $dbh = getConn();
          $db_tabelle = "menu";
          $query = "SELECT menu FROM $db_tabelle ORDER BY mid ASC";
          $result = mysql_query(($query),$dbh);

          while ($row = mysql_fetch_array($result)) {
                  echo $row[menue];
          $new_arr[]=$row[menue];

          }
          print_r ($new_arr);

          Ungetestet.

          TomIRL

          1. Ich möchte nicht alles in $row[0] stehen haben sondern der nächste Werte soll in $row[1] und der übernächste  Wert in $row[2] geschrieben werden Die Werte lese ich aus der Tabelle auch Zeilenweise aus. Das heisst jede Zeile hat eine ID die ich aber nicht brauche.
            Ich erkenne den Sinn nicht:
            Aber trotzdem:

            $dbh = getConn();
            $db_tabelle = "menu";
            $query = "SELECT menu FROM $db_tabelle ORDER BY mid ASC";
            $result = mysql_query(($query),$dbh);

            while ($row = mysql_fetch_array($result)) {
                    echo $row[menue];
            $new_arr[]=$row[menue];

            }
            print_r ($new_arr);

            Als Ausgabe kommt folgendes:
            Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => )

            Der Sinn ist ich habe ein JavaScript Menü wo die Menü Punkte aus der Datenbank geholt werden, was ja nicht funktioniert :-(

            Wenn ich nun ein Menüpunkt ändere brauche ich das nur über mein CMS tun und fertig ist das neue Menü

            Und die Variable für jeden Menüpunkt heißt bei mir $row[0]; $row[1]; $row[2]; etc.

            So sieht mein Menü aus:
            oCMenu.makeMenu('top0','',' <?=$row[0];?>','index.php?m=1000&s=0','',80,20)

            oCMenu.makeMenu('top1','',' <?=$row[1];?>','index.php?m=2000&s=0','',110,20)

            oCMenu.makeMenu('top2','',' <?=$row[2];?>','index.php?m=3000&s=0','',100,20)

            1. Als Ausgabe kommt folgendes:
              Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => )

              new_arr[]="$row[menue]";
              Anführungsstriche fehlten ist ja ein String.

              1. Als Ausgabe kommt folgendes:
                Array ( [0] => [1] => [2] => [3] => [4] => [5] => [6] => [7] => [8] => )

                new_arr[]="$row[menue]";
                Anführungsstriche fehlten ist ja ein String.

                So nun funktioniert es! Das es eben nicht lief lag daran das ich "menu" so definiert und Du so "menue" habe.

                Aber $row[menu]; ist doch auch ein Array oder?
                Was ich nun nicht verstehe warum muß man die Position im array nicht mit i hochzählen? In meinen ersten geh versuchen hat er alle Werte an der ersten Position meines Array geschrieben? Aber warum?

                Das ist die Lösung:

                $dbh = getConn();
                $db_tabelle = "menu";
                $query = "SELECT menu FROM $db_tabelle WHERE sitemap_deaktiviert!='1' ORDER BY sort ASC";
                $result = mysql_query(($query),$dbh);

                while ($row = mysql_fetch_array($result)) {
                        //echo $row[menu];
                $new_arr[]=$row[menu];
                    }

                echo $new_arr[0]."<br>";
                echo $new_arr[1]."<br>";
                echo $new_arr[2]."<br>";
                echo $new_arr[3]."<br>";

                1. Aber $row[menu]; ist doch auch ein Array oder?
                  Was ich nun nicht verstehe warum muß man die Position im array nicht mit i hochzählen? In meinen ersten geh versuchen hat er alle Werte an der ersten Position meines Array geschrieben? Aber warum?

                  $row ist ein assotiatives Array
                  Mit dem Spaltennamen als Schlüssel.

                  Weil mysql_fetch_array () liest die Werte Zeilenweise in ein Array ein.
                  $new_arr[]=$row[menu]
                  erzeugst Du ein neues Array.
                  Also ein numerisches Array.
                  Und wenn ein Schlüssel schon besetzt ist zählt er immer eins hoch.
                  Es gibt auch andere möglichkeiten die gehen.
                  Wie immer.

                  TomIRL

                  1. $row ist ein assotiatives Array
                    Mit dem Spaltennamen als Schlüssel.

                    Weil mysql_fetch_array () liest die Werte Zeilenweise in ein Array ein.
                    $new_arr[]=$row[menu]
                    erzeugst Du ein neues Array.
                    Also ein numerisches Array.
                    Und wenn ein Schlüssel schon besetzt ist zählt er immer eins hoch.
                    Es gibt auch andere möglichkeiten die gehen.
                    Wie immer.

                    also sind assotiatives Array immer Spalten? Mir war nie richtig klar was die Bedeutung von assotiatives Array sind

                    und mit $new_arr[] erzeuge ich ein Zeilenweise Array?

                    Aber warum muß ich hier nicht mit arry() das Array erzeugen?

                    gruss susi

                    1. also sind assotiatives Array immer Spalten? Mir war nie richtig klar was die Bedeutung von assotiatives Array sind

                      assoziative meint nur, dass es eben kein nummerisches Array ist.
                      also der Schlüssel ist ein String.
                      mysql_fetch_array ()
                      liest die Zeile in ein Array.
                      die zeile heist bei die $row.
                      D.h. $row ist ein array. mit dem key [menue] und dem Wert "Wir über uns"
                      So nun liest du ja mit while und mysql_fetch_array () jede Zeile in ein Array. Du wolltest aber die Spalte Menu in ein Array haben.
                      Also erzeugst Du ein Array mit
                      $new_arr[]=$row[menu]
                      Wobei der Schlüssel hier automatisch erzeugt wird.
                      Numerisch beginnend mit 0.

                      http://www.php.net/manual/de/language.types.array.php

                      TomIRL

  4. Hallo,

    ich habe hier ein Problem wo ich nicht weiterkomme...

    Ich lese aus meiner Datenbank die Felder Menü-Name aus, aber wie lese dich die Felder aus dem Array in PHP?

    Ich habe das so gemacht aber es funktioniert nicht?

    $dbh = getConn();
    $db_tabelle = "menu";
    $query = "SELECT menu FROM $db_tabelle ORDER BY mid ASC";
    $result = mysql_query(($query),$dbh);

    while ($row = mysql_fetch_array($result)) {
            echo $row[0];

    Was machst Du?
    mit
    print_r ($row);
    Zeigst Du Dir an was da eigentlich da ist.
    Dein Array sieht so aus:
    $row[spaltenname1]="spalteninhalt";

    Sprich da Du aj nur das Feld Menue ausliest, hast Du folgenden Inhalt:
    $row[menue]

    Und wo ist das Problem?

    TomIRL

  5. hi Susi,

    ich war gestern sehr kurz angebunden (bier war schon kalt). hoffentlich hat sich dein problem von gestern gelöst, Tom hat sich ja schon ausführlich dazu geäußert. wenn noch fragen zu der vorgehensweise, insbesondere zum unterschied zwischen numerischen and assoziativen arrays sind, bin ich oder sicherlich auch andere bereit, dir das näher zu bringen. hätte dir ne e-mail geschrieben, konnte aber deine adresse nicht finden. ansonten schönes wochenende.

    gruß
    Ilja