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.

        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.

            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().

              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.

                      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.

                        Kommentar

                        Lädt...
                        X