alex: ein array loeschen

Hallo!

ich habe ein hier ein Programm, mit dem ich in einer Datei gaestebuch.txt gespeicherte Einträge löschen möchte. Dummerweise klappt es nicht. Wo ist denn der Fehler?

Danke, alex

<?php

$pass="abc";

if (isset($_POST[nummer]) AND isset($_POST[text]))

{
 ?>
 $nummer=$_POST["nummer"];
 $g=file("gaestebuch.txt");
 $loeschnummer=$nummer-1;
 unset($g[$loeschnummer]);
 $neuerinhalt=$g;
 $neuerinhalt = implode("\n",$neuerinhalt);
 str_replace("\n\n","\n",$neuerinhalt);
 $d=fopen("gaestebuch.txt","w+");
 fwrite($d,$neuerinhalt);
 fclose($d);
 <?php
       }

if (isset($_POST[passwort]))
{

if ($_POST[passwort]==$pass)
      {
 ?>
 <form action="pass.php" method="post">
 <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
 <input type="submit" value="Loeschen">
 </form>
 <?php
      }
  else
      {
 ?>
 <b>FALSCH<b>
 <?php
      }
}

else
       {
 ?>
 <form action="pass.php" method="post">
 <input type="text" name="passwort" size="24" maxlength="24">
 <br>
 <br>
 <input type="submit" value="Abschicken">
 </form>
 <?php
       }
?>
</body></html>

  1. Hallo alex,

    Dummerweise klappt es nicht. Wo ist denn der Fehler?

    was klappt nicht? Fehlermeldung?

    <?php
    if (isset($_POST[nummer]) AND isset($_POST[text]))

    schreib mal $_POST["nummer"] (also, mit Anführungszeichen) bei text genauso

    ?>

    hier machst du den php-Bereich zu...

    $nummer=$_POST["nummer"];

    ...und hier willst du php-Code ausführen - das kann doch nicht gehen.

    if (isset($_POST[passwort]))

    ich auch noch anführungszeichen

    Grüße aus Nürnberg
    Tobias

    1. also da ist keine Fehlermeldung, es wird einfach nichts geloescht.
      Probieren kannst du es unter
      http://mitglied.lycos.de/pandaemonium/pass.php
      und nachsehen ob irgendwas gelöscht wurde unter
      http://mitglied.lycos.de/pandaemonium/

      ich habe die "" reingeschrieben, der script sieht jetzt so aus

      <?php

      $pass="abc";

      if (isset($_POST["nummer"]) AND isset($_POST["text"]))

      {
       $nummer=$_POST["nummer"];
       ?>
       $g=file("gaestebuch.txt");
       $loeschnummer=$nummer-1;
       unset($g[$loeschnummer]);
       $neuerinhalt=$g;
       $neuerinhalt = implode("\n",$neuerinhalt);
       str_replace("\n\n","\n",$neuerinhalt);
       $d=fopen("gaestebuch.txt","w+");
       fwrite($d,$neuerinhalt);
       fclose($d);
       <?php
             }

      if (isset($_POST["passwort"]))
      {

      if ($_POST[passwort]==$pass)
            {
       ?>
       <form action="pass.php" method="post">
       <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
       <input type="submit" value="Loeschen">
       </form>
       <?php
            }
        else
            {
       ?>
       <b>FALSCH<b>
       <?php
            }
      }

      else
             {
       ?>
       <form action="pass.php" method="post">
       <input type="text" name="passwort" size="24" maxlength="24">
       <br>
       <br>
       <input type="submit" value="Abschicken">
       </form>
       <?php
             }
      ?>
      </body></html>

      alex

      1. Hallo!

        <?php

        $pass="abc";

        if (isset($_POST["nummer"]) AND isset($_POST["text"]))

        woher bekomt das Script $_POST["text"]?

        {
        $nummer=$_POST["nummer"];
        ?>

        das ist definitiv fehl am Platz!
           das Du davon nichts merkst kiegt daran dass die obige if-Bedingung scheitert!
           alles bis zum nächsten } wird niemals ausgeführt

        $g=file("gaestebuch.txt");
        $loeschnummer=$nummer-1;
        unset($g[$loeschnummer]);
        $neuerinhalt=$g;
        $neuerinhalt = implode("\n",$neuerinhalt);
        str_replace("\n\n","\n",$neuerinhalt);
        $d=fopen("gaestebuch.txt","w+");
        fwrite($d,$neuerinhalt);
        fclose($d);
        <?php
               }

        ab hier gehts also weiter

        if (isset($_POST["passwort"]))
        {

        gabe ich nicht gesetzt, also wieder alles überspringen

        if ($_POST[passwort]==$pass)
              {
        ?>
        <form action="pass.php" method="post">
        <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
        <input type="submit" value="Loeschen">
        </form>
        <?php
              }
          else
              {
        ?>
        <b>FALSCH<b>
        <?php
              }
        }
        also hier weiter, else trifft natürlich zu

        else
               {
        ?>
        <form action="pass.php" method="post">
        <input type="text" name="passwort" size="24" maxlength="24">
        <br>
        <br>
        <input type="submit" value="Abschicken">
        </form>
        <?php
               }

        Wenn Du in den online html-Quelltext siehst steht da dieses Formular, nur darin gibst Du ein "passwort" ein, keine "nummer", und auch kein "text"

        ?>
        </body></html>

        Vielleichst solltest Du Deine Formulare nicht _zu_ einfach halten ;-)

        Grüße
        Andreas

        1. Sooooo, ich habe die paar Fehler korriegiert, glaube ich.
          In der tat, habe ich die IF Bedingung vergessen.
          Früher wollte ich die möglichkeit haben die Gästebucheintraege ergänzen zu koennen. Daher die Variable "text" , das wurde mir dann zu kompliziert, und ich habe den Script geändert, damit ich die Eintraege wenigstens loeschen kann.

          Ich habe es mir so vorgestellt :

          am anfang scheitert die erste IF Bedingung
          if (isset($_POST["nummer"])

          nummer (des Eintrages) wurde noch nicht gesetzt.

          wir gehen also weiter

          if (isset($_POST["passwort"]))

          stimmt auch nicht, "password" wurde auch noch nicht gesendet.

          was bleibt ist

          else
                 {
           ?>
           <form action="pass.php" method="post">
           <input type="text" name="passwort" size="24" maxlength="24">
           <br>
           <br>
           <input type="submit" value="Abschicken">
           </form>
           <?php
                 }

          Wenn ein formular ausgefüllt wurde, wird "password" an dasselbe formular geschickt, wo die Bedingung

          if (isset($_POST["passwort"]))

          {

          if ($_POST[passwort]==$pass)
                {
           ?>
           <form action="pass.php" method="post">
           <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
           <input type="submit" value="Loeschen">
           </form>
           <?php
                }
            else
                {
           ?>
           <b>FALSCH<b>
           <?php
                }
          }

          Das Password wird geprüft, und wenn es stimmt wird ein Formular erzeugt, das "nummer" wiederrum an diese Datei sendet.

          Darauf springt die letzte Bedingung an

          if (isset($_POST["nummer"])

          {
           $nummer=$_POST["nummer"];
           $g=file("gaestebuch.txt");
           $loeschnummer=$nummer-1;
           unset($g[$loeschnummer]);
           $neuerinhalt=$g;
           $neuerinhalt = implode("\n",$neuerinhalt);
           str_replace("\n\n","\n",$neuerinhalt);
           $d=fopen("gaestebuch.txt","w+");
           fwrite($d,$neuerinhalt);
           fclose($d);
                 }

          Der Eintrag wird gelöscht.

          Müsste doch gehen, oder ?

          Hier ist nochmal der ganze Script.
          Es zeigt einen Fehler in der Zeile 7 an.
          Danke , alex.

          <?php

          $pass="abc";

          if (isset($_POST["nummer"])

          {                      <-------- HIER WIRD EIN FEHLER ANGEZEIGT
           $nummer=$_POST["nummer"];
           $g=file("gaestebuch.txt");
           $loeschnummer=$nummer-1;
           unset($g[$loeschnummer]);
           $neuerinhalt=$g;
           $neuerinhalt = implode("\n",$neuerinhalt);
           str_replace("\n\n","\n",$neuerinhalt);
           $d=fopen("gaestebuch.txt","w+");
           fwrite($d,$neuerinhalt);
           fclose($d);
                 }

          if (isset($_POST["passwort"]))
          {

          if ($_POST[passwort]==$pass)
                {
           ?>
           <form action="pass.php" method="post">
           <input type="text" name="nummer" size="5" maxlength="5">  //Nummer des Eintrages
           <input type="submit" value="Loeschen">
           </form>
           <?php
                }
            else
                {
           ?>
           <b>FALSCH<b>
           <?php
                }
          }

          else
                 {
           ?>
           <form action="pass.php" method="post">
           <input type="text" name="passwort" size="24" maxlength="24">
           <br>
           <br>
           <input type="submit" value="Abschicken">
           </form>
           <?php
                 }
          ?>
          </body></html>

          1. Hallo!

            <?php

            $pass="abc";

            if (isset($_POST["nummer"])

            {                      <-------- HIER WIRD EIN FEHLER ANGEZEIGT

            Zähle einfach mal wieviele Klammern Du öffnest und wieviele davon wieder schließt!

            Grüße
            Andreas

            1. Ja, das mit der klammer war echt bloed.
              Jetzt wird die Datei mit den Eintraegen wenigstens verändert, obwohl auch nicht gerade so, wie ich es wollte.
              Nachdem ein Eintrag gelöscht wird, verdoppeln sich die "\n" , die die einzelnen Einträge in der Datei gaestebuch.txt trennen.
              Den Effekt koennt ihr unter

              http://mitglied.lycos.de/pandaemonium/

              sehen.

              Das Gaestebuch gibt dann einen Normalen, und einen leeren Eintrag nacheinander aus. Die Bedingung die dafuer sorgen sollte , dass keine doppelten "\n"  auftreten funktioniert nicht.
              Wieso ?

              Hier ist der Teil vom Script, der fuer das löschen von Eintraegen verantwortlich ist :

              {
               $nummer=$_POST["nummer"];
               $g=file("gaestebuch.txt");
               $loeschnummer=$nummer-1;
               unset($g[$loeschnummer]);
               $neuerinhalt = implode("\n",$g);
               str_replace("\n\n","\n",$neuerinhalt);
               $d=fopen("gaestebuch.txt","w+");
               fwrite($d,$neuerinhalt);
               fclose($d);
                     }

              1. Hallo alex,

                Ja, das mit der klammer war echt bloed.
                Jetzt wird die Datei mit den Eintraegen wenigstens verändert, obwohl auch nicht gerade so, wie ich es wollte.
                Nachdem ein Eintrag gelöscht wird, verdoppeln sich die "\n" , die die einzelnen Einträge in der Datei gaestebuch.txt trennen.

                mhh... wenn du die Zeilen mit file() ausliest, hängt an jeder Zeile ein Zeilenumbruch dran, und durch das zusammenfügen, mit '\n' werden es dann natürlich zwei.

                http://mitglied.lycos.de/pandaemonium/

                wenn du noch gaestebuch.txt dranhängst, ja :-)
                zu deiner Art die Einträge zu vormatieren, sage ich jetzt mal nichts :-)

                unset($g[$loeschnummer]);

                evtl könnte dir auch die Funktion array_splice()[1] weiterhelfen, dann kannst du dir nämlich das str_replace sparen. also so array_splice($g,$loeschnummer,1);

                $neuerinhalt = implode("\n",$g);

                lass hier mal das \n weg, schreib die Zeile also mal so: $neuerinhalt = implode("",$g);

                aber alles ohne Gewähr und ungetestet :-)

                Grüße aus Nürnberg
                Tobias

                [1] http://www.php.net/manual/de/function.array-splice.php

                1. HURRA HURRA !!
                  ES FUNKTIONIERT ENDLICH !!!!
                  VIELEN DANK TOBIAS UND ANDREAS!!!
                  JETZT KANN ICH ENDLICH MAL MEINE SEITE VOLLENDEN!!
                  DANKESCHOEN FUER DIE HILFE, BESUCHT MEINE SEITE.

                  alex

              2. Hallo!

                {
                $nummer=$_POST["nummer"];
                $g=file("gaestebuch.txt");
                $loeschnummer=$nummer-1;
                unset($g[$loeschnummer]);
                $neuerinhalt = implode("\n",$g);
                str_replace("\n\n","\n",$neuerinhalt);

                Das ist ja schön, aber damit veränderst Du nichts an der Variable $neuerinhalt ;-)

                Außerdem könntest Du Dir wie Tobias richtig sagt die ganze Zeile sparen wenn Du bei implode nicht zusätzliche Zeilenumbrüche einfügst!

                $d=fopen("gaestebuch.txt","w+");
                fwrite($d,$neuerinhalt);
                fclose($d);
                       }

                Grüße
                Andreas

      2. Hallo alex,

        ?> <-- hier schließt Du einen PHP Block

        $g=file("gaestebuch.txt");  <-- hier kommt ein Haufen PHP Code
        [...]                       <-- der nicht interpretiert wird
        fclose($d);                 <--

        <?php <-- hier öffnest Du einen PHP Block

        Gruß,
        dimde