Hallo ich habe vor ein Gästebuch zu erstellen, das ganze klappt auch schon relativ gut. Es gibt keine Fehler im Programm allerdings wenn ich einen eintrag schreib wird der auch angezeigt wenn ich jetzt noch einen schreib wird der vorige gelöscht und nur der aktuellste angezeigt!?! Woran kann das liegen???
Das liegt daran, dass Du die Textausgabe in der eintragen.php machst und die nur die Daten vom letzen Eintrag geliefert bekommt. Ich würde eine etwas andere Architektur wählen.
start.php: Hier werden nur die Einträge angezeigt und ein Link zum Eintragen geliefert.
formular.php: Hier werden die Daten eingegeben und an eintragen.php weitervermittelt.
eintragen.php: Hier wird der Eintrag gespeichert.
Nun wirst Du aber nicht drumherum kommen, die Datei in der start.php auszulesen.
Bin gerade etwas in Eile, aber vielleicht denk ich mir ja morgen mal was aus, bzw. vielleicht hast Du's bis dahin ja auch schon
Also irgendwie is des doof mit dem php entweder er überschreibt es oder er gibt nichts aus! Ich hab des jetzt übrigens in 3 dateien unterteilt aber helfen tut das nicht wirklich!
Also es funktioniert soweit, dass der jetzt alles in dem .txt dokument abspeichert das einzige was ich noch brauche ist der befehl, dass der das da wieder rausliest!!!!
Ich hock jetzt seit 3 stunden dran und der sch... läuft immer noch nich was muss denn in die datei rein die das auslesen soll??? eigentlich doch nur: datei öffnen, daten rauslesen, datei schließen, daten ausgeben oder sowas in der richtung also bei mir geht da gar nix mitlerweile gibt er ja nicht mal mehr was aus früher hat er immerhin noch das aktuellste rausgelesen
Die Daten werden zwar vorher korrekt in die Textdatei gespeichert, aber nur das eine übermittelte Ergebnis wird angezeigt.
Du solltest nur den Eintrag machen, die Daten aber nciht anhand dessen anzeigen sondern aus der Datei auslesen. Das funktioniert ähnlich fwrite, mit fread()
Dann würden alle Daten in der $contents gespeichert werden. Blöderweise musst Du sie dann wieder auseinanderpflücken, da an Deinem Beispiel die komplette gbdok.txt in $contents gespeichert wird. Dazu bräuchtest Du dann Stringmanipulationen (schau einfach mal auf oben genannte Seite, da gibts viele Referenzen).
Gruß Spawn
PS: Hast Du MySQL? Damit geht's auch und wahrscheinlich auch etwas einfacher.
Stimmt vollkommen: du solltest deine Textdatei in einem separaten Skript auslesen. Du musst in deinem Fall die Textdatei wieder zerhacken, um an die Daten zu kommen. Das könnte so aussehen:
In der eintragen.php wird jetzt nach jeder Variable (name, mail....) ein Zeilenumbruch gemacht und in der start.php zeilenweise mit fgets ausgelesen. Einziges Problem: Wenn im Text ein Zeilenumbruch ist, gibts Ärger, da die zweite Zeile dann schon als nächster Name interpretiert wird. Das wollte ich eigentlich durch "fwrite($dh,nl2br($text)."\n");" umgehen, so dass jeder Zeilenumbruch im Text durch ein <br> ersetzt wird, hat aber irgendwie nciht funktioniert und da hab ichs wieder rausgenommen. Vielleicht findest Du dafür ja noch eine Lösung.
Und genau deswegen ist es sinnvoll, für jeden "Datensatz" eine eigene Zeile zu verwenden und die einzelnen Attribute (Name, Mail etc.) per Trennzeichen zu notieren.
Kurz noch bemerkt: das bisher verwendete Komma ist als Separator natürlich totaler ** Netiquette! **, denn in fast jedem Text kommt irgendwie mal ein Komma vor. Besser wäre sowas wie "|" oder auch eine Zeichenfolge, deren Auftretenswahrscheinlichkeit innerhalb eines Textes sehr gering ist.
MySQL. Ist das bei Dir möglich? Das hat einige Vorteile. Besonders wenn Du weiterdenkst und dann vielleicht auch mal einen Eintrag bearbeiten oder sogar löschen willst.
Na das solltest du aber schon wissen, schließlich hast du ja das bisherige Trennzeichen auch selber gesetzt Schau mal in dein 1. Posting in diesem Thread. Dort steht folgende Zeile:
Code:
fwrite($dh,"$namen,$mail,$text\n");
Was wird da das Trennzeichen sein? Wenn du dort etwas änderst, musst du noch den 1. Parameter im explode-Befehl anpassen, denn der bestimmt das Trennzeichen, anhand dessen der String zerhackt wird.
Ansonsten geb ich Spawn Recht: MySQL ist schon zu empfehlen, wenn's dann auch im solche Sachen wie Löschen geht. Ansonsten wird's mit der Textdatei etwas unkomfortabel. Übrigens: Wenn dein Webhoster PHP anbietet, wird sicher auch MySQL dabei sein, denn die beiden Sachen treten häufig als "Gespann" auf.
Also mysql ist nicht vorhanden ist auch nicht so schlimm da ich das ja eh nur hobbymäßig mache bzw. es (noch) nich ins internet stellen werde!
Zu den Trennungszeichen ich habe die Kommas als normales zeichen gesehen ich hab nich gewusst dass die das trennungszeichen sind (bzw. dass ich das verändern kann)
Danke an alle
-------------
edit1:
lustig! Wenn ich mir die textedatei (gbdok) ansehe dann ist sie auf chinesisch oder so geschrieben!
edit2:
was hat es in der einen datei mit dem Punkt auf sich???
fwrite($dh,$namen."\n");
also der punkt nach $namen
sorry wegen den dummen fragen aber ich bin html anfänger und wage mich gerade auf neues terrain!
Der Punkt fungiert in php als Verkettungszeichen. fwrite($dh,$namen."\n"); bedeutet also: schreibe den Inhalt von $namen gefolgt von "\n" (also dem Zeilenumbruch) in die Datei.
Gruß Spawn
PS: Wenn Du php mehr so zum Spaß machst lies Dir am besten mal ein paar Tutorials durch. Da werden viele grundlegende Sachen erstmal erklärt und es ist trotzdem nicht langweilig, da es in php sooo viele Grundlagen nicht gibt (zumindest wenn man schon eine Programmiersprache einigermaßen beherrscht). Obwohl, selber lernen ist eignetlich auch cool. Naja, Du machst das schon
Ja Tutorials wollt ich mir auch mal anschaun nur wollt ich mich vorher noch schnell durch eine kleine Aufgabe durchbeißen! Danke erstmal für die vielen hilfreichen Beiträge!!!!
Nunja, wie gesagt: Eigentlich wollte ich das ganze durch nl2br() umgehen. nl2br oder auch NewLineToBreak sollte eigentlich jeden Zeilenumbruch durch ein <br> ersetzen, was das Problem lösen sollte. Allerdings hat das bei mir nicht funktioniert. Vielleicht habe ich aber auch irgendeinen blöden Fehler gemacht. Der Befehl funktioniert so:
Code:
$ohnenl = nl2br($mitnl);
oder auch:
Code:
echo(nl2br($mitnl));
etc.... Das Problem bei meinem Beispiel war eben, dass ich die Datei mit fgets() ausgelesen habe und das bis zum nächten Zeilenumbruch ausliest. Du kannst allerdings auch Zeichen für Zeichen auslesen und bei einem Trennzeichen Deiner Wahl (zB |) Schluss machen.
Puuh, das war mal schnell aus den Fingern gesaugt, ungetestet, ich hoffe es funktioniert. Vielleicht mal noch ne Erklärung: $art gibt an, was gerade ausgelesen wird, 0 für name, 1 für mail, 2 für text. $s ist die momentan ausgelesene Zeichenkette. Man beginnt also bei $art=0 und $s="" und liest das erste Zeichen. Dann das 2te usw. Wenn dann "|" kommt wird geschaut: $art = 0, also wird $name = $s und $art eins hochgesetzt. Wenn $art dann drei ist, ist alles für einen Eintrag ausgelesen. Es wird ausgegeben (name, email, text) und $art wieder auf 0 gesetzt. Und das solange bin $zeichen = false ist, also die Datei zuende.
Wahrscheinlich gibt es auch einen viiiieeeeel eleganteren Weg und bestimmt auch irgendwo n kleinen Fehler im Programm... ....versuch einfach mal und meld Dich, wenn Du's nicht packst.
ich will jetzt die daten auslesen, so dass er die in die freien felder der tabelle einfügt! Also praktisch als datum usw.! Es geht nur erst ma drum, dass er ne datei ausliest und diese dann aufteilt und richtig einfügt!!! (ich habe die felder schon ausgefüllt sprich bei name steht schon was muss dan halt natürlich weg!)