PHP while() Problem

Mac_Neuling

Mac_Neuling

Aktives Mitglied
Thread Starter
Dabei seit
13.12.2004
Beiträge
1.467
Reaktionspunkte
1
Hallo,

ich habe da ein kleines Problem mit while() (in PHP).
Ich möchte mit einer while-Schleife eine if-Bedingung solange überprüfen lassen, bis sie wahr ist und dann eine Datei erstellen. Doch leider bekomme ich dann tausende von Dateien in den Ordner geschrieben.

PHP:
$issave=0;
$dateiname=1;
while($issave == '0')
{
    $file=$dateiname.".txt";								
    $savehandler=fopen("$file","w+");	
    if (!$savehandler)
    {
	    @fwrite($savehandler, $datensatz);
	    $issave++;
    }	
    $dateiname++;	
}

Weiß vielleicht jemand, wo da mein Denkfehler ist?
 
da wäre eine do while schleife angebrachter...
oder if then break
 
versuch doch einfach mal nicht $issave++; sondern $issave = true; und dann vorher eben auf false und dann while(!$issave)...
 
@oneOeight: Mit einer do-while-Schleife hab ich es auch schon probiert. Es führt zum selben Ergebnis. eine if-then-break-Anweisung funktioniert auch nicht, da man eine unbestimmte Anzahl von Dateien überprüfen können muss.

@MS_92: Da kommt leider auch das selbe bei raus.

:(
 
wieso sollte das mit break nicht gehen?
wenn ich deinen code richtig lese, dann müsstest du einfach das $issave++ durch break ersetzen...
ist zwar kein sauberes programmieren, aber das möchtest du ja eh nicht ;)
 
hmm, wenn ich anstatt dem $issave++ ein break setzte, dann wird doch nur if abgebrochen und die while-Schleife läuft weiter.
 
Versuch mal "break 2;".
 
Lies Dir doch einfach mal durch was Du geschrieben hast:
  1. setze gespeichert auf 0
  2. setze dateiname auf 1
  3. wenn nicht gespeichert (ist der Falls, dann tue folgendes
  4. setze datei auf dateiname mit Endung ".txt" also auf 1.txt
  5. öffne Datei schreibend (Datei wird erzeugt so sie nicht exisiert)
  6. wenn obiges nicht funktioniert hat, dann tue folgendes
  7. obiges hat aber funktioniert, also überspringen wir es einfach und ehöhen dateiname um 1, also auf 2
  8. Ende der Schleife, also fangen wir von vorne an
  9. wenn nicht gespeichert ist, dann tue folgendes; also wir tun folgendes
  10. setze datei auf dateiname mit Endung ".txt" also auf 2.txt
  11. öffne Datei schreibend (Datei wird erzeugt so sie nicht exisiert)
  12. wenn obiges nicht funktioniert hat, dann tue folgendes
  13. obiges hat aber funktioniert, also überspringen wir es einfach und ehöhen dateiname um 2, also auf 3
  14. Ende der Schleife, also fangen wir von vorne an

Wie man sieht, macht das Programm genau das was Du beschreibst. Ich würde einfach mal sagen, Deine Bedingung ist falsch.
 
Danke Pingu. Es lag am "!" (ungleich) in der Bedingung. So ein misst aber auch. :D
 
Zumal es ziemlich merkwürdig ist PHP eine Cast-Operation aufzuzwingen, wenn diese völlig überflüssig ist. Denn warum $issave auf 0 setzen und dann auf '0' abfragen!? Vor allem, wenn die Variable in der Funktion mit ++ aufgerufen wird.
 
Zumal es ziemlich merkwürdig ist PHP eine Cast-Operation aufzuzwingen, wenn diese völlig überflüssig ist. Denn warum $issave auf 0 setzen und dann auf '0' abfragen!? Vor allem, wenn die Variable in der Funktion mit ++ aufgerufen wird.
Die Variable wird nur inkrementiert, wenn die if-bedingung erfüllt ist. ;)
Der Code ein meinem ersten Beitrag ist nur ein Beispiel und nicht das Original.
Da ist zwar immer noch ein Bearbeitungsfehler (bestehende Dateien werden überschrieben) aber das Problem löse ich alleine.
 
Zuletzt bearbeitet:
Zurück
Oben Unten