Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] include Reihenfolge?, oder array reinitialisieren?

Einklappen

Neue Werbung 2019

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

  • [Erledigt] include Reihenfolge?, oder array reinitialisieren?

    Hallo Leute,

    Ich bin ganz neu hier.

    folgendes Problem:
    Mein PHP Include steht noch vor dem Doctype.

    Code:
    <?php
    include("data_A.inc");
    ?>
    
    <!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN"
            "http://www.w3.org/TR/html4/strict.dtd">
    Und das befindet sich in der data_A.inc:
    PHP-Code:
    <?php

    $arr 
    = array(
    "Bild1" => "1.jpg",
    "Bild2" => "2.jpg",
    "Bild3" => "3_nobutton.jpg",
    "Bild4" => "4_nobutton.jpg"
    );

    $imgpfad="../../images/f1/A/";
    $thumbpfad="../../images/f1/A/thumbs";

    $i=0;

    ?>
    Im späteren Verlauf des HTML-Codes folgt ein weiter php Include:
    Code:
    <?php include ("../../includes/slideshow.inc");?>
    Und das befindet sich in der slideshow.inc:
    PHP-Code:
    <?php 
                                
    while( list ( $key$val ) = each $arr ) )
                                {
                                
    $i++;
                                    if (
    $i==1)    {
                                    echo 
    "\n";
                                    echo 
    "<h1 id=\"haustitle\">".$key."</h1>\n";
                                    echo 
    "<img src=\"".$imgpfad.$val."\" id=\"haus_view_main_pic\" alt=\"Haus_Big\">\n";
                                    echo 
    "<div id=\"thumbnails\">\n\n";
                                    }
                                    else    {
                                    echo    
    "<noscript>";
                                    echo        
    "<a href=\"".$imgpfad.$val."\">";
                                    echo    
    "</noscript>\n";
                                    echo    
    "<span class=\"ir\">".$key."</span>\n";
                                    echo    
    "<img src=\"".$thumbpfad."/".$val."\"\n".
                                                    
    "\t onclick=\"change_pic(this)\"\n".
                                                    
    "\t class=\"haus_thumb\"\n".
                                                    
    "\t alt=\"thumb".($i-1)."\"\n".
                                                    
    "\t title=\"".$key."\">\n";
                                    echo        
    "<noscript>";
                                    echo            
    "</a>";
                                    echo        
    "</noscript>\n\n\n";
                                    }
                                }
    ?>
    Jedoch schlägt der PHP Code fehl:
    Die Fehlermeldung sieht man aber nicht, vermutlich wegen include.
    Wenn ich slideshow.inc in zu slideshow.php umbenenne und das php file nochmals ausführe, dann hat er natürlich keinen Zugriff auf das vorher initialisierte Array. Aber ich kann es auch nicht dort importieren, weil slideshow.php Unabhängig von der data_A.inc sein soll.

    Fehler:

    Code:
    Warning: Variable passed to each() is not an array or object in C:\xampp\htdocs\includes\slideshow.php on line 2
    Ist ja auch logisch, bloß wie kann ich das Array vorher initialisieren. Es wundert mich sowieso, da data_A.inc weiter oben im Code steht.


    Gruß,
    FortyTwo


  • #2
    Ehrlich gesagt weiß nicht was du willst. Anscheinend ist eben $arr nicht als Array gesetzt, wird es denn überhaupt irgendwo davor definiert? würde die data_A.inc eingebunden werden müsste das Array ja existieren. Wird das Array irgendwo überschrieben oder so?

    Ist sehr sehr schwer dir zu helfen da das ganze etwas wirr beschrieben ist.

    Im übrigen solltest du deine Dateien nicht .inc benennen. Wenn mand ie Datei direkt angibt im Browser könnte man sonst den kompletten Quellcode sehen. Sollte deine config ebenfalls auf .inc enden kann man sogar die Zugangsdaten für deine DB oder sonst was einsehen. Daher IMMER .php benennen. Meinetwegen kannst du sie ja "datei.inc.php" nennen.

    Kommentar


    • #3
      http://www.php.de/php-einsteiger/464...verwenden.html
      --

      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


      --

      Kommentar


      • #4
        Danke für die schnelle Antwort.

        Ich hatte vorher auch php-Endungen verwendet, denn obiges ist mir bekannt.
        Dein Hinweis auf Überschreibung hat mich weiter gebracht. Im HEAD Teil des HTML Codes steht dieser PHP-Code, welcher Javascript erzeugt. Entferne ich dieses, dann läuft der andere Code auch super, der nach dem "javascript Code" folgt.

        PHP-Code:
        <?php
        $u
        =0;
        while( list ( 
        $key$val ) = each $arr ) )
            {
            echo 
        "TitlesLoc[".$u."] = new Array();\n";
            echo 
        "TitlesLoc[".$u."][".$val."]= ".$key.";\n";
            
        $u++;
            }
        echo 
        "\n"."var anzahl = TitlesLoc.length;";
        ?>

        Wie errreiche ich jetzt, dass ich die Schleife, also das assoziative Array nochmals später durchlaufen kann?

        Gruß,
        FortyTwo

        Kommentar


        • #5
          Klingt absolut logisch. Und ist dauerhaft in mein Gehirn gebrannt.

          Kommentar


          • #6
            Verwende anstatt:
            PHP-Code:
            while (list($key$val) = each($arr)) 
            doch lieber:
            PHP-Code:
            foreach ($arr as $key => $val
            each() rückt den internen Zeiger im Array immer um eins weiter. Somit ist er nach einmal durchgehen ganz am Ende. Du müsstest ihn dann per reset() wieder auf den Anfang setzen.

            Bei foreach geht er das komplette Array durch ohne dabei den internen Zeiger zu verändern (bzw. vlt. setzt er ihn einfach am Ende wieder zurück, ich weiß nicht wie das jetzt intern funktioniert).

            Ich find die list() = each() Struktur eh recht unübersichtlich und nicht gerade intuitiv.

            Beitrag editiert:
            Note to myself: rtfm
            Hinweis: When foreach first starts executing, the internal array pointer is automatically reset to the first element of the array. This means that you do not need to call reset() before a foreach loop.

            Kommentar


            • #7
              ich weiß nicht wie das jetzt intern funktioniert
              foreach iteriert über eine Kopie des Arrays
              --

              „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
              Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


              --

              Kommentar


              • #8
                Vielen Dank, das war es.

                Beides klappt hervorragend.

                Solche Probleme entstehen halt, wenn man nicht weiss, was welche Funktionen bewirken

                Nun weiss ich es, beim nächsten mal, versuche ich es über die Doku.

                Achja, welche Methode ist die bessere?
                Ich nehme an, wenn man ein assoziatives array mehrfach aufruft, dann foreach, wenn nicht, dann spart man Code!?

                Gruß,
                FortyTwo

                Kommentar


                • #9
                  Wieso spart man Code? foreach ist doch kürzer als dein while, list, each Konstrukt!

                  Kommentar


                  • #10
                    Das Konstrukt ist kürzer, aber der durlaufende Code eher nicht. Also das heisst das ist nur ne Vermutung.

                    wenn das reset(); nicht mehr benötigt wird ist vermutlich der Code mit der while Konstruktion kürzer, da keine Kopie des Array, wie bei foreach, gesetzt wird.

                    -->Mein gefährliches Halbwissen

                    Gruß,
                    FortyTwo

                    Kommentar


                    • #11
                      --> benutze besser foreach. Niemand benutztzt das alte list/each. Der Unterschied dürfte marginal sein. Vor allem läufst Du mit foreach aber nicht in Probleme, wärend bei each eine Änderung des Arrays oder ein end(), next() oder so echte Probleme bereiten kann.
                      --

                      „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                      Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                      --

                      Kommentar


                      • #12
                        Ok. Danke für die Info,

                        ich schliesse den Thread jetzt!


                        Danke nochmals.

                        Kommentar


                        • #13
                          Ergänzung
                          Niemand benutztzt das alte list/each
                          Natürlich gibt es sinnvolle Anwendungen. Z.B. eine veränderliche Aktionsmenge. Die meisten Anwendungsfälle werden sich jedoch mit foreach und ggf. continue/break; einfacher abfrühstücken lassen.
                          --

                          „Emoticons machen einen Beitrag etwas freundlicher. Deine wirken zwar fachlich richtig sein, aber meist ziemlich uninteressant.
                          Wenn man nur Text sieht, haben viele junge Entwickler keine interesse, diese stumpfen Texte zu lesen.“


                          --

                          Kommentar

                          Lädt...
                          X