Jump to content
Sign in to follow this  
puchne

PHP-Gästebuch ohne MySQL aber mit "x Einträge pro Seite"

Recommended Posts

Hallo,

Bisher habe ich nur rudimentäre Kenntnisse von PHP,

gerade so habe ich ein Gästebuch hinbekommen, dass auch soweit funktioniert.

Es bedarf keiner Datenbank-Anbindung

(Formulardaten werden gelesen und in eine html-Datei geschrieben).


Nun ist das Problem das alle Einträge in eine HTML-Datei gespeichert werden.

Allerdings hätte ich gern das immer nur 5 Einträge pro Seite angezeigt werden.

Ist das möglich ohne DatenbanK? Und wenn ja, wie?


Wär klasse wenn mir hier jemand helfen könnte.

MfG puchne

Share this post


Link to post
Share on other sites
Guest

Wie so schreibst du dir das nicht in eine Textdatei? Da könntest du auch in einem gewissen Rahmen eine Suche und Auflistung realisieren. Das Anzeigen von HTML stelle ich mir hier sehr schwierig vor, da du eine Art Nummerierung etc. realisieren müsstest.



kOOni

Share this post


Link to post
Share on other sites

ist es evtl. auch in einer CSV-Datei realisierbar?

Mein Problem ist, nehmen wir mal an ein Eintrag wird in eine Zeile einer CSV-Datei gespeichert und jeder weitere Eintrag in der nächsten Zeile etc.


Nun habe ich meine erste PHP-Datei die ausliest Zeile 1-5 in der CSV Datei, dann die nächste PHP-Datei die ausliest Zeile 6-10 usw. - da muesste ich ja jeder PHP-Datei einzeln erstellen ...

Share this post


Link to post
Share on other sites
Guest

Mir fällt gerade was ein: Du könntest das auch über PHP-Dateien lösen. Lege einfach eine Datei für den Inhalt des Gästebucheintrages und eine für die zusätzlichen Infos zum dem Eintrag an.


In der Datei erstellst du dann einfach einen Array. Kommt ein neue Beitrag hinzu, dann editierst du die Datei per PHP und fügst einfach einen neuen Arrayeintrag zu, bspw:

 


 

Dies müsstest du dann alles über die Dateifunktionen von PHP realisieren. Wenn du dann das Skript ausführst, welches die Einträge anzeigt, dann fügst du einfach die Dateien mit den Arrays ein und kannst dann einfach auf die Inhalte zugreifen:

 


 

Ist mir gerade so in den Sinn gekommen, ich hoffe, du kannst damit was anfangen :-) Bei näheren Fragen, einfach posten.



kOOni

Share this post


Link to post
Share on other sites
Guest

Was mir grad noch einfiel für die Datei mit den Zusatzinformationen:

 




Die "0" müsste man dann auch bei dem Eintraege-Array anfügen, damit sie auch valid sind, und damit kein Datenmüll am Ende rauskommt.


Dateifunktionen findest du auf hier gut erklärt.



kOOni

Share this post


Link to post
Share on other sites

Das heisst jeder Eintrag besteht aus einer anzahl von arrays?

Also $Eintrag[0]=name

$Eintrag[1]=Text

$eintrag[3]=e-mail


usw.?


Aber wie realisier ich das seiten erzeugt werden die ausgeben:

Seite1: Eintrag 1-5

Seite2: Eintrag 6-10 usw. ?

Share this post


Link to post
Share on other sites
Guest

Nein.


Das

 




muss pro Eintrag ( ! ) so heissen:

 




Und pro Eintrag änderst du die "0" dann in eine "1". Dann in eine "2", dann "3".. ok?


Das Anzeigen mit den 5 Datensätzen schreibe ich dir jetzt nicht auf. Aber ich gebe dir eine Hilfestellung:


- alle Einträge haben eine Nummer, die bei allen gleich ist (siehe oben, "0")

- eine for-Schleife zählt soweit, wie man will... (in deinem Fall bis ...)


;-)


kOOni

Share this post


Link to post
Share on other sites

Naja gut, aber wie wird die nächste Seite generiert?

Da hängt nämlich mein Problem ...


Natürlich könnte ich eine PHP-Seite erstellen die ausliest: Eintrag 1-5

Dann die nächste PHP-Seite die ausliest: Eintrag 6-10

Dann noch eine PHP-Datei ....


Aber das muss doch auch automatisch funktionieren ...?

Share this post


Link to post
Share on other sites
Guest
Naja gut, aber wie wird die nächste Seite generiert?

Da hängt nämlich mein Problem ...



Ahh.. die Hänger ;-) Das kenne ich gut :-)

 

 index.php?begin=6&end=10

 

Wenn man unten mit Links arbeitet, dann einfach ein PHP_SELF rein. Und alles dynamisch aus den Dateien laden ;-) Theoretisch könnteste dein Gästebuch auf 2, 3 Seiten laufen lassen (ohne die Einträge.php mitgezählt)


Probiere mal und poste auch mal Quellcode, denn sonst bekommste von mir keinen mehr ;-):)



kOOni

Share this post


Link to post
Share on other sites

ok, also hier mal ein ganz simpler (wirklich sehr simpler) code: ;)


Also: Es gibt eine html-seite mit 3 Formularfeldern (name, email und nachricht),

diese werden von der speichern.php ausgelesen und in die eintrage.csv gespeichert:


(speichern.php)


Nun die Datei die die Einträge ausliest:



Gaestebuch


");
                                        print("email:");
                                        print($data[1]);
                                        print("");
                                        print("nachricht:");
                                        print($data[2]);
                                        print("");
                                        print("");
                                        print("");
                                        $data=fgetcsv($datei,$dateigroesse,";");
                                        }
                    }
        }
?>




Das funktioniert soweit ... aber viel weiter komm ich nicht

(hab den ganzen SchnickSchnack, zB Eintragskontrolle, Tabellenausgabe etc. weggelassen, es geht mir ja nur darum das nur eine bestimmte Anzahl von Einträgen angezeigt werden).


Wie gesagt, ich hab gerade erst mit PHP angefangen, also bitte machs mir einfach! ;)

Share this post


Link to post
Share on other sites
Guest
Wie gesagt, ich hab gerade erst mit PHP angefangen, also bitte machs mir einfach! ;)


Du willst ja etwas lernen, deshalb mach ich es dir extra etwas schwerer ;-)


Also erstmal hast du meinen Arrayvorschlag nicht befolgt. Warum nicht? Wiso willst du das über diese CVS Datei durchdrücken? (Ist keine Drohung, nur eine Frage :) ) Eines vorneweg, ich erkläre dir es über meine Arrayvariante. Ich habe sie noch etwas umgestellt, denn nun nehmen wir für alle Einträge eine Datei: Eintraege.php.


Das

 

 



mache mal zu

 

 



So. Überall, wo jetzt sowas hier "[...]" steht, musst du noch Code einfügen, damit es funktioniert.

Dein nächster Schritt wird nun sein, dass du es schaffst, die Arrays in die Datei zu speichern. Aber vorsicht, falls du dort schon was drin hast, dann müssen die neuen Datensätzen hinten drangehangen werden. ;-) Bei deiner Lösung überschreibst du immer gleich alles, das ist falsch.

Denke daran, du erststellst hier per PHP eine PHP-Datei mit der du dann ganz normal arbeitest!


So, du bist wieder dran :)



kOOni

- Editiert von e86 am 22.10.2005, 10:29 -

Share this post


Link to post
Share on other sites

Naja, hab hier in meinem PHP-Buch diese Arrays anhand der CVS-Datei erklärt bekommen, wahrscheinlich deswegen ;) - in CSV-Datei habe ich ja ähnlich wie bei der mySQL-Datenbank Zeilen und Spanten, das heisst er weißt den Werten automatisch Arrays zu:

...................Name.......E-mail.........Nachricht..

Zeile1: data[0] data[1] data[2]

Zeile2: data[0] data[1] data[2]

usw.


Jede neue Zeile wird dabei durch

$data=fgetcsv($datei,$dateigroesse,";");


ausgelesen...


ok, mein problem war glaub ich folgendes:

$Eintraege [0] ['name']

- kann man einer Varianblen auch zwei Arrays zuteilen?

Also einmal von 0-x und dann nochmal von "name"-"nachricht" ..?

Wenn ja, versteh ich das allmählich ;]


Was ich allerdings nicht verstehe: Warum in eine Textdatei speichern?

Wie kann ich denn Arrays aus einer Textdatei auslesen - wo ich doch mit fread() immer die ganze Datei auslese (ich beim auslesen aber immer jeweils nur ein oder zwei Arrays haben will um die an bestimmte Stellen zu platzieren ...) - also jetzt bei der Auslesedatei ...


p.s: hier ist übrigens mal die cvs-variante:

.../auslesen.php

.../eintrag.html

(Der Haken ist nur, dass man keinen Umbruch tätigen darf im Nachrichten-Fenster, da sonst eine neue Zeile in der CSV-Datei angelegt wird und alles durcheinander kommt ... :(

Share this post


Link to post
Share on other sites
Guest
Was ich allerdings nicht verstehe: Warum in eine Textdatei speichern?

Das mit der Textdatei war natürlich Schwachsinn von mir. Entschuldige :-)


Eines noch vorneweg. Du kannst das am Ende ja so umsetzen, wie es dir in den Schritt passt. Ich würde es über eine Array-Lösung machen.


- kann man einer Varianblen auch zwei Arrays zuteilen?


Jo, sogar nochmehr. Aber dann ist es keine Variable mehr, sondern ein Array. Denn Variablen haben nur einen Wert ;-)

 


 

Scheint so, als müsstest du noch etwas Theorie pauken ? :) Ich glaube, das müsste so hinhauen, da er erst zur Ausführung bestimmt, welcher Datentyp das jeweilige Feld ist. Es dürfte ihm also Puller sein.


Wie kann ich denn Arrays aus einer Textdatei auslesen - wo ich doch mit fread() immer die ganze Datei auslese


Garnicht, weil ich es nicht so gesagt habe ;-) Du liest die Datei überhaupt nicht ein, sondern includierst sie und arbeitest mit ihr, wie mit einer ganz normalen PHP-Datei. Mit deiner CVS Variante würde ich nicht klar kommen, da sie mir zu unübersichtlich und zu arbeitsaufwendig wäre. Ich bin da etwas faul. Bei der ArrayVariante geht es sehr schnell. Du musst dir das hier nur nochmals richtig durchlesen, wenn du sie weiterverfolgen möchtest.


Der Haken ist nur, dass man keinen Umbruch tätigen darf im Nachrichten-Fenster, da sonst eine neue Zeile in der CSV-Datei angelegt wird und alles durcheinander kommt ...


Meinst du jetzt einen Umbruch im Sinne von einem "Enter" bzw. "\n" ? Wenn ja, dann hast nen Problem. Denn jeder, der dir postet, schreibt mehr, als nur ne Zeile. Selbst die nervigen Werbewebsiten sind oft länger als ne Zeile ;-)



kOOni

Share this post


Link to post
Share on other sites

ah ok,

also statt dem hier:

$datei = fopen("eintraege.txt","a"); 


verwende ich die PHP-Datei:

$datei = fopen("eintraege.php","a")


um sie dann wieder per include einzulesen?


Also in der eintraege.php steht es dann in etwa so:

$Eintraege [0] ['name'] ="name_ab";

$Eintraege [0] ['email'] ="email_ab";

$Eintraege [0] ['nachricht'] ="nachricht_ab";

$Eintraege [1] ['name'] ="name_cd";

$Eintraege [1] ['email'] ="email_cd";

$Eintraege [1] ['nachricht'] ="nachricht_cd";

...


das wird durch den include-Befehl in der ausgabe.php eingelesen und ausgegeben

während die eingabe.php die Forumulardaten gelesen werden und anschließend in die eintraege.php geschrieben werden ...?


So in etwa, wenigstens...? :(

Share this post


Link to post
Share on other sites
Guest
um sie dann wieder per include einzulesen?

Jo. Dann kannst du sie nämlich einfach per for-Schleife ausgeben. Einfach noch mit HTML formatieren. Fertig. (Vorsicht: includen, nicht einlesen im Sinne von fread etc.!)


das wird durch den include-Befehl in der ausgabe.php eingelesen und ausgegeben

während die eingabe.php die Forumulardaten gelesen werden und anschließend in die eintraege.php geschrieben werden ...?


Genau. Aber Vorsicht beim Einlesen. Du musst eine vollwertige PHP Datei erstellen. Nutze dabei "\". Dabei machst du die "$" *ungültig*. Das heisst, er schreibt dir dann nicht den Inhalt der Variable X, sondern wirklich "$Variablenname" in deine Datei.


So in etwa, wenigstens...?

Genau. Du hast mich verstanden :D


kOOni

Share this post


Link to post
Share on other sites

ok, werd mich nochmal dransetzen und es auf die Art versuchen -

bis was schiefgeht ;-)


Danke aufjedenfall für die kompetente Hilfe! ]

Share this post


Link to post
Share on other sites
Guest
ok, werd mich nochmal dransetzen und es auf die Art versuchen -

bis was schiefgeht


Na ich hoffe doch, dass sich meine Arbeit gelohnt hat und du zu einem verwertbaren Ergebnis kommst. Schiefgehen wird auf jeden Fall wieder was (Murphy sei dank ;-) ), aber dann kommste einfach wieder hierrein und postest, denn ...



Danke aufjedenfall für die kompetente Hilfe! ]

... hier werden sie geholfen ;-)



kOOni

Share this post


Link to post
Share on other sites

hmmm, irgendwas stimmt da nicht.

Er schreibt mir jetzt nur "Array" in die eintraege.php ...


Hier mal der Quelltext der speichern.php:

 


Wenn ich nun in der eintrag.html meine Daten an eintraege.php schicke schreibt die mir nur "array" in die speichern.php ...

Share this post


Link to post
Share on other sites
Guest
hmmm, irgendwas stimmt da nicht.


Ich sagte ja, musst bestimmt noch etwas Theorie pauken.. :) Ist ja auch klar, denn du hast ja ein Array in einem anderen drin.

 


 

Ich hoffe, ich habe nicht zuviel verraten ...



kOOni

Share this post


Link to post
Share on other sites

Kommt das hier dem denn schon näher?

 

 array (
                                'name'      => $name,
                                'email'     => $email,
                                'nachricht' => $nachricht
                                )
                   );

   print($eintrag);

?>



Ausgeben tut er mir nur "array" :(

Share this post


Link to post
Share on other sites
Guest




.. erstellt dir eine Variable mit beispielsweise folgendem Inhalt:


$Eintraege [4] ['name'] = "puchne";

 

Schaue dir nochmal die String, Array und Variablenoperationen an, damit du siehst, was ich da oben mache. Oder beschreib mir es mal, vielleicht hast du nen Denkfehler drin :-) ?


Zu deinem gepostetem Code: Ich hab dir schonmal geschrieben, du hast in einem Array mehrere Arrays drin. Du musst dafür bei der Ausgabe so vorgehen:

 


 


kOOni

Share this post


Link to post
Share on other sites

also ... nach ein paar mal rumprobieren mit den arrays glaube ich gefunden zu haben warum er mir "array" reinschreibt statt dem eigentlichem Wert.

Wenn ich Eintrag so definiere:

$eintrag2[0]=$name;
  $eintrag2[1]=$email;
  $eintrag2[2]=$nachricht;



Und dann es mir ausgeben lasse, kommt "array" sobald ich nicht angebe, welchen Teil ich haben will ...


also:

print($eintrag);

führt zu "array"

während meinetwegen

print($eintrag[0]['name']);

zu der Ausgabe von $name führt ...


Nun mein Problem:






Ich müsste dann ja bei

$output=fwrite($datei,$eintrag);

jeden Array angeben ...

also $eintrag[$eintragsnummer]['name'], $eintrag[$eintragsnummer]['email'] und $eintrag[$eintragsnummer]['nachricht']

damit er mir statt dem "array" den wirklichen Wert reinnotiert ... aber dann gehen mir doch die Informationen verloren, oder nicht?



Also er soll mir ja nicht "martin mar@gmx.de martins nachricht" reinschreiben, sondern
$Eintraege [0] ['name'] ="name_ab";
$Eintraege [0] ['email'] ="email_ab";
$Eintraege [0] ['nachricht'] ="nachricht_ab";
$Eintraege [1] ['name'] ="name_cd";
$Eintraege [1] ['email'] ="email_cd";
$Eintraege [1] ['nachricht'] ="nachricht_cd";

Share this post


Link to post
Share on other sites

also mein Problem besteht eigentlich nur in der Speichersequenz:

Wie schaffe ich es das er in die Datei schreibt:

$eintrag[$x]['name']="abc";

$eintrag[$x]['email']="def"

$eintrag[$x]['nachricht']="ghi"


und nicht etwa den Wert von $eintrag[$x]['name'] (z.B. michael oder was auch immer), oder

nur, wie er es zurzeit, macht "array".

Share this post


Link to post
Share on other sites
Guest

Stimmt. Hätten wir das Erste Problem geklärt :-)


Das Speichern stellt sich auch relativ einfach hin. Hier mal ein kleiner Ansatz:

 

");
fclose($datei);
} 

?>



Du liest beim Schreiben, also theoretisch nochmals die bereits geschriebenen Beiträge aus und speicherst sie gleich wieder mit. Somit ist hängst du nun den neuen Datensatz einfach mit dran.


Das ist nicht getestet, könnte also noch Fehler enthalten. Mit diesem Code müsstest du nun die komplette Speicherung hinbekommen.


Wie liefs?



kOOni

Share this post


Link to post
Share on other sites
Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Sign in to follow this  

×
×
  • Create New...