Ankündigung

Einklappen
Keine Ankündigung bisher.

Inhalte von Array werden nicht ausgegeben ... Denkfehler?

Einklappen

Neue Werbung 2019

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

  • Inhalte von Array werden nicht ausgegeben ... Denkfehler?

    Hallo,

    ich habe eine MySQL-Tabelle mit Konfigurationen (spalte setting, spalte value).

    Ich habe folgende Funktion, die die Konfigurationswerte auslesen soll:
    PHP-Code:
    function anm_get_config()
    {
        static 
    $config;
        global 
    $prefix;

        if( 
    $config == TRUE )
        {
            return 
    $config;
        }

        
    $result mysql_query(sprintf("SELECT * FROM `%sforums`",$prefix)); 
        
    var_dump ($result);

        
    $config mysql_fetch_array($resultMYSQL_ASSOC);

        return 
    $config;

    In der Datei, wo ich auf die config zugreifen will, mache ich noch
    PHP-Code:
    $_ANM_CONFIG = anm_get_config();
    ...
    <script>
        var tgebuehr = <?php sprintf($_ANM_CONFIG['prs_jgd_tagungsgebuehr']) ?>
    </script>
    Leider steht in der JS-Variable tgebuehr nichts drin, obwohl der Wert "prs_jgd_tagungsgebuehr" in der Tabelle einen Wert hat.

    Wo liegt mein Denkfehler?

  • #2
    Was stehtn in $_ANM_CONFIG?
    Nicht jeder Fehler ist ein Bug.

    Kommentar


    • #3
      Du hast ne Menge Denkfehler drinne - na gut eigentlich nur 2:

      1. dein "static" Cache funktioniert nicht, denn mysql_fetch_array() gibt entweder FALSE oder einen Array zurück, jedoch nie TRUE.

      2. Denkfehler ist, dass <?php sprintf(..) ?> keine Ausgabe erzeugt, das ist wie wenn ein Taubstummer Hallo sagt. Änder es in printf(). Allerdings sind die (s)printf-Funktionen hier fehl am Platz, oder hast du tatsächlich %-Platzhalter darin?

      Kommentar


      • #4
        Zitat von KingCrunch
        Was stehtn in $_ANM_CONFIG?
        $_ANM_CONFIG = anm_get_config()

        Zitat von Zergling
        Du hast ne Menge Denkfehler drinne - na gut eigentlich nur 2


        zu 1)
        Das müsste doch klappen, oder?
        PHP-Code:
        function anm_get_config()
        {
            static 
        $config;
            global 
        $prefix;

            if( 
        $config != FALSE )
            {
                return 
        $config;
            }
        ... 
        zu 2)
        Habe es in
        PHP-Code:
        <script>
            var tgebuehr = <?php echo $_ANM_CONFIG['prs_jgd_tagungsgebuehr'?>
        </script>
        geändert.

        Trotzdem gibt er nichts aus.

        Kommentar


        • #5
          @Zergling: Er vergleicht config ohne Identitätsoperator. Ist zwar nicht schön, müsste aber klappen, solange er kein leeres Array zurück gibt.

          @topic: Was steht denn nun in $_ANM_CONFIG?
          Nicht jeder Fehler ist ein Bug.

          Kommentar


          • #6
            Zitat von KingCrunch
            @Zergling: Er vergleicht config ohne Identitätsoperator. Ist zwar nicht schön, müsste aber klappen, solange er kein leeres Array zurück gibt.
            Wie wäre es denn schön? Bin für alle Verbesserungsvorschläge offen.
            Zitat von KingCrunch
            @topic: Was steht denn nun in $_ANM_CONFIG?
            Wie meinst du " was steht da drin"? Wenn ich ein var_dump mache, bekomme ich so was:
            Code:
            array(2) { ["setting"]=>  string(22) "prs_jgd_tagungsgebuehr" ["value"]=>  string(2) "65" }
            Aber in der Tabelle stehen ca.10 settings drin, müsste er die nicht alle ausgeben? Die sollten doch alle in dem Array drin stehen, oder?

            Kommentar


            • #7
              Schöner wäre es möglichst typ-streng zu programmieren, obwohl PHP auch eben typschwache Programmierung erlaubt. zB per is_array oder ($string !== false).

              Wie meinst du " was steht da drin"? Wenn ich ein var_dump mache, bekomme ich so was:
              Genau das mein ich

              Aber in der Tabelle stehen ca.10 settings drin, müsste er die nicht alle ausgeben? Die sollten doch alle in dem Array drin stehen, oder?
              Nein

              mysql_fetch_array
              Zitat von Manual
              mysql_fetch_array -- Liefert einen Datensatz als assoziatives Array, als numerisches Array oder beides
              Beschreibung
              array mysql_fetch_array ( resource Ergebnis-Kennung [, int Ergebnistyp] )


              Liefert ein Array das dem aktuellen Datensatz entspricht oder FALSE, wenn keine weiteren Datensätze vorliegen.

              mysql_fetch_array() ist eine erweiterte Version von mysql_fetch_row(). Die Daten werden sowohl unter numerischen Indizes des Ergebnis-Arrays abgelegt, als auch unter assoziativen Indizes. Als Schlüssel für die assoziativen Indizes werden die Feldnamen benutzt.
              Oder auch mysql_fetch_row:
              Zitat von Manual
              mysql_fetch_row

              (PHP 4, PHP 5, PECL mysql:1.0)

              mysql_fetch_row — Liefert einen Datensatz als indiziertes Array
              Beschreibung
              array mysql_fetch_row ( resource $Ergebnis-Kennung )

              Rückgabewert: Ein Array das der Ergebniszeile entspricht oder FALSE wenn keine weiteren Zeilen verfügbar sind.

              Anmerkung: Diese Funktion setzt NULL Felder auf den PHP Wert NULL.

              mysql_fetch_row() liefert einen Datensatz aus dem Anfrageergebnis mit der übergebenen Kennung. Der Datensatz wird als Array geliefert. Jedes Feld wird in einem Array-Offset abgelegt, der Offset beginnt bei 0.

              Wiederholtes Aufrufen von mysql_fetch_row() liefert den nächsten Datensatz des Anfrageergebnisses oder FALSE, wenn keine weiteren Datensätze verfügbar sind.
              mysql_fetch_array liefert immer genau einen Datensatz und setzt den Zeiger dann ein Datensatz weiter. Aber auch wenn du dir dein Array anschaust, hätte dir schon auffallen müssen, dass das hier nicht geht
              PHP-Code:
              <?php
              echo $_ANM_CONFIG['prs_jgd_tagungsgebuehr'];
              ?>
              , weil dein Array-Key nicht definiert ist. Setze in Zukunft bei allen deinen Scripten error_reporting auf E_ALL, dann sollte sich PHP bei sowas schon selbst melden.
              Nicht jeder Fehler ist ein Bug.

              Kommentar


              • #8
                Danke für die ausführliche und geduldige Antwort

                Setze in Zukunft bei allen deinen Scripten error_reporting auf E_ALL
                Dies mache ich doch über error_reporting(E_ALL); direkt im PHP-Code, oder? Da spuckt er mir aber auch nicht mehr aus.

                Das heisst, ich muss ein eigenes Array machen, was ich über ne while-Schleife fülle. Oder gibts noch andere, empfehlenswertere Möglichkeiten um an mein Ziel zu kommen?

                Kommentar


                • #9
                  Zitat von KingCrunch
                  @Zergling: Er vergleicht config ohne Identitätsoperator. Ist zwar nicht schön, müsste aber klappen, solange er kein leeres Array zurück gibt.
                  Verwirr mich doch nicht - ein Monat kein PHP und schon vergißt man wieder das wichtigste Ich glaube du hast Recht, trotzdem vergleicht man keine Äpfel mit Birnen, nur weil beides Gemüse ist.

                  Wobei mir der Typvergleich dann wieder zu lästig ist. Dann lieber wie du vorgeschlagen hast auf is_array() prüfen.

                  Aber das Problem war ja etwas anderes, die fehlende while-Schleife bei mehreren Datensätzen.

                  Kommentar


                  • #10
                    Zitat von Zergling
                    Aber das Problem war ja etwas anderes, die fehlende while-Schleife bei mehreren Datensätzen.
                    Entnehme ich daraus, dass die while-Schleife eine gute ("das-macht-man-so") Lösung ist?

                    Kommentar


                    • #11
                      Obst. Es ist Obst. (@ Zergling)

                      Zitat von maeck
                      Das heisst, ich muss ein eigenes Array machen, was ich über ne while-Schleife fülle. Oder gibts noch andere, empfehlenswertere Möglichkeiten um an mein Ziel zu kommen?
                      Das mußt Du ohnehin, weil Du ja über $_ANM_CONFIG['prs_jgd_tagungsgebuehr'] auf den Wert zuzugreifen versuchst. Deine bisherige Struktur mit ['setting'] und ['value'] ist dazu ja nicht geeignet und muß in der Schleife so umgewandelt werden, dass der setting-Wert der Array Schlüssel und 'value', naja eben der Value wird.
                      [COLOR="#F5F5FF"]--[/COLOR]
                      [COLOR="Gray"][SIZE="6"][FONT="Georgia"][B]^^ O.O[/B][/FONT] [/SIZE]
                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      [URL="http://www.php.de/javascript-ajax-und-mehr/107400-draggable-sorttable-setattribute.html#post788799"][B]Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“[/B][/URL][/COLOR]
                      [COLOR="#F5F5FF"]
                      --[/COLOR]

                      Kommentar

                      Lädt...
                      X