ich lerne momentan gerade ein bisschen PHP und wollte das Gelernet mal mit einem kleinen
GB-Script anwenden.
Nun habe ich das “Problem”, dass der neue Eintrag (HTML-Code), den ich in eine txt-Datei
speichere nicht oben angehängt wird (Modus “ab”), sondern unten, was bei einem Gästebuch
nicht besonders sinnvoll ist.
Gibt es eine Möglichkeit, die neuen Einträge oben anzuhängen?
ich weiss, man könnte die Textdatei auslesen, in einer Variable speichern und danach am
Anfang den GB-Eintrag hinzufügen, aber das wäre irgendwie sinnlose Arbeit, die zuviel
gemacht würde - das muss doch irgendwie gehen
schade, dass dies nicht so geht, wie ich mir das gedacht hab.
Wär echt jemand so nett und würde einem php-newbe mal einen beispielcode posten, wie man das mit dem einlesen und speichern dann machen würde? wär echt cool von euch
Für ein Gästebuch wäre es meiner Meinung nach ohnehin besser das ganze in eine DB zu schreiben. Notfalls auch in eine dateibasierte SQLite.
Dort lässt sich viel leichter sortieren, ändern, löschen,…
Na ja, eine komplette DB muss es ja nun nicht sein.
Ich hatte sowas mal mit mehreren Textdateien gelöst: für jeden Eintrag eine.
Da diese dann als Dateinamen “durchnummeriert” wurden, war auch die Sortierung kein Problem mehr…
In eine (einzige) Textdatei würde ich die Einträge aber nicht schreiben lassen - das gibt nur unnötige Probleme (z.B. beim nachträglichen Editieren, Moderation ist so auch nicht ohne weiteres möglich usw.).
Gästebucheinträge brauch man weder moderieren noch editieren.
Das einzige was vorhanden sein sollte ist eine Löschmöglichkeit für den Admin der Seite.
Alle Einträge in einer Textdatei ist durchaus Möglich, und (meiner Meinung nach) wesentlich leichter handzuhaben, als wenn man jeden Eintrag extra einlesen muss.
Alternativ kann man (wenn man sich damit auskennt), die Daten im Form einer XML-Struktur mit DOMDocument speichern und mit SimpleXML oder DOMDocument wieder auslesen.
eigentlich möchte ich ja nur meine bisherigen kenntnisse anwenden und ein gästebuch
schreiben - ohne datenbanken (das will ich absichtlich, da ich noch kein mySQL kann) und am
liebsten auch ohne jetzt viele funktionen lernen zu müssen, denn die kommen später in
meinem buch dran.
wahrscheinlich werde ich dann - je nachdem was im buch dann kommt - das gästebuch so
verbessern, bzw. verändern, dass man es später in einer db speichert abrufen editieren
löschen oder bestätigen kann, aber ich möchte gerne mal klein beginnen
Das würde ich nun also doch gerne machen - zumindest momentan. Nur leider weiss ich nicht
genau, wie man eine Datei in eine Variable einliest und danach als Array umwandelt
(logischerweise mit dem neuen Eintrag). Ein klitzekleines Codebeispiel und ich bin glücklich
für den Rest vom Tag
[quote]Gästebucheinträge brauch man weder moderieren noch editieren.
Das einzige was vorhanden sein sollte ist eine Löschmöglichkeit für den Admin der Seite.
[/quote]
Nur am Rande bemerkt von meinen Leuten würde keiner ein solches Gästebuch einsetzen, wenn man nichts editieren kann.
Darüber hinaus würden meine Leute auch ein Gästebuch mit diesen Fähigkeiten nicht verwenden, die sind ganz andere Sache gewöhnt nur um Zeit zu sparen.
Daten in Datei schreiben: fputs oder file_put_contents
Damit also Dateiinhalt in Variable, Variableninhalt an neuen
Inhalt anhängen, die Kombination dann wieder abspeichern.
Entsprechend dann sinnvoll sperren und entsperren, damit bei
mehrere gleichzeitigen Zugriffen einer warten muß, bis der andere
fertig ist.
Also ganz ehrlich, ich würde vorher mysql lernen, dann ein ganz einfaches Gästebuch schreiben, und anschließend verbessern z.B. mit Smileys, danach ne Löschfunktion…
Textdateien verwende ich eigentlich nur noch für Counter, dass man da in der einen den Counterstand speichert, und in der anderen die IPs.
danke mal an alle, die mir da jetzt etwas geschrieben haben - ich werd mal schauen, was ich
da mache(n kann).
das gästebuch würde ich momentan eh nicht öffentlich machen, d.h. einfach für mich lokal so
als anwendung des gelernten. denn sonst funktioniert eigentlich der grösste teil schon.
im moment mache ich es so, dass wenn der besucher einen eintrag absendet, die
angegebenen informationen als html-code in einer variable gespeichert werden und danach mit
fwrite in die textdatei geschrieben wird. grob gesagt wärs das eigentlich schon, dazu kommen
dann noch die verhinderung von php / html code und ein spamschutz, der noch nicht ganz fertig ist.
ok leute, konnte das ganze lösen, indem ich das mit file_get_contents eingelesen und mit dem
neuen eintrag zusammengeführt hab. funktioniert nun sogar so, wie ich das wollte.
ich werde das script wahrscheinlich immer etwas ausbessern, je besser meine kenntnisse in
php sind, d.h. es nicht von anderen leuten schreiben lassen, ohne dass ich etwas verstehe.
Mir hat es am Anfang immer gut geholfen, wenn ich mir Codes von anderen angesehen hab…so kannst du zB MySQL-Befehle einfach kopieren, und musst sie noch nicht verstehen
<?php
mysql_connect("localhost", "user", "pass");
mysql_select_db("user");
$num_page=10;
function get_posts($begin=0)
{
global $num_page;
$sql = "SELECT author, mail, date, post FROM guestbook ORDER BY id DESC LIMIT $begin, $num_page";
$sql = mysql_query($sql) OR
die(mysql_error());
$return = array();
while($row = mysql_fetch_assoc($sql))
$return[]=$row;
return $return;
}
Das wäre der komplette Teil zum auslesen, und du hast alle Daten bequem in einem Array
MySQL-Tabelle: id, author, mail, date, post
ID ist PRIMARY (schnelle sortierung)
bequemer (und schneller) gehts meiner meinung nach nicht
Genau darum geht es ihm ja hier, sich da langsam durchzulernen. Beispielcodes gibbt es in dem PHP Handbuch z.B. ohne Ende.
Was Mysql betrifft gibt es bequemere Dinge, auch wenn das hier über die Frage hinausschiesst:
$result=$db->GetArray("SELECT author, mail, date, post FROM guestbook ORDER BY id DESC LIMIT ?,? ",array($begin, $num_page));
Da liegt das Ergebnis gleich als Array vor oder false wenn keines vorhanden ist, gleichzeitig werden ? escaped wenn notwendig und das Resultset von Mysql ist bereits frei gegeben.
Der Fragesteller wird bald soweit sein, das er sich mit angebotenen Scripten und Klassen beschäftigen wird. Als sollten wir es dabei belassen.
dein Code ist für eine PEAR-Klasse geschrieben (“DB”), von der Verwendung rate ich ab, da PEAR nicht auf bplaced-Servern installiert ist, und die PHP-Version zu installieren einfach nur überflüssig ist
<?php
mysql_connect("localhost", "user", "pass");
mysql_select_db("user");
$num_page=10;
function get_posts($begin=0)
{
global $num_page;
$sql = "SELECT author, mail, date, post FROM guestbook ORDER BY id DESC LIMIT $begin, $num_page";
$sql = mysql_query($sql) OR
die(mysql_error());
$return = array();
while($row = mysql_fetch_assoc($sql))
$return[]=$row;
return $return;
}
[/code][/quote]
Von einem Array ins andere zu packen, ist nicht gerade sind der sache.
Sinnvoll ist es so schon mal gar nicht.
Blöde Idee.
Wenn man es in einer Datei speichern will, ist es viel einfacher, das ganze in einer PHP-Datenstruktur abzubilden und die direkt zu serialisieren und dann in einer Datei zu speichern.