gästebuch - 'blätterfunktion' aber ohne mysql!?
joshua
- php
0 Tom0 Andreas-Lindig0 e7
hallo!
kennt jemand von euch ein gutes tutorial, wo beschrieben ist, wie man für ein gästebuch das die daten aus einer .txt holt, eine 'blätterfunktion' programmieren kann? - dass z.b. nach 10 einträgen eine neue seite mit den alten einträgen angelegt wird.
was dann ungefähr so ausschaut:
<<< 1|2|3 >>>
kann mir jemand dabei helfen?
gruss
joshua
Hello Joshua,
kennt jemand von euch ein gutes tutorial, wo beschrieben ist, wie man für ein gästebuch das die daten aus einer .txt holt, eine 'blätterfunktion' programmieren kann? - dass z.b. nach 10 einträgen eine neue seite mit den alten einträgen angelegt wird.
was dann ungefähr so ausschaut:
Da hast Du eigentlich einen weiten Weg vor Dir.
Du musst Dich mit
auseinandersetzen
Wie gut bist Du denn schon in PHP und allgemeiner Programmierung?
Kennt Du den Unterschied zwischen holen un dsuchen, wahlfreiem und sequentiellem Zugriff?
Kannst Du Dir was unter atomaren und unter angereihten odr gestaffelten Funktionen vorstellen?
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
nur damit mir hier heute nichjt ein anderer Schelm zuvor kommt:
wenn Du schreibst "ohen mysql" dann habe ich da imliziert, dass es ohne DBMS stattfinden solll. Neben MySQL gibt es natürlich auch noch Datenbank-Management-Systeme.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
hi!
nja... so gut kenn ich mich da noch nicht aus.
geht das nicht einfacher?
habe gerade folgendes script entdeckt:
http://www.php-pla.net/?action=scripts&cat_id=1
wie machen die dort das?
gruss
joshua
naja ganz so heftig isses auch ncht - aber die sache ist schon nicht ohne ganz wie tom meint..!
hab mich auch per gästebuch-entwurf in php eingeschuftet, viele, viele fehlversuche und graue haare gerade bei der vermeintlichen "blätterfunktion"! aber denk nicht das du explizit dazu tutorials findest...
kannst dir ja mal mein flickwerk anschauen, lauft auch auf nem flatfile-datenbanksystem ;O sprich txt-dateien.
http://www.octopusmusicus.de/gaestebuch/gaestebuch.php
@Mike: oh ja, ich kann links setzen WENN ich will! ;]
wenn dichs intressiert mail ich dir das skript, aber erst morgen, bin in 5min wech.....!
cheers & atschö
Hallo,
kannst dir ja mal mein flickwerk anschauen, lauft auch auf nem flatfile-datenbanksystem ;O sprich txt-dateien.
naja, bei einer einzigen seite kann man schlecht von "blättern" sprechen. außerdem frag ich mich, was da Minutenlang lädt, obwohl nichts neues dazukommt?
Gruß, Andreas
Hallo,
ach tach andreas altgedienter kritiker.. ;]
naja, bei einer einzigen seite kann man schlecht von "blättern" sprechen. außerdem frag ich mich, was da Minutenlang lädt, obwohl nichts neues dazukommt?
minutenlang lädt da schonmal garnischt, es gibt lediglich n refresh alle 5min. WAS da refresht wird sind schlicht &ergreifend die gästebuch-einträge.. immerhin nicht allzu uninteressante daten in einem gästebuch wat meinste?
zum thema blätten: bis jetzt gibbet nur eine seite, stimmt, etwas ungeeignet also blätter-demo-version, hast ja recht =]
aber hättest n test eintrag gestartet, hättest auch deine blättchen bekommen.. ich schwör!
hier nochmal n link zu ner "blätter"-version mit bischn blindtext:
http://www.octopusmusicus.de/tmp/gaestebuch.php
(werd mein verd***tes gästebuch doch wohl noch an den mann bringen!! >;-( )
in diesem sinne: so lasset uns blättern !
salve
ach tach andreas altgedienter kritiker.. ;]
was bleiben einem schon für Hobbys in dieser schlechten Welt hehe ,-)
minutenlang lädt da schonmal garnischt,
bei mir schon...
WAS da refresht wird sind schlicht &ergreifend die gästebuch-einträge.. immerhin nicht allzu uninteressante daten in einem gästebuch wat meinste?
nö, wenn einer den neuesten Stand wissen will, kann er auch einmal klicken. Die ewige Ladeanzeige des Brausers irritiert, könnte ja auch sein, daß da im Hintergrund irgend so'n Dialerscheiß gestartet wird. Wer durchschaut da schon die Möglichkeiten heutzutage. Mißtrauen ist jedenfalls mittlerweile im i-Net angebracht.
hier nochmal n link zu ner "blätter"-version mit bischn blindtext:
http://www.octopusmusicus.de/tmp/gaestebuch.php
sieht doch schon besser aus. Ich würde die Blätterziffern näher zusammenrücken und die aktuelle etwas deutlicher hervorheben.
Gruß, An*ungefragterkritiker*dreas
moinsen andreas *gäähn*
was bleiben einem schon für Hobbys in dieser schlechten Welt hehe ,-)
jaja als "schlechte welt"-verbesserer hats man heute nicht leicht, wenn einem solch verkommene subjekte wie deinereiner die mission zu vereiteln gedenken ;;;-)
WAS da refresht wird sind schlicht &ergreifend die gästebuch-einträge.. immerhin nicht allzu uninteressante daten in einem gästebuch wat meinste?
nö, wenn einer den neuesten Stand wissen will, kann er auch einmal klicken. Die ewige Ladeanzeige des Brausers irritiert, könnte ja auch sein, daß da im Hintergrund irgend so'n Dialerscheiß gestartet wird. Wer durchschaut da schon die Möglichkeiten heutzutage. Mißtrauen ist jedenfalls mittlerweile im i-Net angebracht.
wat heisst da "könnte"...? muahahAHAHAHAHAHAHAHAAA
(äh sorry bin noch nicht ganz wach %-)
aber im ernst: ist schon n argument.
auch wenn man grad beim lesen eines eintrags ist, und selbiger durch n refresh auf das nächste "blatt" (ich komm nicht mehr los von diesen vermaledeiten blättern lol) verschoben wird, kommt man sich leicht ver4rscht vor denk ich.. =)
hier nochmal n link zu ner "blätter"-version mit bischn blindtext:
http://www.octopusmusicus.de/tmp/gaestebuch.phpsieht doch schon besser aus. Ich würde die Blätterziffern näher zusammenrücken und die aktuelle etwas deutlicher hervorheben.
werd ich gleich mal ausprobieren, thx
grüszlige
nochwat, ich kann nicht mehr an mich halten, es muss raus:
mein GB ist valide!! DOCH!
das ich das noch erleben darf... *sniff*
hab natürlich auch gleich n Baperl spendiert.. hehe *protz*
so, das wars jetzt endlich, noch n schönen sonntag alle miteinand!
Hello,
also "file()" sollte man nur zum reinen Lesen Benutzen. Reines Lesen bedeutet, dass die mit file() ausgelesenen Daten nicht wieder zurückgeschrieben werden dürfen. Ich habe bis heute nicht herausgefunden, ob file() und file_get_contents() mit einem Advisory-Lock auf die Daten arbeiten, da ich den Objectcode irgendwie nicht mehr finde. :-(( Aber man kann das auch durch Test ermitteln. Das werde ich gleich mal tun.
Wenn die Inhalte aber nicht gesichert gelesen werden konnten, dann darf man für die Schreiboperation ausschließlich den (a)-Mode benutzen und mit Exclusive-Lock arbeiten und den Dateizeiger zum Schreiben nicht selbst anfassen. Dann sollte da auch nichts schief gehen. Man darf damit auch nur NEUE INHALTE hinzufügen, also ein "insert" hinter das Ende der Daten durchführen.
Zum Thema Blättern.
Wenn man nun file() zum Lesen nimmt oder auch fget_csv() http://de3.php.net/manual/en/function.fgetcsv.php, dann könnte also bestenfalls der letzte Satz fehlen oder kaputt sein, weil der gerade noch geschrieben wird durch einen anderen Prozess.
Was bedeutet "Blättern"? Blättern heißt, dass X Datensätze auf einer SEITE zusammengefasst werden. X muss also als erste mal festgelegt werden http://de3.php.net/manual/en/function.define.php.
Dann muss man wissen, WELCHE Seite ( <input type="hidden" name="ctrl[pageno]" value="<?php echo $pageno: ?>"> ) angezeigt wird und welche als nächste angezeigt werden soll:
if (isset($_POST['ctrl']['pageno'])) ## fragen, ob überhautpt schon eine Seitennummer
{ ## übertragen wurde im Form
$pageno = intval($_POST['ctrl']['pageno']) ## aktuelle Seitennummer ermitteln
if (isset($_POST['btn']['next'])) ## wenn der "NEXT"-Button gedrückt wurde
{
$pageno++; ## Seitennummer erhöhen
}
elseif (isset($_POST['btn']['prev'])) ## wenn der "PREV"-Button gedrückt wurde
{
$pageno--; ## Seitennummer verringern
}
elseif (isset($_POST['btn']['direct']) ## direkt zur Seite .... springen
{
$pageno = intval(key($_POST['btn']['direct'])); ## Seitennummer zum Direktsprung ermitteln
}
if ($pageno < 0) $pageno = 0; ## wenn einer vor Seite 0 blättern wollte
if ($pageno > $max_pageno) $pageno = $max_pageno; ## wenn einer mehr sehen wollte, als da ist
}
else
{
$pageno = 0; ## wir beginnen die Zählung mit 0
}
Wie wir also die gewünschte Seite ermitteln, wissen wir jetzt.
Jetzt müssen wir mal nachdenken, wie wir $max_pageno ermitteln:
Bei X Datensätzen auf einer Seite gilt:
$max_pageno = intval($count_recs / X)-1;
Schade, Problem nur verlagert, denn $count_recs (Die Anzahl der vorhandenen Sätze) kennen wir noch nicht. Ok, das besorgen wir uns:
$_recs = file($dateiname); ## das Array mit allen Datensätzen
$count_recs = count($_recs); ## Die Anzahl der Elemente im Array
Hinweis bei Verwendung von file():
Die Daten dürfen keine "\r\n" oder so enthalten, sonst kommt das System durcheinander!
Klasse, aber wie erzeugen wir nun die Controls (hidden-Vaiablen) und die Buttons im Formular?
Das machen wir mit einer Funktion:
function make_buttons($pageno, ## aktuelle Seitennummer
$max_pageno, ## Maximale Seitennummer
$generate=5, ## Anzahl der anzuzeigenden Buttons
$gap="\n") ## Zwischenraum der Buttons
{
$btn = "<input type="submit" name="btn[first]" value="|<<=" class="navbtn">$gap";
$btn .= "<input type="submit" name="btn[prev]" value="<--" class="navbtn">$gap";
$start = $pageno - intval($generate/2); ## immer $generate/2 buttons VOR der aktullen Seite
if ($start < 0) $start = 0; ## wenn das erlaubt ist.
$stop = $start + $generate;
if ($stop > $max_pageno) $stop = $max_pageno;
if (($stop - $start) < $generate) $start = $stop - $generate +1;
if ($start < 0) $start = 0;
if ($start > 0) $btn .= "...";
for ($i=$start; $i<=$stop; $i++)
{
$btn .= "<input type="submit" name="btn[direct]" value="Seite ".($i+1)."" class="navbtn">$gap";
}
if ($stop < $max_pages) $btn .= "...";
$btn .= "<input type="submit" name="btn[next]" value="-->" class="navbtn">$gap";
$btn .= "<input type="submit" name="btn[last]" value="=>>|" class="navbtn">";
return $btn;
}
Es wir ein Code generiert, den Du dann später nu an passender Stelle ausgeben musst.
<input type="submit" name="btn[first]" value="|<<=" class="navbtn">
<input type="submit" name="btn[prev]" value="<--" class="navbtn">
...<input type="submit" name="btn[direct][41]" value="Seite 42" class="navbtn">
<input type="submit" name="btn[direct][42]" value="Seite 43" class="navbtn">
<input type="submit" name="btn[direct][43]" value="Seite 44" class="navbtn">
<input type="submit" name="btn[direct][44]" value="Seite 45" class="navbtn">
<input type="submit" name="btn[direct][45]" value="Seite 46" class="navbtn">
<input type="submit" name="btn[next]" value="-->" class="navbtn">
<input type="submit" name="btn[last]" value="=>>|" class="navbtn">
Nicht irritieren lassen, die Funktion zeit für $pageno == 0 "Seite 1" an.
Über sden Trick mit dem Array bekommen wir aber trotzdem den Index 0 geliefert.
Ich denke, dass Du leicht die passenden Datensätze (Zeilennummern) zur geforderten Seite aus dem Array extrahieren kannst, um sie zur Anzeige zu bringen.
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hello,
waren noch ein paar kleine Fehler drin. Ich hoffe, so klappt es jetzt:
function make_buttons($pageno, ## aktuelle Seitennummer
$max_pageno, ## Maximale Seitennummer
$generate=5, ## Anzahl der anzuzeigenden Buttons
$gap="\n") ## Zwischenraum der Buttons
{
$btn = "<input type="submit" name="btn[first]" value="|<<=" class="navbtn">$gap";
$btn .= "<input type="submit" name="btn[prev]" value="<--" class="navbtn">$gap";
$start = $pageno - intval($generate/2); ## immer $generate/2 buttons VOR der aktullen Seite
if ($start < 0) $start = 0; ## wenn das erlaubt ist.
$stop = $start + $generate -1;
if ($stop > $max_pageno) $stop = $max_pageno;
if (($stop - $start +1) < $generate) $start = $stop - $generate +1;
if ($start < 0) $start = 0;
if ($start > 0) $btn .= "...";
for ($i=$start; $i<=$stop; $i++)
{
$btn .= "<input type="submit" name="btn[direct][$i]" value="Seite ".($i+1)."" class="navbtn">$gap";
}
if ($stop < $max_pageno) $btn .= "...";
$btn .= "<input type="submit" name="btn[next]" value="-->" class="navbtn">$gap";
$btn .= "<input type="submit" name="btn[last]" value="=>>|" class="navbtn">";
return $btn;
}
Harzliche Grüße aus http://www.annerschbarrich.de
Tom
Hallo joshua,
naja, sooo schwer, wie Tom meint, ist das nun auch wieder nicht, wir schreiben ja keine Bankensoftware und lassen Sicherheitsüberlegungen mal kurz beiseite ;-) :
Gruß, Andreas
Hi,
kann mir jemand dabei helfen?
Hier mal die Funktionen, die du in dieser Reihenfolge verwenden könntest (auslesen und anzeigen der Daten, schreiben geht ja denke ich relativ einfach):
$a = file()
-> Datei auslesen
for ($i = START_POSITION; $i <= START_POSITION + 10; $i++)
-> Immer 10 Einträge anzeigen, Startposition wird als GET-Parameter übergeben (Achtung: count($a) prüfen!)
for ($i = 0; $i <= count($a); $i += 10);
echo <a href=gästebuch?seite=i%10>i%10
-> Seitennummern ausgeben
Naja zumindest so ähnlich sollte es gehen. Speichern wie gesagt ist leicht, einfach fopen(datei, "a") und fputs...
E7