Verhalten eines Arrays in While-Schleife Problem

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

  • Verhalten eines Arrays in While-Schleife Problem

    Hallo,

    Ich habe kein kleines Problem das ich nicht ganz verstehe... Ich gebe euch ersteinmal den Code und erkläre unten das Problem genauer.

    index.php
    PHP-Code:
    HTML
    HTML
    <?PHP include 'headmenu.php'?>
    HTML 
    HTML
    HTML
    <?PHP include 'submenu.php'; ?
    HTML
    headmenu.php
    PHP-Code:
    <?PHP
    $sql_head 
    "SELECT
    m, s, p, name FROM content WHERE status = 'category' ORDER BY m ASC;"
    ;
    $result_head mysql_query($sql_head) OR die(mysql_error());    
    ?>
    <table align="right" border="0" cellpadding="0" cellspacing="0">
    <?PHP while($row_head mysql_fetch_assoc($result_head)) {
        
    $codearr = array("".$row_head["m"]."","".$row_head["s"]."","".$row_head["p"]."");
        
    $code implode(",",$codearr);
        
    ?>
            <tr>
                <td><a href="?code=<?PHP echo ''.$code.''?>" target="_top"><img src="func/create_pic_main.php?text=<?PHP echo''.$row_head["name"].'';?>" border="0"></a></td>
            </tr>
    <?
    }
    ?>
    </table>
    submenu.php
    PHP-Code:
    <?PHP
    include 'admin/func/global_getcode_sub.php';
    //xxxxxxxxxxx
    echo ''.$m.'';
    //xxxxxxxxxxx
    $sql "SELECT m, s, p, name FROM content WHERE status = 'subcategory' AND m = '$m' ORDER BY s ASC;";
    $result mysql_query($sql) OR die(mysql_error());    
    ?>
    <table align="left" border="0" cellpadding="0" cellspacing="0">
    <?PHP while($row mysql_fetch_assoc($result)) {
    $codearr = array("".$row["m"]."","".$row["s"]."","".$row["p"]."");
        
    $code implode(",",$codearr); ?>
            <tr>
                <td><a href="?code=<?PHP echo ''.$code.''?>" target="_top"><img src="func/create_pic_sub.php?text=<?PHP echo''.$row["name"].'';?>" border="0"></a></td>
            </tr>
    <?
    }
    ?>
    </table>
    global_getcode.php
    PHP-Code:
    <?PHP
    $codeexplode 
    explode (","$code);
    $m $codeexplode[0];
    $s $codeexplode[1];
    $p $codeexplode[2];
    ?>
    So. Also es sieht so aus das ich auf der index.php 2 Seiten eingebunden. 2 Menüs um genu zu sein. In der headmenu.php wird mittels "code" der
    sich aus 3 Zahlen zusammensetzt Links in der Form xxx,xxx,xxx generiert (Für jeden link ein code). Dieser soll auf der
    submenu.php weiterverwendet werden.

    Auf der submenu.php wird die global_getcode.php eingebunden in der der Code aufgeschlüsselt wird. Ich habe zu Testzwecken
    mal
    auf der submenu.php zwischen den Kommentar Zeilen ein "echo ''.$m.'';" eingebunden. Hier besteht das Problem: Der Wert
    $m beträgt an dieser Stelle immer den $m Wert des
    letzten
    Arrys welches in der Headmenu.php erstellt wird.

    Die Buttons die in der headmenu.php generiert werden übergeben ja den Code per browserzeile. Dieser Code soll
    von der global_getcode.php verwendet werden, und nicht
    der des letzten Arrays.. ich stehe da vor einem Rätsel.
    Könntet ihr mir bei dem Problem helfen oder mit einem Lösungsansatz unter die Arme greifen?

    Gruß und Danke im Vorraus.
    The Human Mirror - Mein Blog!
    www.sonicsense.de - The future of music!

  • #2
    Hi,
    musste mir das erst paar mal durchlesen, bis ich verstanden hab was du sagen willst


    Der Fehler liegt hier:

    PHP-Code:
    <?PHP while($row_head mysql_fetch_assoc($result_head)) {
        
    $codearr = array("".$row_head["m"]."","".$row_head["s"]."","".$row_head["p"]."");
        
    $code implode(",",$codearr);
        
    ?>
            <tr>
                <td><a href="?code=<?PHP echo ''.$code.''?>" target="_top"><img src="func/create_pic_main.php?text=<?PHP echo''.$row_head["name"].'';?>" border="0"></a></td>
            </tr>
    <?
    }
    ?>
    Du überschreibst bei jedem durchlauf die variable $code. Somit beinhaltet diese immer nur den letzten Datensatz aus der Datenbank.

    Lösung: mach nen "."

    PHP-Code:
    $code .= implode(",",$codearr); 
    Jetzt wird der String hinzugefügt, und es sollte gehen

    Grüße!

    Kommentar


    • #3


      Ein "." in Worten PUNKT ..... omg.... 1 tag Arbeit. Nun geht es. Ich danke dir vielmals. Wo kann ich im Manual nachsehen was der Punkt bewirkt? Ich finde das grad nicht.

      PS:
      Zu früh gefreut. Nun wird zwar der Code beim Submenu richtig verarbeitet, aber im Mainmenu spinnt er gewaltig rum....

      Schau dir mal www.wmwa.de/html/basis.php an und klick bisschen auf dem oberen Menü rum und schau mal in die browserzeile...

      Das wäre nett...
      Zuletzt geändert von Hazzardous; 15.07.2004, 10:14.
      The Human Mirror - Mein Blog!
      www.sonicsense.de - The future of music!

      Kommentar


      • #4
        Unter "Operatoren"

        .= String anhängen

        a *= b entspricht a = a * b
        a += b entspricht a = a + b
        a -= b entspriicht a = a - b

        usw...

        de.php.net


        An mich bitte keine unaufgeforderten E-Mails senden (ausser ihr seid bereit geld zu zahlen, dann gerne )

        Kommentar


        • #5
          Danke Dir, ich werde es gleich mal verinnerlichen.

          Nun wird zwar der Code beim Submenu richtig verarbeitet, aber im Mainmenu spinnt er gewaltig rum....

          Schau dir mal www.wmwa.de/html/basis.php an und klick bisschen auf dem oberen Menü rum und schau mal in die browserzeile...

          Das wäre nett...
          The Human Mirror - Mein Blog!
          www.sonicsense.de - The future of music!

          Kommentar


          • #6
            Ja, das ist recht einfach zu erklären.
            Du arbeitest mit "register globals = on"

            Jetzt passiert folgendes:

            die Variable $code entspricht der Variable $_GET['code'] (also die, die du in der URL mitschickst.)

            Aus diesem Grund wird diese im folgeaufruf durch den "." weitergeschrieben.

            Am besten benennst du die Variable die du in der URL übergibst um in zb:
            urlcode und fragst diese im script auch explizit mit $_GET['urlcode'] ab.

            ALSO:

            PHP-Code:
            <?PHP
               $codeexplode 
            explode (","$_GET['urlcode']);

               
            $m $codeexplode[0];
               
            $s $codeexplode[1];
               
            $p $codeexplode[2];
            ?>

            ansonsten sollte es reichen wenn du diese zeile hier folgendermasen abänderst:

            PHP-Code:
            urlcode=<?PHP echo $code?>"
            Gewöhne dir an, die Variablen immer entsprechend eindeutig zu benennen und über das request array abzurufen:

            $_POST['variablenname']
            $_GET['variablenname']

            Grüße!
            Zuletzt geändert von patfre; 15.07.2004, 10:49.

            Kommentar


            • #7
              Die übergabe des Codes funktioniert ja. Nur beim Erstellen der Links in headmenu.php kommen als Ergebnisse:

              headmenu.php
              Erster While durchlauf: Erstellter Link = basis.php?code=1,0,0 <-- Richtig!
              Zweiter While durchlauf: Erstellter Link = basis.php?code=1,0,02,0,0 <--Falsch sollte 2,0,0 sein...
              Dritter While durchlauf: Erstellter Link = basis.php?code=1,0,02,0,03,0,0 <--- falsch sollte 3,0,0 sein

              an der while Schleife die das submenu erstellt in submenu.php Tritt das Problem nicht auf?!
              The Human Mirror - Mein Blog!
              www.sonicsense.de - The future of music!

              Kommentar


              • #8
                Ja, genau das wollt ich mit meinem letzten Post eigentlich aus ausdrücken.

                OK, probiers ma so:

                headmenue.php:
                PHP-Code:
                <?PHP
                $sql_head 
                "SELECT
                m, s, p, name FROM content WHERE status = 'category' ORDER BY m ASC;"
                ;
                $result_head mysql_query($sql_head) OR die(mysql_error());    
                ?>
                <table align="right" border="0" cellpadding="0" cellspacing="0">
                <?PHP while($row_head mysql_fetch_assoc($result_head)) {
                    
                $codearr = array("".$row_head["m"]."","".$row_head["s"]."","".$row_head["p"]."");
                    
                $code .= implode(",",$codearr);
                    
                $urlcode implode(",",$codearr);
                    
                ?>
                        <tr>
                            <td><a href="?code=<?PHP echo ''.$urlcode.''?>" target="_top"><img src="func/create_pic_main.php?text=<?PHP echo''.$row_head["name"].'';?>" border="0"></a></td>
                        </tr>
                <?
                }
                ?>
                </table>

                Hab deinen aktuellen Scriptstand nicht da, sollte könnte aber ungeprüfterweise funktionieren.

                Kommentar


                • #9
                  Ok, es funktioniert nun! Nur verstehen tu ich es nich. Wenn es dir nichts ausmacht kannst du es mir nochmal erklären damit ich in zukunft weiß wodrauf ich achten muss. Bzw vielleich etwas wo ich es nachlesen kann..
                  The Human Mirror - Mein Blog!
                  www.sonicsense.de - The future of music!

                  Kommentar


                  • #10
                    Original geschrieben von Hazzardous
                    Erster While durchlauf: Erstellter Link = basis.php?code=1,0,0 <-- Richtig!
                    Zweiter While durchlauf: Erstellter Link = basis.php?code=1,0,02,0,0 <--Falsch sollte 2,0,0 sein...
                    Dritter While durchlauf: Erstellter Link = basis.php?code=1,0,02,0,03,0,0 <--- falsch sollte 3,0,0 sein
                    Also ich hab mir nun nicht den kompletten code angeschaut, aber wenn man in einer While-Schleife mit dem Operator "." immer wieder etwas an einen String anhängt, sollte man sich nicht wundern, wenn dieser immer länger wird
                    [color=red]Geht nicht[/color] ist keine Fehlermeldung

                    Kommentar


                    • #11
                      Original geschrieben von Big Chief
                      [...] aber wenn man [...], sollte man sich nicht wundern, wenn [...]
                      wenn man so eine abneigung hat, mal im manual nachzulesen was eigentlich die grundlagen sind von dem was man da tut, sollte man sich über gar nichts wundern.
                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Du wieder.....

                        hättest du das Thema verfolgt wäre dir aufgefallen das das Phänomen bei 2 gleich While Schleifen einmal auftritt und einmal nicht. Aber danke für deinen konstruktiven Post und vielen Dank an patfre der mir schnell und unkompliziert und ohne dumme "du bist nen noob" Sprüche geholfen hat.
                        The Human Mirror - Mein Blog!
                        www.sonicsense.de - The future of music!

                        Kommentar


                        • #13
                          Kein thema

                          Kommentar


                          • #14
                            Original geschrieben von Hazzardous
                            hättest du das Thema verfolgt wäre dir aufgefallen das das Phänomen bei 2 gleich While Schleifen einmal auftritt und einmal nicht. Aber danke für deinen konstruktiven Post und vielen Dank an patfre der mir schnell und unkompliziert und ohne dumme "du bist nen noob" Sprüche geholfen hat.
                            es geht nicht darum, ob zwei gleiche while-schleifen nun das selbe machen oder doch was leicht unterschiedliches, weil sich vielleicht sonst noch wo was ändert ... sondern um dein generelles unverständnis von dem, was du tust.

                            das fängt ja schon weit vor den problemen mit schleifen o.ä. an - z.b. sachen wie
                            PHP-Code:
                            array("".$row_head["m"]."","".$row_head["s"]."","".$row_head["p"].""); 
                            zeigen doch, dass du noch nicht einmal mit variablen richtig umgehen kannst bisher. (oder kannst du mir plausibel erklären, was an dieser stelle die verkettung der array-inhalte mit einem leerstring vorne und hinten für einen sinn haben soll? wieso denkst du, dass man die variablen nicht direkt dort notieren könnte, um sie ins array einzufügen?)
                            I don't believe in rebirth. Actually, I never did in my whole lives.

                            Kommentar


                            • #15
                              Es funktionier. Nicht mehr, nicht weniger. Wenn es für dich ein Problem ist das ich stilistische Dinge für den Anfang aussen vor halte nehme ich das gerne zur Kenntnis.
                              The Human Mirror - Mein Blog!
                              www.sonicsense.de - The future of music!

                              Kommentar

                              Lädt...
                              X