Ankündigung

Einklappen
Keine Ankündigung bisher.

Verständnisprobleme von mySQL-Datenausgabe

Einklappen

Neue Werbung 2019

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

  • Verständnisprobleme von mySQL-Datenausgabe

    Hallo, ich habe hier ein Script, dass Kategoriedaten aus einer Datebank ausgeben soll. Diese Kategorien dienen nur der Navigation, (z.B. Produktkategorien für online-Katalog.)
    Zunächst erfolgt der Verbindungsaufbau und die Abfrage der Daten, dann die
    Speicherung der Daten in einem array, schließlich die Ausgabe der Daten.
    Unklar ist die Datenspeicherung nach der sql-Abfrage und der Rückgabewert von der Funktion Connect_to_db.

    Der Verbindungsaufbau ($filename ist die Datei Vars.php mit Login, Passwort usw.):

    PHP-Code:
    function Connect_to_db($filename){
        include(
    $filename);
        
    $connection mysqli_connect($host,$user,$passwd)
                        or die (
    'Keine Verbindung zum Server.');
        
    $db mysqli_select_db($connection,$database)
                        or die (
    'Datenbank nicht verfügbar.');
        return 
    $connection;


    Die Abfrage der Daten:
    PHP-Code:
    $cxn Connect_to_db('Vars.php');
        
    $query 'SELECT DISTINCT category, type FROM Futterladen ORDER BY category,type';
        
    $result mysqli_query($cxn,$query) or
                die (
    'Konnte Abfrage nicht starten:'.mysqli_error($cxn)); 
    Nun werden die Daten in einem Array gespeichert:
    PHP-Code:
    while($row mysqli_fetch_array($result))
        {
            
    $food_categories[$row['category']][$n]=$row['type'];
        } 
    und dann ausgegeben:
    PHP-Code:
    ...
     foreach(
    $food_categories as $key => $subarray){

         echo 
    '<h3>'.$key.'</h3>';
         echo 
    '<ul>';
         foreach(
    $subarray as $type){

           echo 
    '<input type="radio" name="interest" value="$type"/><b>'.$type.'</b><br/>';
         }

         echo 
    '</ul>';
         } 
    Hier kommt nun eine Fehlermeldung. Bei der Ausgabe der Daten erkennt der Parser $food_categories nicht als Variable: Undefined Variable
    Grade die Zeile $food_categories[$row['category']][$n]=$row['type']; ist mir sehr schleierhaft!? Hat jemand dazu eine Erklärung?
    Ausgegeben wird ein verschateltes Array. Also sollten die Daten in $food_categories auch so vorliegen!!

    Die zweite Frage wäre, warum in Connect_to_db der Wert von $connection und nicht von $db zurückgegeben wird. Tatsächlich funktioniert es nur, wenn $connection zurückgegeben wird. Da fehlt dann ja eigentlich die Ansteuerung der Datenbank.

    Vielen Dank,
    MFG Iago


  • #2
    Was soll die Variable
    PHP-Code:
    $n 
    denn sein? Die ist nirgends definiert!

    Kommentar


    • #3
      Ah, sorry, die Variable in den eckigen Klammer war ein Test um eine alternative auszuprobieren. Also, die eckigen Klammer sind leer!!
      Sorry!!
      Also:
      $food_categories[$row['category']][]=$row['type'];

      Kommentar


      • #4
        Undefined Variable
        Grade die Zeile $food_categories[$row['category']][$n]=$row['type']; ist mir sehr schleierhaft!? Hat jemand dazu eine Erklärung?
        Du musst die Variable zuerst vor der Schleife initialisieren!
        PHP-Code:
        $food_categories = array();

        while(
        $row mysqli_fetch_array($result)) {
          
        $food_categories[$row['category']][$n]=$row['type'];

        Die zweite Frage wäre, warum in Connect_to_db der Wert von $connection und nicht von $db zurückgegeben wird.
        Schau dir doch mal den Rückgabewert von PHP: mysqli::select_db - Manual an.
        http://hallophp.de

        Kommentar


        • #5
          Ja, gut, mysqli_select_db gibt BOOLEAN zurück, das bringt nicht viel als
          Rückgabewert. Trotz allem muss die Information, dass die Verbindung
          zu einer bestimmten Datenbank hergestellt wurde doch im Rückgabewert der Funktion Connect_to_db() enthalten sein. $db steht sehr allein da, so wie das ausschaut. Wie wird die Information für die richtige Datenbank zurückgegeben??

          Danke, Iago

          Kommentar


          • #6
            Zitat von Iago Beitrag anzeigen
            Ja, gut, mysqli_select_db gibt BOOLEAN zurück, das bringt nicht viel als
            Rückgabewert.
            Was für einen Rückgabewert soll die Funktion deiner Meinung nach haben? Boolean reicht doch vollkommen aus.

            PHP-Code:
            if ( !mysqli_select_db($connection$database) ) {
                
            // die oder throw new Exception() je nach gusto

            Wenn du
            PHP-Code:
            $food_categories[$row['category']][]=$row['type'
            machst, hast du aber eine überflüssige Array-Ebene.
            PHP-Code:
            $food_categories$row'category' ] ] = $row'type' 
            sollte reichen.
            Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
            Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

            Kommentar


            • #7
              Du übergibst mysqli_select_db() die Verbindungskennung des Verbindungsaufbaus. Dadurch baust du eine Beziehung der Verbindung zu einer bestimmten Datenbank auf.

              [edit]

              Btw. Du kannst auch besser den 4. Parameter von mysqli_connect() benutzen, um die Datenbank auszuwählen. Dann sparst du dir den Aufruf von mysqli_select_db().
              http://hallophp.de

              Kommentar


              • #8
                Danke für die Antworten!

                Kommentar


                • #9
                  Zitat von dennis81 Beitrag anzeigen
                  Wenn du
                  PHP-Code:
                  $food_categories[$row['category']][]=$row['type'
                  machst, hast du aber eine überflüssige Array-Ebene.
                  PHP-Code:
                  $food_categories$row'category' ] ] = $row'type' 
                  sollte reichen.
                  Was ist, wenn eine Kategorie mehrere Typen haben kann?

                  Kommentar


                  • #10
                    Ja, das was Papst sagt ist richtig. Wenn ich die leeren eckigen Klammern
                    weglasse, wird das $type - Array nicht angezeigt.

                    O.k., eventuell doch noch eine Verständnisfrage:
                    Wie sind die Werte in $row organisiert, und wir genau erfolgt dann die
                    Zuordnung der Werte in:
                    $food_categories[$row['category']][]=$row['type']

                    Also bei jeder Zeile von $row, das ganze ist ja innerhalb
                    einer while-Schleife, wird wie zugeordnet?
                    Nun gut, die types werden den categories zugeornet, wobei
                    eine categorie mehrere types hat, jedoch nicht umgekehrt,
                    nur wie genau wird zugeornet???

                    Danke,
                    Iago

                    Kommentar


                    • #11
                      Deine Frage(n) verstehe ich nicht so wirklich. Aber ich versuche mich mal trotzdem.

                      In $row steht der Inhalt der aktuellen Zeile aus der Datenbank - in einem assoziativen Array. $food_categories wird ebenfalls ein assoziatives Array, mit dem Kategorienamen in der ersten Ebene. Mit $array[] = ... wird ein weiteres Element an ein Array angehängt. Ist jetzt der Kategoriename in der ersten Ebene vorhanden, wird also ein weiteres Element (in der zweiten Ebene) mit $row['type'] als Inhalt angefügt.

                      Ein var_dump würde es dir im Zweifel aber auch darstellen.
                      Es ist schon alles gesagt! Nur noch nicht von allen! (Karl Valentin)
                      Wenn du eine weise Antwort verlangst, musst du vernünftig fragen. (Johann Wolfgang von Goethe)

                      Kommentar


                      • #12
                        Weiß es doch einfach einem Array zu und gib dann zu debug-zwecken das ganze Array aus, dann siehst du auch wie es aufgebaut ist.
                        "My software never has bugs, it just develops random features."
                        "Real programmers don't comment. If it was hard to write, it should be hard to understand!"

                        Kommentar

                        Lädt...
                        X