Ankündigung

Einklappen
Keine Ankündigung bisher.

while-Schleife - und dann?

Einklappen

Neue Werbung 2019

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

  • while-Schleife - und dann?

    Hallo,

    ich möchte, dass PHP überprüft ob eine Datei existiert.
    Am Anfang gibt es zwei Variablen:
    PHP-Code:
    $zahl 1;
    $dateiname "datei".$zahl.".php"
    Jetzt soll er überprüfen, ob die Datei existiert, wenn ja, soll er die Zahl erhöhen (bis die Datei nicht existiert), wenn nicht, soll er in diese Datei schreiben.

    Von der Logik her, müsste es ja mit einer while-Schleife funktionieren, aber wenn ich der zuweise, dass sie in eine Datei schreiben soll, erstellt er doch hunderte Dateien?!


    Ich hoffe ihr könnt mir helfen, bin langsam echt am verzweifeln.
    Wie kann ich das lösen?

    Gruß
    programmer112

  • #2
    aber wenn ich der zuweise, dass sie in eine Datei schreiben soll, erstellt er doch hunderte Dateien?!
    Wieso sollte er was schreiben? Ich denke Du willst das prüfen? Ganz allgemein finde ich den Plan sehr merkwürdig.

    Kommentar


    • #3
      Zitat von nikosch Beitrag anzeigen
      Wieso sollte er was schreiben? Ich denke Du willst das prüfen?
      Nein, ich möchte eben, dass er nach einer Eingabe vom Benutzer eine Datei erstellt, in der dann der eingegebene Text steht.
      Sollte die Datei eben schon existieren, soll er die eben nicht überschreiben sondern eine neue mit einer neuen Zahl hinten dran erstellen.

      Kommentar


      • #4
        while-Schleife - und dann?

        Hallo!
        Zitat von programmer112
        Jetzt soll er überprüfen, ob die Datei existiert, wenn ja, soll er die Zahl erhöhen (bis die Datei nicht existiert), wenn nicht, soll er in diese Datei schreiben.
        Und warum soll das so laufen? Es soll so lange hochgezählt werden, wie es Dateien gibt, sobald eine Datei nicht vorhanden ist magst du diese erstellen und die Zahl in diese Datei reinschreiben? Warum?

        Zitat von programmer112
        Von der Logik her, müsste es ja mit einer while-Schleife funktionieren, aber wenn ich der zuweise, dass sie in eine Datei schreiben soll, erstellt er doch hunderte Dateien?!
        War das dann nicht das Ziel? Neue Dateien erstellen?

        Wenn du dem folgst was oben beschrieben ist, schreibst (und erstellst eine Datei) du ja erst, wenn diese nicht vorhanden war.

        *Edit*
        Zitat von programmer112
        Nein, ich möchte eben, dass er nach einer Eingabe vom Benutzer eine Datei erstellt, in der dann der eingegebene Text steht.
        Gibt´s nen Grund warum du dafür keine Datenbank verwendest oder willst du die ganze Sache rein aus Übungszwecken durchführen?

        Kommentar


        • #5
          Ich mach mal ein Beispiel:
          Die Datei heißt datei1.php, sie existiert.

          Der Benutzer sendet etwas ab.
          Diese Eingabe soll jetzt in eine neue Datei geschrieben werden. Deswegen soll überprüft werden, welche Dateien existieren. Da datei1.php ja schon existiert, soll $zahl um eins erhöht werden, sodass eine neue Datei datei2.php heißt.

          Danach macht der Benutzer wieder eine Eingabe, diese Eingabe soll wiederum in einen neue Datei geschrieben werden, also datei3.php

          Warum ich das so will? Ich möcht es einfach mal ausprobieren.
          Vielleicht versteht ihrs jetzt.

          EDIT:
          Übungszwecke

          Kommentar


          • #6
            Das wird eine Endlosschleife, weil die Aufgabenstellung "schlecht" formuliert ist.

            Angenommen, du startest bei $zahl = 0, baust dir davon ausgehend in einer Schleife einen Dateinamen zusammen und überprüfst, ob die Datei existiert... wo endet das dann? Was passiert, wenn überhaupt keine Datei gefunden wird? Dann baust du dir bis zum Sanktnimmerleinstag neue Dateinamen... insofern ist deine Aussage zutreffend, das du tausende neuer Dateien erzeugen würdest, wenn es den Namen noch nicht gibt.

            Du brauchst eine Schleife mit einer festen Anzahl an Durchläufen, anders bringt dich die Unterscheidung "wenn Dateiname vorhanden, mache X, ansonsten mache Y" nicht weiter... eine diese beiden Bedingungen trifft immer zu.

            Kommentar


            • #7
              Mit was muss ich dann die die Schleife erweitern?

              Kommentar


              • #8
                while-Schleife - und dann?

                Zitat von programmer112
                Mit was muss ich dann die die Schleife erweitern?
                Bisher hast du ja keine eigene Schleife vorzuweisen, daher wäre diese ja nicht zu erweitern, sondern zu erstellen

                Also im Ernst...nimm dir den Tipp von lstegelitz zu Herzen und bau´ dir erstmal dein Script, so wie du es dir wünschst...mit dem schreiben der Dateien, dem überprüfen, ob vorhanden usw.

                Und wenn´s dann an der Stelle hängt wie du die feste Anzahl der Schleifendurchgänge festlegst kannst du dich hier mit deinem Script ja melden

                Kommentar


                • #9
                  Aus all seinen Post lässt sich folgendes zusammenreimen:

                  Nein, ich möchte eben, dass er nach einer Eingabe vom Benutzer eine Datei erstellt, in der dann der eingegebene Text steht.
                  Sollte die Datei eben schon existieren, soll er die eben nicht überschreiben sondern eine neue mit einer neuen Zahl hinten dran erstellen.
                  Benutzer können Eingaben machen und diese werden in Dateien abgelegt. Er will nun für jede Datei eine fortlaufende Nummer als Namen vergeben. Das heißt jede neue Eingabe bekommt eine neue Nummer und eine neue Datei.

                  Sein Problem ist nun das ermitteln der nächsten fortlaufenden Nummer.

                  PHP-Code:
                  $index 1;
                  $content 'das soll gespeichert werden'
                  while (file_exists('datei'.$index.'.txt')) {
                     
                  $index++;
                  }

                  $fp fopen('datei'.$index.'.txt''w');
                  fwrite($content);
                  fclose($fp); 
                  Die while-Schleife bricht ab sobald die Datei mit $index nicht existiert, und läuft solange weiter wie die Dateien existieren.

                  Nach der Schleife befindet sich dann in $index eine Nummer zu der keine Datei gefunden wurde, da ansonsten die while-Schleife weiter laufen müsste.

                  Kommentar


                  • #10
                    Dark Guardian hats verstanden ^^

                    Ich habe ja schon angefangen.
                    Ich poste mal mein Script:
                    PHP-Code:
                    echo "<form action='post.php' method='post'>";

                    echo 
                    "<p><input name='inhalt'></p>";
                    echo 
                    "<p><input type='submit' name='senden'></p>";



                    $zahl 1;
                    $dateiname "datei".$zahl.".php";
                    if(isset(
                    $_POST["senden"]))
                    {
                      
                    // Inhalt definieren
                      
                    $inhalt $_POST["inhalt"];
                      if(
                    file_exists($dateiname))
                      {
                        
                    // Zahl erhöhen, Datei erstellen und hineinschreiben
                        
                    $zahl++;
                        
                    $dateiname "datei".$zahl.".php";
                        
                    $handle fopen($dateiname,"w");
                        
                    $write  fwrite($handle$content);

                        
                    // Schreiben bestätigen
                        
                    if($write)
                        {
                          echo 
                    "Es wurde in ".$dateiname." geschrieben.</p>";
                        }

                      }

                    Wo muss hier dann die while Schleife hin? (Steh n bisschen aufm Schlauch)

                    Kommentar


                    • #11
                      Und was machste wenn die Zahl 2 Milliarden ist der letzten datei ? Gehst du dann hin und zählst erstmal bis 2 Mrd hoch und testes 2 Mrd mal ob eine Datei existiert ? Hut ab ^^

                      glob() aufs dir, dank sortierter Ausgabe letztes array-Element nutzen und per regex zahl auslesen + um 1 erhöhen -> fertig.

                      Alternativ würd ich sogar hingehen und mir das sparen und einfach den aktuellen Timestamp an den Dateiname hängen, denn das einzigste was sich Zeittechnisch explizit nicht verändert ist der Timestamp, da er in jedem Fall immer die Zahl vergangener Sekunden seit dem 1970-01-01 00:00:00 UTC entspricht. UTC-Zeiten haben keinen Solar-Cycle ( Sommer-/Winter-Zeit-Umstellung ).

                      Kommentar


                      • #12
                        Zitat von tr0y Beitrag anzeigen
                        Alternativ würd ich sogar hingehen und mir das sparen und einfach den aktuellen Timestamp an den Dateiname hängen, denn das einzigste was sich Zeittechnisch explizit nicht verändert ist der Timestamp
                        ...

                        Das ist auch eine Idee.
                        Gibt es eigentlich eine andere Method außer time() , weil das ja die Uhrzeit des Besuchers ist, wenn der sie also verstellt, ist sie dort also auch anders oder?

                        Kommentar


                        • #13
                          Zitat von programmer112 Beitrag anzeigen
                          Gibt es eigentlich eine andere Method außer time() , weil das ja die Uhrzeit des Besuchers ist
                          Nein, ist sie nicht.

                          Kommentar


                          • #14
                            Zitat von ChrisB Beitrag anzeigen
                            Nein, ist sie nicht.
                            Dann muss ich mich mal verlesen haben.
                            Ich werde jetzt mal die Methode mit der Uhrzeit umsetzen, bzw. ich versuche es ^^

                            Kommentar


                            • #15
                              äh?

                              PHP-Code:
                              echo "<form action='post.php' method='post'>";

                              echo 
                              "<p><input name='inhalt'></p>";
                              echo 
                              "<p><input type='submit' name='senden'></p>";

                              /* and now: ultra complex code ! */

                              if(isset($_POST["senden"]))
                              {
                                if ( 
                              file_put_contents('datei-'.time().'.php'$_POST['inhalt']) )
                                   echo 
                              'Win. Sicherheitsloch im Script zuverlässig erzeugt.';
                                else echo 
                              'Fail. Datei konnte nicht geschrieben werden, Sicherheitsloch nicht erzeugt.';


                              Man beachte den Wink mit dem Zaunpfahl.

                              Kommentar

                              Lädt...
                              X