Geltungsbereich Variable

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

  • Geltungsbereich Variable

    Wie ist das mit dem Geltungsbereich einer Variablen bzw. eines Arrays??
    Habe folgenden Code:

    PHP-Code:
    $abfrage mysql_query("SELECT * FROM tagesstatus a LEFT JOIN server b ON b.server_id = a.server_id WHERE
                                                b.applikation_id = '
    $system_id' AND tag_bedient = '$betrieb' AND tag_aktiv = 1
                                                AND tag_stoerstart_zeit BETWEEN '
    $startdatum' AND '$stopdatum
                                                AND MID(tag_stoerstart_zeit,9,2) = '
    $j' ORDER BY tag_stoerstart_zeit");
                        while (
    $data mysql_fetch_array($abfrage)) // Schleife für Ausgabe der Datensätze
                            

    Soweit so gut, das Array "$data" ist in der While-Schleife ganz normal mit seinen Werten verfügbar, so wie es sein soll.
    Aber weiter unten:

    PHP-Code:
    }

                            if (
    $server != "")
                            {
                            echo 
    "<td height='30px'><input type=text size=1 maxlength=3 name='stunde_" $i "'> : <input size=1 maxlength=2 type=text name='minute_" $i "'></td></tr>";
                            echo 
    $data['tag_id']; 
    ...mache ich die While-Schleife wieder zu und will innerhalb einer If Abfrage einen Wert aus dem $data-Array auslesen => Nichts mehr drin. Woran liegt denn das? Habe auch schon versucht $data auf "Global" zu setzten vor der Schleife, ohne Erfolg....

  • #2
    while ($data = ... ) {...}
    bricht ab, wenn $data false (oder äquivalent, also 0, Leerstring, NULL oder unset) ist.
    dementsprechend enthält $data nach Abschluss der Schleife natürlich keine Daten mehr.
    mein Sport: mein Frühstück: meine Arbeit:

    Sämtliche Code-Schnipsel sind im Allgemeinen nicht getestet und werden ohne Gewähr auf Fehlerfreiheit und Korrektheit gepostet.

    Kommentar


    • #3
      is ja klar
      PHP-Code:
      while ($data mysql_fetch_array($abfrage)) 
      durchläuft solange die while-schleife, wie es datensätze gibt

      wenn der letzte datensatz gelesen wurde, geht php nochmal in den schleifenkopf, wertet nochmal
      PHP-Code:
      $data=mysql_fetch_array($abfrage
      aus und hat als ergebnis (da mysql_fetch_array keinen datensatz mehr liefert) FALSE

      und das is auch der wert, den $data nach der schleife hat


      alles klar?
      Ich denke, also bin ich. - Einige sind trotzdem...

      Kommentar


      • #4
        der Geltungsbereich geht immer von eine öffnenden Klammer {
        bis zu einer schliessenden Klammer }

        also
        PHP-Code:
        while(...){
          
        $a 1;
          echo 
        $a// $a ist bekannt !
        }
        echo 
        $a// $a ist unbenkannt! 
        PHP-Code:
        $a 1;
        while(...){
          
        $a 2;
          echo 
        $a// $a ist bekannt !
        }
        echo 
        $a// $a ist bekannt, da vor der While Schleife definiert ! 
        in deinem Falle mach vor der Whileschleife ein;
        PHP-Code:
        $data = array(); 
        und $data ist auch nach der Schleife noch bekannt
        TBT

        Die zwei wichtigsten Regeln für eine berufliche Karriere:
        1. Verrate niemals alles was du weißt!


        PHP 2 AllPatrizier II Browsergame

        Kommentar


        • #5
          Alles klar Jungs, danke für die schnellen Antworten!
          Habs kapiert, hab nun einfach die If-Abfrage noch mit in die Schleife genommen, kommt auf selbe raus und funzt jetzt!

          Kommentar


          • #6
            Original geschrieben von TBT
            in deinem Falle mach vor der Whileschleife ein;
            PHP-Code:
            $data = array(); 
            und $data ist auch nach der Schleife noch bekannt
            Das funktioniert aber nicht so wie du es sagst....
            Wenn ich das so mache, ist $data immer noch nicht bekannt.....

            Kommentar


            • #7
              bekannt schon, aber nach der while-schleife kein array mehr, sondern eine boolean-variable mit dem wert FALSE
              Ich denke, also bin ich. - Einige sind trotzdem...

              Kommentar


              • #8
                OK, ich war mal wieder zu voreilig mit meiner Freude:
                Es geht doch nicht so einfach wie ich dachte. Die If-Abfrage MUSS nach der While Schleife erfolgen, sonst funktioniert es nicht so wie es soll.
                Gibt es denn eine andere Möglichkeit, noch an das Array zu kommen???

                Kommentar


                • #9
                  was willst du denn machen?

                  geht doch bestimmt auch anders
                  Ich denke, also bin ich. - Einige sind trotzdem...

                  Kommentar


                  • #10
                    Ist eine recht komplizierte Sache.....
                    Ich lese Werte aus der Datenbank aus, diese werden nacheinander mit einer While Schleife in einer HTML Tabelle ausgegeben. Die Daten sind Werte von einem Monat, d.h. Tag1, Tag2, Tag3. Nun kann es sein, das 2 Werte/Tag vorhanden sind: Tag1-Wert-x, Tag2-Wert-y, Tag3, Tag4-Wert-a, Tag4-Wert-b, Tag4-Wert-c, Tag5, usw....
                    Nach jedem Tag muss ein Eingabefeld erscheinen, d.h. das im obigen Beispiel ein Feld für Tag 4 erscheinen muss, obwohl dieser 3 Werte hat.
                    Diese Eingabefelder muss der User ausfüllen. D.h. ich muss sie mittels POST übergeben an eine neue Seite und dann in die Datenbank wieder eintragen.
                    Das ist mein Problem. Wenn einer von euch eine Idee hat, wie man das anders realisieren kann, nur raus damit.

                    Kommentar


                    • #11
                      Re: Geltungsbereich Variable

                      PHP-Code:
                      while ($data mysql_fetch_array($abfrage)){
                         ... 
                      // übliche verarbeitung der daten;
                         
                      $tag_id $data['tag_id'];
                      }

                      if (
                      $server != ""){
                        ...
                         echo 
                      $tag_id// gibt hier den letzten aufgetretenen wert von $data['tag_id'] aus

                      I don't believe in rebirth. Actually, I never did in my whole lives.

                      Kommentar


                      • #12
                        Wäre auch eine Möglichkeit gewesen, ich habs jetzt einfach mal so gemacht das ich ein zweites Array angelegt hab und das eine in dieses zweite reinkopiert habe. So geht's auch.

                        Aber vielleicht kann mir jemand noch bei folgendem helfen:
                        PHP-Code:
                        echo "<td height='30px'><input type=text size=1 maxlength=3 name='stunde_" $i "'> : <input size=1 maxlength=2 type=text name='minute_" $i "'></td></tr>";

                                                
                        // SQL String mit den Eingabewerten zusammensetzen
                                                
                        $sql_str[$i] = $sql_str[$i] . "tag_id = '".$data2['tag_id']."', applikation_id = '"
                                                           
                        $data2['applikation_id'] . "', startdatum = '" $data2['tag_stoerstart_zeit']
                                                           . 
                        "', stopdatum = '" $data2['tag_stoerstop_zeit'] . "';";

                                                echo 
                        "<input type=hidden value='".$sql_str[$i]."' name='a".$i."'>"
                        Der SQL-String mitsamt den Werten soll mittels POST an eine zweite Seite übergeben werden. Aber nach folgendem Code auf der zweiten Seite:
                        PHP-Code:
                        print_r(array_count_values($_POST));

                        for(
                        $i=0;$i<=31;$i++)
                        {
                           echo 
                        $_POST[a.$i]."<br>";

                        kommt nur das an:

                        Array ( [00] => 4 [08] => 1 [INSERT INTO diagramm_systeme SET tag_id = ] => 4 [45] => 1 [12] => 1 [30] => 1 )
                        INSERT INTO diagramm_systeme SET tag_id =

                        Kommentar


                        • #13
                          Original geschrieben von el_espiritu
                          Der SQL-String mitsamt den Werten soll mittels POST an eine zweite Seite übergeben werden. Aber nach folgendem Code auf der zweiten Seite:
                          PHP-Code:
                          print_r(array_count_values($_POST));

                          for(
                          $i=0;$i<=31;$i++)
                          {
                             echo 
                          $_POST[a.$i]."<br>";

                          kommt nur das an:

                          Array ( [00] => 4 [08] => 1 [INSERT INTO diagramm_systeme SET tag_id = ] => 4 [45] => 1 [12] => 1 [30] => 1 )
                          INSERT INTO diagramm_systeme SET tag_id =
                          dein array hat doch anscheinend gar keine indizes mit den nummern/namen 1, 2, 4 ... - also warum lässt du deine for-schleife von 0 bis 31 laufen, wenn es dazwischen viele werte gar nicht im array gibt?

                          und was bitte ist bei dir überhaupt dieses a, mit dem du deinen schleifenzähler verkettest - wo hast du die konstante a defniert, und welchen wert hat sie?


                          benutze stattdessen lieber foreach(), und durchlaufe damit das array $_POST.
                          I don't believe in rebirth. Actually, I never did in my whole lives.

                          Kommentar


                          • #14
                            Das "a" kommt von dem "name" des Formular-Tags, die dürfen doch nicht mit Zahlen anfangen, also hab ich vor das "$i" noch einen Buchstaben gepackt.

                            Kommentar


                            • #15
                              Original geschrieben von el_espiritu
                              Das "a" kommt von dem "name" des Formular-Tags, die dürfen doch nicht mit Zahlen anfangen, also hab ich vor das "$i" noch einen Buchstaben gepackt.
                              das ändert aber nichts an der tatsache, dass du an dieser stelle eine konstante namens a benutzt - hast du diese auch wirklich irgendwo mit dem wert a definiert?
                              I don't believe in rebirth. Actually, I never did in my whole lives.

                              Kommentar

                              Lädt...
                              X