Computerhilfen.de Logo
Forum
Tipps
News
Frage stellen

PHP eingabeformular mit txt-dateien...!

Ich bin grad erst mit PHP angefangen!

Ich hab ein script mit einem formular(dass die einträge auf eine .txt datei speichert),
man gibt einen link und dazu die beschreibung(ist für eine intranetseite)!

und ich will,
   - dass die neusten einträge ganz oben stehen
   - und dass man die einzelnen einträge (über ein button oder so...) wieder ins formular bringt(zur bearbeitung) und wieder
     speichert
   - und noch dass man einzelne einträge löschen kann

--------------------------------------------------------------------------------
hier mein script:


<?php
$action = $_GET["action"];
$beschreibung = $_GET["beschreibung"];
$link = $_GET["link"];
if ($action == "Senden")
   {
      if ($beschreibung == "" || $link == "http://")
      {
         echo "<b>Du hast nicht alle Felder ausgef&uuml;llt !</b><br>";
         echo "<a href=\"eintragen.php\"> zur&uuml;ck!</a><BR><BR><BR>";
      }
      else
      {
         $datei =  fopen("gaestebuch.txt","a");
                  
         $datum = date("d.m.y - H:i");
         $eintrag ="$datum | $beschreibung | <a href=\"$link\" target='new'>$link</a>\n";
          
         fputs($datei,$eintrag);
         fclose($datei);
         echo "Eintrag Erfolgreich! <br><a href=\"eintragen.php\"> zur&uuml;ck!</a><BR><BR><BR>";
      }
   }
   else
   {
?>
      <FORM action="eintragen.php" method="get">
      <TABLE BORDER="0">
         <TR>
            <TD WIDTH="130"><FONT SIZE="4" COLOR="black">Beschreibung:</FONT></TD>
            <TD> <input type="text" name="beschreibung" size="24"> <BR></TD>
         </TR>
            <TD WIDTH="130"><FONT SIZE="4" COLOR="black">Link:</FONT></TD>
            <TD> <input type="text" name="link" size="24" value="http://"> <BR></TD>
            <TD ROWSPAN="2"><INPUT TYPE="submit" name="action" value="Senden"></TD>
         </TR>
      </TABLE>
      </FORM>
<?php
   }
?>
<BR><BR>
<?PHP
$datei = fopen("gaestebuch.txt","r");

   echo '<div align="center">
         <TABLE border="1">
         <tr>
           <td width="120" bgcolor="gray"><b>Datum</b></td>
           <td width="275" bgcolor="gray"><b>Beschreibung</b></td>
           <td width="500" bgcolor="gray"><b>Link</b></td>
         </tr>';
   
while (!feof($datei))
   {
    $zeile = fgets($datei,250);
    $daten = explode(" | ", $zeile);
    echo " <tr>
         <td bgcolor='silver'>$daten[0]</td>
         <td bgcolor='silver'>$daten[1]</td>
         <td bgcolor='silver'>$daten[2]</td>
         </tr>";
   }

   echo '</table>';

fclose($datei);
?>

--------------------------------------------------------------------------------

wäre nett, wenn jemand mir bei meinen problemen weiterhelfen würde!
schon mal danke!


Antworten zu PHP eingabeformular mit txt-dateien...!:

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Dein Skript is so geschrieben, dass es bei nichtexistenter gaestebuch.txt in einer Endlosschleife festhängt. Solltest du noch korrigieren ;)

Mit der Sortierung nach Datum macht sich das besser, wenn du UNIX-Timestamps abspeicherst. Die lassen sich besser vergleichen und absolut simpel in ein "lesbares" Datum zurückverwandeln.
Die Sortierung ist dann wieder eine andere Geschichte... mehrdimensionale Arrays evtl. (was mir spontan so einfällt ;) )?

Was das Editieren und Löschen angeht: das kannst du, wenn du so weit gekommen bist, auch selber schaffen. Musst eben sehen, wie du das am besten handhaben kannst. Entweder Extra-Skript oder einen großen if-Block im aktuellen Skript :)

greez 8)
JoSsiF

Hey...
wie meinst du das mit dem in der Wndlosschleife festhängen? die *.txt datei exestiert ja bereits!
Das script ist so wie das da unten steht fehlerfrei gelaufen! hatte keine fehlermeldungen!
wie meinst du das mit mehrdimensionalen Arrays? wie hast dir das gedacht?

Das mit dem löschen und Editieren hat sich auch soweit erledigt! hab mir eine andere möglichkeit ausgedacht, die eigentlich klappen müsste!

nur das mit der sortierung! des ist für mich ein räzel...hab schon das ganze Inet durchsucht und nichts hat erfolg gebracht! ...oder ich hab was falsch gemacht!

MFG bluecap

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Hi |

Wenn bei dir die *.txt schon existiert hat, dann hast du von der Endlosschleife nichts mitbekommen. Die entsteht aber, wenn z.B. jemand dein Gästebuch verwenden möchte, die Datei aber vorher nicht angelegt hat. Ist kein großes Problem, aber schlechter Programmierstil. Dieses Problem sollte man abfangen, und das geht ja recht einfach ;)

Vergiss das mit den mehrdimensionalen Arrays. Wenn die neuesten Einträge ganz oben stehen sollen, reicht es ja, wenn du die neuen Einträge an die erste Stelle in der Datei schreibst.
Zum Prinzip: Datei öffnen, Inhalt auslesen und in Variable zwischenspeichern, Datei schließen, Datei wieder öffen zum Schreiben (Option a), neuen Content und alten Content zusammenschmeißen und dann reinschreiben, Datei wieder schließen. Das war's ;)

Viel Erfolg :)

greez 8)
JoSsiF

Cool...danke das mit der sortierung klapp einwandfrei!

muss das mit dem abfangen der endlosschleife sein? klapp doch alles wunderbar!!!

ach ...was hab ich denn da geschireben?!? wie macht man das denn ohne die schleife aber mit dem aufteilen der arrays?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Moin |

Also erstma: das mit der Endlosschleife musst du nicht unbedingt abfangen. Wenn das Skript sowieso nur für dich ist, dann passt das schon ;)

Naja und mit der Sortierung über Arrays: Die Schleife brauchst du irgendwie schon, weil sich nur mit Schleifen Arrays komfortabel behandeln lassen.
Die Sortierung nach gewissen Elementen bekommst du, wenn du z.B. alle Einträge in ein Array einliest und dann jedes Element wieder ein Array ist. Dann schau dir mal array_multisort() an, und das Problem sollte so gut wie gelöst sein :)

greez 8)
JoSsiF

OK..egal das is nicht so wichtig!!!
wie kann man arrays(z.B. $inhalt[$id]) so im "form action=..." befehl versenden, dass alle arrays ankommen???

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
OK..egal das is nicht so wichtig!!!

Du hast aber danach gefragt!  >:(  Warum fragst du, wenn es nicht wichtig ist??

wie kann man arrays(z.B. $inhalt[$id]) so im "form action=..." befehl versenden, dass alle arrays ankommen???

In Formularen werden Daten immer als ein Paar von Bezeichner und Wert versendet. Das heißt: du müsstest dein Array vollkommen zerlegen und jedes Element einzeln übergeben, z.B. mit Hidden Fields. Und das hört sich nicht nur ** Netiquette! **ig an, das ist es auch.

Du kannst die Übergabe machen, indem du das Array vorher mit serialize() in einen Binärstring umwandelst. Dann aber nur mit POST übertragen, sonst wird's in den meisten Fällen zu lang für eine GET-Übertragung.

Mal nebenbei: was hast du mit der Sache überhaupt vor? Vielleicht (sicherlich) gibt's dafür eine andere Lösung.

greez 8)
JoSsiF

ALSO...
ich mache eine seite, die geschützt ist mit htpasswd, und in der der admin seine links mit beschreibung in einer tabelle speichert! diese links sollen auch veränderbar sein falls sie nicht mehr aktuell sind oder anderes passiert ist. ich hab mein script so weit erweitert das möglich sein sollte! nur das problem ist dass ich die arrays nicht nach dem senden einzelnt empfangen kann...



$wechsel = $_POST["wechsel"];

   if($uberschreiben == " Speichern ")
      {
      $nr = 0;
      $arrayid = 0;

      $delete = "";
   
      # löschen des alten inhaltes der *.txt datei
      $datei = fopen("favoriten.txt","w");
      fputs($datei,$delete);
      fclose($datei);

      while($nr != $zeilen)
         {
         if($beschreibung["$arrayid"] != "" || $link["arrayid"] != "http://")
            {
            $link['$arrayid'] == $link2;
            $eintragN = '$datum["$arrayid"] | $beschreibung["$arrayid"] | <a href=\"$link2\" target="new">$link["$arrayid"]</a> | $link["$arrayid"]\n';

            # neubeschreiben der *.txt datei
            $datei =  fopen("favoriten.txt","a");
            fputs($datei,$eintragN);
            fclose($datei);
            }

            else
            {
            $nr++;
            $arrayid++;
            }
         }

      echo "<div align='center'>
           <BR><font face='Arial' color='#008080' size='3'>&Auml;nderung war Erfolgreich!</font>
           <form action='eintragen.php'>
           <input type='submit' name='zuruck' value='zur&uuml;ck'>
           </form>
           </div>";
      }

                  if($wechsel == "  wechseln  ")
                     {
                     # ausgabe oder äderungsmodus auswahl!
                     echo '<form action="eintragen.php" method="post">
                           <div align="right">
                            <table border="0">
                              <tr>
                              <td><input type="submit" name="abbrechen" value="Abbrechen"><td>
                             </tr>
                           </form>';

                     # tabellenkopf ausgeben
                     echo '<div align="right">
                           <table border="1">
                           <tr>
                             <td width="120" bgcolor="gray"><b>Datum</b></td>
                             <td width="275" bgcolor="gray"><b>Beschreibung</b></td>
                             <td width="500" bgcolor="gray"><b>Link</b></td>
                           </tr>';

                     
                     # textdatei öffnen
                     $datei = fopen("favoriten.txt","r");
                     echo"<form action='eintragen.php' method='post'>";

                     # auslesen jeder zeile und die arrays teilen
                     $id = 0;
                     while (!feof($datei))
                        {
                         $zeile = fgets($datei,250);
                         $daten = explode(" | ", $zeile);

                        # ausgeben der gewünschten daten in eine tabelle mit text-feldern
                         echo" <tr>
                              <td bgcolor='silver'><input type='text' size='15' name=datum['$id'] value='$daten[0]'></td>
                              <td bgcolor='silver'><input type='text' size='41' name=beschreibung['$id'] value='$daten[1]'></td>
                              <td bgcolor='silver'><input type='text' size='78' name=link['$id'] value='$daten[3]'></td>
                              </tr>";
                        $id++;
                        }

                     $zeilen == $id;
                     echo' </table>
                          <table align="right" border="0">
                           <tr>
                            <td><input type="submit" name="uberschreiben" value=" Speichern "><td>
                           </tr></form>
                          </table>';

                     fclose($datei);
                     }
 
                  else
                     {
                     # ausgabe oder äderungsmodus auswahl!
                     echo '<form action="eintragen.php" method="post">
                           <div align="right">
                            <table border="0">
                              <tr>
                              <td><input type="submit" name="wechsel" value="  wechseln  "></td>
                             </tr>
                           </form>';

                     # tabellenkopf ausgeben
                     echo '<div align="center">
                           <table border="1">
                           <tr>
                             <td width="120" bgcolor="gray"><b>Datum</b></td>
                             <td width="275" bgcolor="gray"><b>Beschreibung</b></td>
                             <td width="500" bgcolor="gray"><b>Link</b></td>
                           </tr>';


                     # textdatei öffnen
                     $datei = fopen("favoriten.txt","r");

                     # auslesen jeder zeile und die arrays spliten
                     while (!feof($datei))
                        {
                        $zeile = fgets($datei,250);
                        $daten = explode(" | ", $zeile);

                        # einfügen der gewünschten daten in die ausgebetabelle
                        echo " <tr height='27'>
                              <td bgcolor='silver'>$daten[0]</td>
                              <td bgcolor='silver'>$daten[1]</td>
                              <td bgcolor='silver'>$daten[2]</td>
                              </tr>";
                        }
                     fclose($datei);
                     # tabellenende
                     echo '</table>';
                     }



hab einfach den ganzen teil reinkopiert...! die *.txt datei heißt jetzt "favoriten.txt"!!

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button
hab einfach den ganzen teil reinkopiert...!

Etwas ZU EINFACH, meinst du nicht?

135 Zeilen Quellcode posten beschreibt bestimmt nicht dein Problem!

sobald den submit butten überschreiben (zeile 88) drückt sendet er die input-felder(76-80) mit inhalt nach oben zum "if($uberschreiben == " Speichern ")" zeile 3! die namen der inputfelder haben jeweils eine id in klammern hinter, so dass sie unterschiedlich sind!

das problem ist das ich nicht alle inputfelder empfange...
sonst hab ich des immer mit: $var = $_POST["var"]; (siehe zeile 1)
wie soll ich des mit den arrays machn????

so jetz is mein problem deutlich! oder noch nicht?

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

Also:

Erstmal könnten unter Umständen Probleme auftauchen, weil du kein valides HTML verwendest. In deinen Input-Feldern fehlen beim Attribut name dahinter bei der Wertzuweisung die Anführungsstriche. Was nicht weiter problematisch ist, aber trotzdem nicht W3C-konform, sind einfache Hochkommata (nur so als Hinweis).

An deine Parameter kommst du immer noch mit $_POST, allerdings anders:

Wenn du z.B. ein Array-Element link[2] überträgst, dann greifst du nach Abschicken des Formulars drauf zu mit $_POST['link[2]'].

Falls es der Link ist, der nicht so richtig will, dann guck dir nochma den Array-Index an. Ich bin nicht voll durchgestiegen, aber ich weiß nicht, ob die 3 richtig ist. Kommt darauf an, was jetzt in deiner favoriten.txt gespeichert wird.

greez 8)
JoSsiF

kannst mir sagn warum der bei diesem teil unaufhoert dateien einträgt obwohl ich noch nicht mal den befehl erteilt hab diesen if befehl zu machen?

   if($uberschreiben == "Speichern")
      {
      $nr = 0;
      $arrayid = 0;

      $delete = "";
   
      # löschen des alten inhaltes der *.txt datei
      $datei = fopen("favoriten.txt","w");
      fputs($datei,$delete);
      fclose($datei);

      while($nr <= 6)
         {
         if($beschreibung[$arrayid] != "" || $link[$arrayid] != "http://")
            {
            $linkI = $link[$arrayid];
            $eintragN = "$datum[$arrayid] | $beschreibung[$arrayid] | <a href=\"$linkI\" target='new'>$link[$arrayid]</a> | $link[$arrayid]\n";

            # neubeschreiben der *.txt datei
            $datei =  fopen("favoriten.txt","a");
            fputs($datei,$eintragN);
            fclose($datei);
            }

         else
            {
            $nr++;
            $arrayid++;
            }
         }

      echo "<div align='center'>
           <BR><font face='Arial' color='#008080' size='3'>&Auml;nderung war Erfolgreich!</font>
           <form action='eintragen.php'>
            <input type='submit' name='zuruck' value='zur&uuml;ck'
           </form>
           </div>";
      }

hey...
das Problem miit der schleife ist gelöst...
wie kann man eine variable ($beispiel) übergeben ohne ein inputfeld zu erstellen!?!?

mfg bluecap

Hat dir diese Antwort geholfen?

Danke ButtonHilfreiche Antwort Button

An eine URL anhängen?


« variablen übergabehilfe kann keine bilde rmehr uploaden »
 

Schnelle Hilfe: Hier nach ähnlichen Fragen und passenden Tipps suchen!

Fremdwörter? Erklärungen im Lexikon!
Grundstrich
Der Begriff des Grundstrichs im Bereich der Typografie, bezeichnet den senkrechten Strich der Buchstaben. Bei Schriftarten mit variabler Strichstärke, wie zum Beispi...

Haarstrich
Der Begriff Haarstrich stammt aus dem Bereich der Typographie. Bei Schriften, wie zum Beispiel der Antiquaschrift mit unterschiedlichen Strichstärken, wird zwischen ...

PHP
PHP steht für Personal Home Page und ist eine Skriptsprache die meist verwendet wird zur dynamischen Erzeugen von Internetseiten. PHP zeichnet sich durch die weite D...