for() Schleife Problem bei Aktualisierung eines Formulars

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

  • for() Schleife Problem bei Aktualisierung eines Formulars

    Ich möchte über ein Formular ein Bild hochladen
    und diesen Schritt wiederholen können,
    jedoch mit Speicherung des Dateinamens
    des vorher hochgeladenen Bildes,
    um später die hochgeladen Bilder selektieren zu können.

    Nach jedem Upload wird folgender PHP Code ausgeführt,
    damit ich an die vorhandene URL das zuvor hochgeladene
    Bild in Form des Namens anhängen kann,
    jedoch funktioniert die Addition bereits nach dem
    2. Upload nicht mehr.

    Ich wäre dankbar für eine Fehleranalyse und Tipps.

    Danke im voraus.

    PHP-Code:
    $url "webseiten.php?".$_SERVER['QUERY_STRING'];

    for(
    $iPlus 1$iPlus <= 10$iPlus++)
    {
      
    $string "file_".$iPlus;

      
    $pos[file] = strpos($url$string);

      if(
    $pos[file] == true) {
        
    $iPlus $iPlus++;
        
    $url $url."&file_".$iPlus."=".$filename;
        break;
      }

      
    // wird komischerweise auch wieder nach dem 2. upload ausgeführt,
      // sodass nicht file_3 an die url angehängt wird sondern file_1
      // was natürlich unsinn ist, da ich es nun 2 mal drin habe in Form von
      // webseiten.php?file_1=x&file_2=y&file_1=z
      
    else
      {
        
    $url $url."&file_1=".$filename;
        break;
      }

    Zuletzt geändert von kerbstone; 27.07.2007, 23:38.

  • #2
    Hmm, die positive Resonanz lässt darauf schließen, dass alles
    korrekt aussieht... ich versteh es auch nicht

    Kommentar


    • #3
      Original geschrieben von kerbstone
      Hmm, die positive Resonanz lässt darauf schließen, dass alles
      korrekt aussieht...
      interessant, aus einer imaginären resonanz schlussfolgerst du also, dass sie positiv ist und ferner dein "kot" ok ist.

      Original geschrieben von kerbstone
      ich versteh es auch nicht
      ok, dann beantworte doch mal alle fragen:

      * $pos[file] - wo wird die konstante 'file' definiert oder ist es ein string?
      * strpos(), "Diese Funktion kann sowohl das Boolsche FALSE zurückliefern, als auch einen nicht-Boolschen Wert, wie zum Beispiel0 oder "". der von einem einfachen if-Statement als FALSE ausgewertet wird." - wo könnte das in deinem code relevant werden?
      * $iPlus = $iPlus++; - was genau bewirkt diese zeile?
      * ist eine for-schleife mit if, else und je einem break sinnvoll oder wird die schleife immer im ersten durchlauf abgebrochen?

      Kommentar


      • #4
        $iPlus = $iPlus++;
        ein klassiker... undefined behaviour.

        kerbstone, diese information gehört aber auch nie und niemals in eine url. aber das kann ein jemand mit deiner webentwickler-erfahrung ja nicht wissen...

        hint: session.

        Kommentar


        • #5
          @penizillin:
          ein klassiker... undefined behaviour
          $iPlus = $iPlus++;

          Das ist sehr wohl definiert und sinnvoll, da
          ich $iPlus doch in der for()-Schleife als 1 definiere;
          zudem durchläuft $iPlus die for()-Schleife vom Wert 1 bis 10
          und wird sobald ein Wert, meinetwegen file_'4' gefunden
          wurde, um den Wert 1 erhöht, damit ich den aktuell
          hochgeladenen Bildnamen als file_'5' anhängen kann, logisch finde ich

          @3DMax
          * $pos[file] - wo wird die konstante 'file' definiert oder ist es ein string?
          - hier wird pos[file] definiert: $pos[file] = strpos($url, $string);

          * strpos(), "Diese Funktion kann sowohl das Boolsche FALSE zurückliefern, als auch einen nicht-Boolschen Wert, wie zum Beispiel0 oder "". der von einem einfachen if-Statement als FALSE ausgewertet wird." - wo könnte das in deinem code relevant werden?
          - bei if($pos[file] == true)

          * $iPlus = $iPlus++; - was genau bewirkt diese zeile?
          - siehe oben

          * ist eine for-schleife mit if, else und je einem break sinnvoll oder wird die schleife immer im ersten durchlauf abgebrochen?
          - die Schleife wird, so dachte ich, sobald mein gesuchter Wert ($iPlus)
          in der url gefunden wird, unterbrochen, so war meine Absicht

          Kommentar


          • #6
            Oh man(n) ...
            • $iPlus = $iPlus++; ist Quatsch - siehe Manual
            • $pos[file] ist falsch - siehe Strings und Variablen
            • if($pos[file] == true) hier möchtest du zusätzlich noch auf den Typ prüfen
            • Deine Schleife wird in immer abgebrochen - du hast in beiden Zweigen von if ein break drinstehen
            Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

            Kommentar


            • #7
              Okay, die genannten Punkte habe ich soweit berücksichtigt.
              Leider weiß ich ab hier nicht mehr, was ich noch ändern müsste,
              damit es funktioniert

              PHP-Code:
              $url "webseiten.php?".$_SERVER['QUERY_STRING'];

              $iPlus 0;

              for(
              $iPlus 1$iPlus <= 10$iPlus++)
              {
                
              $string "file_".$iPlus;

                
              $pos["file"] = strpos($url$string);

                if(
              $pos["file"] == true) {
                  
              $iPlus = ++$iPlus;
                  
              $url $url."&file_".$iPlus."=".$filename;
                }
                else
                {
                  
              $url $url."&file_1=".$filename;
                }

              Kommentar


              • #8
                PHP-Code:
                // weiterhin unsauber....!
                 
                if($pos["file"] == true) {
                    
                $iPlus = ++$iPlus;
                    ..............................
                  }


                // tut das gleiche!!
                 
                if($pos["file"]) {
                    
                $iPlus++;
                    ..............................
                  } 
                Wir werden alle sterben

                Kommentar


                • #9
                  Vielen, vielen Dank. Wie kann ich jetzt noch ermitteln,
                  ob nach file_2 nicht noch file_3, file_4 ..., file_10 kommt,
                  sodass ich immer den nächsthöheren Wert addiere?
                  Die Ausgabe sieht bei mir so aus, dass nach dem Wert
                  2 wieder 2 anghangen wird, wo wir wieder bei
                  der Ausgangslage wären. Die breaks sind erforderlich,
                  da ich nicht 10 mal file_$iPlus anhängen möchte, sondern
                  jeweils nur ein Wert dazu kommen soll.
                  Andernfalls habe ich das Problem, dass ich
                  nach file_2 dann alle Zahlen von 1 bis 10 wieder dran hängen habe.

                  PHP-Code:
                  $url "webseiten.php?".$_SERVER['QUERY_STRING'];

                  $iPlus 0;

                  for(
                  $iPlus 1$iPlus <= 10$iPlus++)
                  {
                    
                  $string "file_".$iPlus;

                    
                  $pos["file"] = strpos($url$string);

                    
                  //hiermit prüfe ich dann auch auf den typ
                    
                  if($pos["file"] === true) {
                      
                  $iPlus = ++$iPlus;
                      
                  $url $url."&file_".$iPlus."=".$filename;
                      break;
                    }
                    else
                    {
                      
                  $url $url."&file_1=".$filename;
                      break;
                    }

                  So, habe nochmal kurz den Code/KOT aktualisiert, um
                  in der if-Schleife auf den Typ zu prüfen
                  Zuletzt geändert von kerbstone; 28.07.2007, 13:44.

                  Kommentar


                  • #10
                    Du hast immer noch nur die Hälfte der Tipps umgesetzt. Was Combie bezüglich if gepostet hat ist falsch.
                    Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                    Kommentar


                    • #11
                      Original geschrieben von tontechniker
                      Du hast immer noch nur die Hälfte der Tipps umgesetzt. Was Combie bezüglich if gepostet hat ist falsch.
                      Was ist daran falsch?
                      (damit ich nicht doof sterbe)
                      Wir werden alle sterben

                      Kommentar


                      • #12
                        Als Ergebnis kommt bei mir immer noch:

                        PHP-Code:
                        webseiten.php?action=neue_webseite&schritt=1&file_1=ipod.gif&file_1=ipod_1.gif 
                        und das würde sich so fortsetzen mit file_1=neuer_bildname

                        Kommentar


                        • #13
                          Diese Funktion kann sowohl das Boolsche FALSE zurückliefern, als auch einen nicht-Boolschen Wert, wie zum Beispiel0 oder "".
                          # if($pos[file] == true) hier möchtest du zusätzlich noch auf den Typ prüfen
                          $a === $b Identisch Gibt TRUE zurück wenn $a gleich $b ist und beide vom gleichen Typ sind (seit PHP 4).
                          Die Regeln | rtfm | register_globals | strings | SQL-Injections | [COLOR=silver][[/COLOR][COLOR=royalblue]–[/COLOR][COLOR=silver]][/COLOR]

                          Kommentar


                          • #14
                            und ohne die breaks, wie gesagt, erhalte ich
                            PHP-Code:
                            webseiten.php?action=neue_webseite&schritt=1&file_1=ipod.gif&file_1=ipod_1.gif&
                            file_1=ipod_1.gif&file_1=ipod_1.gif&file_1=ipod_1.gif&file_1=ipod_1.gif&
                            file_1=ipod_1.gif&file_1=ipod_1.gif&file_1=ipod_1.gif 

                            Kommentar


                            • #15
                              das inkrementieren ist immer noch falsch - genau so undefined behaviour wie vorher, die if-abfrage enthält immer noch zwei breaks, sodass die schleife unnötig ist. aber dass der weg im ganzen falsch ist, habe ich auch schon gesagt.

                              Kommentar

                              Lädt...
                              X