for schleife und $i

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

  • for schleife und $i

    hallo

    ich habe ein problem...

    und zwar hab ich eine abgeschlossene for-schleife
    und wollte aber den wert für $i im
    weiteren programm nochmal benutzen...

    aber anscheinend gilt diese variable
    nur für die schleife

    gibt es da eine lösung?

    PHP-Code:
    if (isset($up)){
        echo 
    "<span class=\"grossschrift\"><b>$numfiles</b> ";
        echo 
    $numfiles == '1' 'Datei kann' 'Dateien können';
        echo 
    " hochgeladen werden.</span><p>";
        echo 
    "<form enctype=\"multipart/form-data\" method=\"post\" action=\"$PHP_SELF\">";
        for (
    $i=1$i<=$numfiles$i++){
        echo 
    "<br><input type=\"File\" name=\"myfile$i\" class=\"input\">
                    <select name=\"kategorie
    $i\" class=\"select\">
                                    <option value=partypics>partypics
                                  <option value=musik>musik
                                  <option value=flyer>flyer
                        </option>
                        </select>"
    ;} 
    nun wollte ich außerhalb der schleife zum beispiel mit

    PHP-Code:
    echo "kategorie$i
    den wert anzeigen lassen

    aber es erscheint lediglich kategorie ohne den wert für $i dahinter...

  • #2
    Hi,

    Und was ergibt ein echo von $i nach der Schleife?

    Gruß Thomas

    Kommentar


    • #3
      hallo

      also echo nach der schleife mit nur $i ergibt nichts...

      es wird nichts angezeigt...

      Kommentar


      • #4
        aber anscheinend gilt diese variable nur für die schleife
        Das ist nicht so. Der Fehler muss anderswo liegen. zB. wenn $up nicht definiert ist, wird $i nicht definiert. Eine weitere Möglichkeit ist die, dass die Schleife mit $i in einer Funktion ist. Ausserdem sollte eine Fehlermeldung erscheinen, dass $i undefiniert ist - scheint aber abgeschaltet.

        Kommentar


        • #5
          sorry ich muß mich berichtigen also
          echo "kategorie$i" nach der schleife
          ergibt immer einen wert höher als
          die für den abbruch zuständige bedingung...

          heißt

          PHP-Code:
          if (isset($up)){
              echo 
          "<span class=\"grossschrift\"><b>$numfiles</b> ";
              echo 
          $numfiles == '1' 'Datei kann' 'Dateien können';
              echo 
          " hochgeladen werden.</span><p>";
              echo 
          "<form enctype=\"multipart/form-data\" method=\"post\" action=\"$PHP_SELF\">";
              for (
          $i=1$i<=$numfiles$i++){
              echo 
          "<br><input type=\"File\" name=\"myfile$i\" class=\"input\">
                          <select name=\"kategorie
          $i\" class=\"select\">
                                          <option value=partypics>partypics
                                        <option value=musik>musik
                                        <option value=flyer>flyer
                              </option>
                              </select>"
          ;}
                  echo 
          $i
          für den fall das $numfiles = 3 ist ergibt $i = 4 ...

          jetzt sieht mein code aber so aus (auszug) :

          PHP-Code:
          if (isset($up)){
              echo 
          "<span class=\"grossschrift\"><b>$numfiles</b> ";
              echo 
          $numfiles == '1' 'Datei kann' 'Dateien können';
              echo 
          " hochgeladen werden.</span><p>";
              echo 
          "<form enctype=\"multipart/form-data\" method=\"post\" action=\"$PHP_SELF\">";
              for (
          $i=1$i<=$numfiles$i++){
              echo 
          "<br><input type=\"File\" name=\"myfile$i\" class=\"input\">
                          <select name=\"kategorie
          $i\" class=\"select\">
                                          <option value=partypics>partypics
                                        <option value=musik>musik
                                        <option value=flyer>flyer
                              </option>
                              </select>"
          ;}
                  echo 
          $i;
                  if(
          $upw=="1"){echo'<br><span class="grossschrift">Passwort</span> 
                      <input type="password" name="pwd" class="input">'
          ;}
                  echo 
          '<br><br>
          <input type="Submit" name="sendfiles" 
                   value="hochladen" class="button">'
          ;}  
          if (isset(
          $sendfiles)){
              
          $numsendfiles count($HTTP_POST_FILES);
          ..
          ..
          .. 

          ab diesem zeitpunkt zeigt echo $i nichts mehr an....

          Kommentar


          • #6
            Du meinst wahrscheinlich, daß die Variable nicht mehr verfügbar ist wenn das Formular abgeschickt wurde.

            Das ist normal.

            Da müßtest die Variable per GET, POST oder SESSION übergeben.

            Kommentar


            • #7
              Original geschrieben von globqluqqlo
              Ausserdem sollte eine Fehlermeldung
              erscheinen, dass $i undefiniert ist -
              scheint aber abgeschaltet.

              was meinst du mit "abgeschaltet" ? in der php.ini?
              wenn ja welcher parameter ist dafür zuständig
              um mir diese fehlermeldung zu zeigen?

              Kommentar


              • #8
                ergibt immer einen wert höher als
                die für den abbruch zuständige bedingung...
                Würde ich für absolut normal halten, denn bei $i==3 wird die Schleife ja nochmals durchlaufen und $i eins hochgezählt --> $i ist dann eben vier. Wenn $i nach dem letzten Durchlauf nicht hochgezählt würde, dann würde die Schleife ja endlos laufen

                Gruss

                tobi
                Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                Kommentar


                • #9
                  Original geschrieben von Koala
                  Du meinst wahrscheinlich, daß die Variable nicht mehr verfügbar ist wenn das Formular abgeschickt wurde.

                  Das ist normal.

                  Da müßtest die Variable per GET, POST oder SESSION übergeben.

                  also durch das form tag :

                  PHP-Code:
                  echo "<form enctype=\"multipart/form-data\" method=\"post\" action=\"$PHP_SELF\">"
                  werden die daten ja per post übergeben...(register globals ist auf on)
                  aber selbst mit echo $_POST['kategorie$i'] komm ich nicht an die übergebenen variablen ran und er gibt mir nichts aus

                  das problem ist das er zum zeitpunkt der übergabe für $i einen wert übergibt den ich aber beim auslesen per $_POST nicht weiß...und $i ist nach dem abschicken nicht mehr verfügbar...

                  gibts dafür eine lösung?
                  Zuletzt geändert von borg74; 08.03.2006, 00:21.

                  Kommentar


                  • #10
                    echo $_POST['kategorie$i']
                    Also dass er so nicht anzeigt ist eingentlich nicht normal, er müsste eigentlich ne notice werfen, da du auf ein 100% nicht existierendes Array Element zugreifen willst
                    Wenn du die Meldung sehen willst
                    PHP-Code:
                    error_reporting(E_ALL); 
                    wenn du es aber richtig machen willst
                    PHP-Code:
                    //entweder
                    echo $_POST["kategorie$i"];
                    //oder
                    echo $_POST['kategorie'.$i]; 
                    Variabeln werden in ' und ' nie gefunden sondern immer als String interpretiert.

                    Gruss

                    tobi
                    Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                    [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                    Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                    Kommentar


                    • #11
                      Hier meine Version: Der Fehler scheint typisch für ein php-skript, das zwei (bzw. mehr) Webseiten ausgeben kann. Im ersten Aufruf des Skripts wird der Zweig if isset($up) durchlaufen, er definiert $i und das Skript ist beendet. Klickt der Benützer auf submit, so wird das Skript erneut bei null gestartet, nur der Zweig isset($sendfiles) durchlaufen und $i gibt es leider nicht. Der Irrtum liegt darin, dass man meint, die erste Ausführung warte auf die Eingabe und fahre dann an diesem Punkt weiter (kurz vor dem isset($sendfiles). Es sind aber zwei Ausführungen nacheinander und das muss man klarsehen.

                      Man muss alle Daten, was von der ersten an die zweite Ausführung übergeben werden muss, irgendwo ausserhalb des Skripts abspeichern, als state des Ablaufs. Im Skript geht es nicht. Die Vorschläge waren als verborgene Inputfelder im Formular, oder mit einer Session.

                      Möglicherweise hast du im php.ini, damit keine Fehlermeldungen in die Webseite kommen, und wie für ein Produktionssystem sinnvoll:
                      display_errors = Off

                      Kommentar


                      • #12
                        hat leider auch nichts gebracht...

                        also das problem ist wohl das ich name="kategorie$i"
                        per post übergebe und $i zu diesem zeitpunkt einen wert
                        hat...z.b. 1...das heißt ich übergebe die variable $kategorie1

                        auslesen per $_POST["kategorie$i"] kann ich
                        den wert nicht weil bei abschicken das $i
                        nicht mehr verfügbar ist...

                        das heißt ich müßte den wert wissen den $i
                        bei formularübergabe hat...und ihn dann irgendwie
                        in die $_POST abfrage nachdem abschicken reinbekommen...

                        Kommentar


                        • #13
                          Und wie verhält es sich wenn du myfiles als Array definierst ?
                          PHP-Code:
                           echo '<input type=\"File\" name=\"myfile[]\" class=\"input\">'
                          Gutes Tutorial | PHP Manual | MySql Manual | PHP FAQ | Apache | Suchfunktion für eigene Seiten

                          [color=red]"An error does not become truth by reason of multiplied propagation, nor does truth become error because nobody sees it."[/color]
                          Mohandas Karamchand Gandhi (Mahatma Gandhi) (Source)

                          Kommentar


                          • #14
                            Original geschrieben von globqluqqlo
                            Klickt der Benützer auf submit, so wird das Skript erneut bei null gestartet, nur der Zweig isset($sendfiles) durchlaufen und $i gibt es leider nicht.
                            dann müßte doch auch wenn ich es per method="get" mache
                            auch so sein das er eigentlich die variablen
                            nicht übergeben dürfte an die browserzeile
                            wenn man auf submit klickt...

                            das würde aber klappen.

                            nur ist es nicht das was ich möchte...

                            Man muss alle Daten, was von der ersten
                            an die zweite Ausführung übergeben werden
                            muss, irgendwo ausserhalb des Skripts abspeichern, als state des Ablaufs. Im Skript geht es nicht. Die Vorschläge waren als verborgene Inputfelder im Formular, oder mit einer Session.
                            hast du mir ein beispiel für deinen vorschlag?

                            Kommentar


                            • #15
                              wenn ihr bissl übersicht über das skript braucht und vielleicht besser vorstellen könnt was ich mein :

                              Kommentar

                              Lädt...
                              X