Frage bezüglich Array und MySql

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

  • Frage bezüglich Array und MySql

    Hallo zusammen,

    bin gerade dabei mir PHP anzueignen und laufe auf ein Problem, das ich momentan nicht lösen kann.

    Ich lese mir gerade die Seiten "Quakenet:#php Tutorial und das PHP Handbuch durch.

    In diesen Tutorials ist auch wunderbar beschrieben wie man ein Array erstellt.

    PHP-Code:
    $teams = array("Mannschaft_1","Mannschaft_2","Mannschaft_3","usw"); 
    jetzt kann man doch eine Abfrage auf dieses Array machen mit

    PHP-Code:
    echo $teams[0]; oder $teams[1]; usw
    // Und man erhällt die dementsprechenden Einträge zurück. Mannschaft_1 oder Mannschaft_2 
    nun will ich aber nicht immer das Array vorher schreiben müssen
    sondern lege mir in MySql einen Datenbank an mit 2 Spalten. (1 Spalte heißt "id" und die 2. Spalte heißt "teams").

    nun mache ich einen MySql Abfrage und schreibe mir die zurückgelieferten Daten in ein Array.

    PHP-Code:

    <? php if (!isset($_GET['action'])) $_GET['action']="";
    ini_set ("display_errors", 1); error_reporting(E_ALL ^ E_NOTICE);
    include 'inc/sport.php';

    $abfrage = "select team from bowling order by id";
    $ergebnis = mysql_query($abfrage) or die(mysql_error());

    while($row = mysql_fetch_array($ergebnis)) {
            echo $row['team'] . ' <br> ';
        }
    ?>
    und jetzt kommt meine ursprüngliche Frage:

    Warum kann ich jetzt nicht mehr wie vorhin eine Abfrage auf einzelne Einträge machen wie z.B.

    PHP-Code:
    $row[0oder $row[1]? 
    was habe ich falsch gemacht?

    Momentan funktioniert nur die Abfrage auf das ganze Array mit

    PHP-Code:
    echo $row['team'] . ' <br> '
    Auch habe ich mal nachgesehen warum das so ist mit folgenden Befehl:

    PHP-Code:
    while($row mysql_fetch_array($ergebnis)) {
            echo 
    "<pre>";
            
    print_r($row);
            echo 
    "</pre>";
        } 
    und bekomme folgende Ausgabe:
    PHP-Code:
    Array
    (
        [
    0] => Mannschaft_1
        
    [team] => Mannschaft_1
    )

    Array
    (
        [
    0] => Mannschaft_2
        
    [team] => Mannschaft_2
    )

    Array
    (
        [
    0] => Mannschaft_3
        
    [team] => Mannschaft_3
    )

    Array
    (
        [
    0] => Mannschaft_4
        
    [team] => Mannschaft_4
    )

    Array
    (
        [
    0] => Mannschaft_5
        
    [team] => Mannschaft_5 
    und hier sehe ich das immer for den Eintrag Mannschaft_zahl im Array eine [0] steht.

    Kann man das ändern das eben vor der Mannschaft eine [0], [1] oder [2] steht?

    Damit eine bessere Abfrage möglich.

    würde mich freuen wenn ich eine Tipp bekommen könnte wie ich es besser machen kann.

    Vielen Danke

    Hethkey
    Zuletzt geändert von hethkey; 26.12.2005, 16:49.

  • #2
    dafür musst du eine "zählervariable" anlegen, die die nummer der mannschaft in der while-schleife erhöht und diese ausgeben.

    anders geht es nicht, weil mysql_fetch_array() in jedem zyklus $row überschreibt.

    Kommentar


    • #3
      Bitte verzeih wenn ich noch nicht weiß was eine "zählervariable" ist.

      ist das so ähnlich wie eine if Abfrage

      PHP-Code:
      $x 12;
          while (
      $x) {
              echo 
      "Der Wert ist ".$x."<br />\n";
              
      $x--;
          } 
      wenn ja wie wir die in die while Schleife eingebunden.

      Kommentar


      • #4
        wie eine if-abfrage? wie kann eine variable einem sprachkonstrukt gleichen?

        jedenfalls ist es eine integer variable, die du anfangs auf 0 setzen solltest, bei jedem schleifendurchlauf ausgeben und anschließend um eins erhöhen solltest. so kommst du auf deine 0, 1, 2, ..., n bei der ausgabe...

        Kommentar


        • #5
          ich habe jetzt noch folgendes gemacht, anstatt einer while Schleife habe ich jetzt eine for Schleife eingesetzt.

          PHP-Code:
          $row mysql_fetch_array($ergebnis);

              for (
          $row=0$row<12$row++) {
                  echo 
          "<br />";
                  echo 
          var_dump($row);

              } 
          und bekomme jetzt diese Ausgabe

          PHP-Code:
          int(0)
          int(1)
          int(2)
          int(3)
          int(4)
          int(5)
          int(6)
          int(7)
          int(8)
          int(9)
          int(10)
          int(11
          ist das der Richtige Weg?

          denn wenn ich jetzt ein echo $row[1] oder $row[2] mache bekomme ich eine leere Seite angezeigt.

          bzw. im Quelltext wird 12 mal das echo "<br />" ausgegeben.

          Kommentar


          • #6
            PHP-Code:
            $teams = array("Mannschaft_1","Mannschaft_2","Mannschaft_3","usw"); 
            ist eine Möglichkeit ein Array zu definieren - es gibt aber auch nen anderen Weg ein Array zu füllen:
            PHP-Code:
            $teams[] = "Mannschaft_1";
            $teams[] = "Mannschaft_2";
            //usw... 
            Hier hat nun Mannschaft_1 den index 0 im Array - Mannschaft_2 den index 1 usw.

            Du kannst den Index aber auch selber angeben:
            PHP-Code:
            $i 1;
            $teams[$i] = "Mannschaft_1";
            $i++;
            $teams[$i] = "Mannschaft_2";
            //usw... 
            Jetzt hat Mannschaft_1 den Index 1 im Array usw...

            Kommst jetzt vielleicht alleine drauf, wie du die Ergebnisse aus deiner Abfrage in ein Array bringst?


            EDIT:
            und hier sehe ich das immer for den Eintrag Mannschaft_zahl im Array eine [0] steht.
            Das kommt daher, das mysql_fetch_array(); ohne Angabe des gewünschten Ergebnistyps immer ein Array mit numerischen und assoziativen Index zurückgibt, wobei beim assoziativen Index immer der Name der abgerufenen Spalte(n) (Ausnahme: wenn du etwas mit AS aus mysql abfrägst wird dieser name verwendet) verwendet wird.

            Wenn du nur einen Index haben willst (was bei Abfragen mit grossen Ergebnismengen sinnvoll sein kann da man Speicher spart) kannst du folgendes anwenden:
            z.B: $row = mysql_fetch_array($result,MYSQL_ASSOC);
            Jetzt hast in $row nur den assoziativen Index zur Verfügung.
            Zuletzt geändert von Quetschi; 26.12.2005, 18:18.
            Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
            Schön - etwas Geschichte kann ja nicht schaden.
            Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

            Kommentar


            • #7
              das ist falsch.

              lass alles, wie es ist und ergänze die bestehende while-schleife durch die ausgabe einer zählervariable.

              Kommentar


              • #8
                hallo @Quetschi

                Danke für deine Antwort, wie oben schon beschrieben habe ich kein Problem wenn ich das Array manuell anlege.

                PHP-Code:
                $teams = array("Mannschaft_1","Mannschaft_2","Mannschaft_3","usw"); 
                hier funktioniert ja die Abfrage mit echo $teams[0] oder $teams[1]

                nur habe ich ein Problem wenn das ganze aus der Datenbank kommt und in ein Array geschrieben wird.

                hier schlägt mir @penizillin ja vor das ich eine "zählervariable" anlegen muss.

                Nur weiß ich noch nicht was er damit meint. Keine Ahnung momentan wie ich das realisieren soll.

                hallo @penizillin

                kannst du mir ein Beispiel geben wie das geht? Oder zuminderstens wo ich es nachlesen kann.

                Ich such noch weiter im Internet vielleicht finde ich ja was ähnliches, denn ich kann mir ja garnicht vorstellen das ich der erste bin der das machen möchte.

                Danke und Gruß

                hetkey

                Kommentar


                • #9
                  Original geschrieben von penizillin
                  anders geht es nicht, weil mysql_fetch_array() in jedem zyklus $row überschreibt.
                  Lies dir den Satz von penizillin nochmal genau durch - du hast nur ein reines Verständnisproblem

                  mysql_fetch_array() holt dir immer EINEN Datensatz aus dem DB-result in $row hinein - daher die while-Schleife, du bekommst nämlich nicht mit einmal mysql_fetch_array alle Datensätze - immer nur einen.

                  Wenn du also alle Mannschaften in einem Array haben willst, musst du dieses in der Schleife füllen mit dem was du bei jedem Schleifendurchlauf in $row bekommst.


                  hier schlägt mir @penizillin ja vor das ich eine "zählervariable" anlegen muss.
                  Kann man machen, muss man aber nicht (siehe mein 2. PHP-Beispiel) - wie das mit einer Zählvariable funktioniert habe ich dir in meinem vorigen Post im letzten Beispiel beschrieben - nur das es da keine Schleife ist, was aber nichts zur Sache tut.
                  Zuletzt geändert von Quetschi; 27.12.2005, 13:04.
                  Ihr habt ein Torturial durchgearbeitet, das auf den mysql_-Funktionen aufbaut?
                  Schön - etwas Geschichte kann ja nicht schaden.
                  Aber jetzt seht euch bitte php.net/pdo oder php.net/mysqli bevor ihr beginnt!

                  Kommentar


                  • #10
                    PHP-Code:
                    $teams=array();
                    while(
                    $row mysql_fetch_array($ergebnis)) {
                            
                    $teams[]=$row['team'];
                        }
                    print_r($teams); 

                    Kommentar


                    • #11
                      genau das ist es - vielen Dank @DSB. Ich habe mir echt einen Wolf gesucht aber nichts dies bezüglich gefunden.

                      guten Rutsch wünsch ich euch allen.

                      Gruß hethkey

                      Kommentar


                      • #12
                        Original geschrieben von hethkey
                        Ich habe mir echt einen Wolf gesucht aber nichts dies bezüglich gefunden.
                        Dir wurde im Thread hier erklärt, dass man immer nur einen Datensatz von der MySQL-Datenbank geliefert bekommt und Quetschi hat Dir auch gezeigt, wie man ein Array aufbauen kann.
                        Mein kurzes Listing ist nur die Zusammenfassung dieser beiden Informationen. Darauf hättest Du eigentlich nach genauer Lektüre dieses Threads auch selbst kommen müssen.

                        Da sind wir aber genau bei dem Problem:
                        viele suchen einfach nach einer fertigen Lösung bzw. Script zu genau ihrem spezifischen Problem. Solange da nicht das Verständnis und der Wille hinzukommt, ein Problem auch durch eigenes Nachdenken lösen zu wollen, entwickelt man sich so nicht weiter und fängt beim nächsten neuen Problem wieder bei 0 an. Das war jetzt mal so allgemein gesprochen.

                        Gut, Du fängst gerade an mit PHP und musst die Werkzeuge erst einmal kennen lernen.
                        Allerdings stecken alle Informationen zur Lösung bereits hier im Thread - deshalb habe ich auch keinen Text geschrieben: ich hatte nichts neues zu sagen...
                        Schau Dir nächstes Mal die gelieferten Infos einfach etwas genauer an.
                        guten Rutsch wünsch ich euch allen.
                        Danke, dito. :-)

                        Kommentar


                        • #13
                          OffTopic:
                          Kann man das ändern das eben vor der Mannschaft eine [0], [1] oder [2] steht?
                          das kommt daher, wenn man die leute wörtlich nimmt.

                          Kommentar


                          • #14
                            Hallo @penizillin,@DSB,@Quetschi,

                            erst einmal wünsche ich euch ein gutes neues Jahr 2006,

                            ich möchte mich nochmals bei euch für die Zahlreichen Antworten bedanken aber bitte habt ein wenig geduld mit mir. Ich versuche wirklich mir das beizubringen aber es happert halt manchmal am Verständnis. Ich kann das gelesene erst dann verstehen wenn ich auch Beispiele gemacht habe oder es irgendwo sehe wie es funktioniert.

                            Ich werde mir auch in Zukunf die Threads genauer durchlesen und versuchen aus diesen Informationen die Lösung zusammenzubastelln.

                            Danke und Gruß

                            hethkey

                            Kommentar


                            • #15
                              Von meiner Seite aus kein Problem.
                              Ich habe das ja nicht böse gemeint und es war nicht nur an Dich gerichtet.

                              Fohes Neues!

                              Kommentar

                              Lädt...
                              X