Archiv verlassen und diese Seite im Standarddesign anzeigen : GB kleines Problem grosse Wirkung
realgarfield 01-09-2005, 13:23 hallo...
ich bin sehr frisch in der php programmierung dabei!!!
Damit ich mich so a bissel damit vertraut mache, prog ich ein gästebuch!!!
ich weiß ich weiß... mal wieder einer mit einem gästebuch!
erklärung:
zur zeit speicher ich alle daten über klassen und funktionen(meiner Index.php) in einer datei.
wenn ich also einen eintrag schreibe und senden drücke speicher ich es in der datei eintrag.cfg, lese diese wieder aus und sende die daten ans gästebuch!
mein problem wenn ich das formular mit F5 aktualisiere speichert er die zuvor gesendeten daten nochmal!
ich habe mir schon einen programmcode angeschaut zum unterbinden des neu senden des formulars... aber dazu reicht mein verständnis leider nicht aus!
kann mir also mal jemand auf einfache weise erklären wie ich da vorgehen soll?
ich wäre sehr dankbar!!!
schmalle 01-09-2005, 14:04 Nach dem Speichern einfach header('location:index.php');
realgarfield 01-09-2005, 14:23 wenn's so einfach wäre...
so verweise ich auf meine index datei und dann bekomme ich eine lerre seite angezeigt! index.php ist die datei in der die klassen stehen!
ich rufe in meinem gästebuch guestbook.php
3 klassen auf
<?php
include('index.php')
//Klasse Speichern in datei
$guestbookWriteInput = new guestbookWrite();
$guestoutput = $guestbookWriteInput->eintragGB;
//Lesen der Gästebuchfunktionsdaten
$adminInformationen = new Adminread();
$adminDetail = $adminInformationen->adminInfo;
//Lesen aus der Datei Eintrag.cfg
$guestbookreadInput = new guestbookRead();
$guestinput = $guestbookreadInput->guestreadinput;
?>
dann folgt der seiten aufbau....
meine klasse speichern sieht wie folgt aus
<?php
class guestbookWrite
{
var $eintragGB = array();
function guestbookWrite()
{
$lesegaestebuch = new guestbookRead();
$eintrag = $lesegaestebuch->guestreadinput;
if("" != $_POST['eingabeName'])
{
$this->eintragGB[0] = $_POST['eingabeName'];
$this->eintragGB[1] = date("d.M.Y");
$this->eintragGB[2] = $_POST['eingabeEmail'];
$this->eintragGB[3] = $_POST['eingabeHomepage'];
$this->eintragGB[4] = $_POST['eingabeICQ'];
$this->eintragGB[5] = $_POST['eingabeText'];
$this->eintragGB[6] = $_POST['ID'];
$fp = @fopen("Eintrag.cfg","a");
@fwrite($fp,$this->eintragGB[0] . chr(10));
@fwrite($fp,$this->eintragGB[1] . chr(10));
@fwrite($fp,$this->eintragGB[2] . chr(10));
@fwrite($fp,$this->eintragGB[3] . chr(10));
@fwrite($fp,$this->eintragGB[4] . chr(10));
@fwrite($fp,$this->eintragGB[5] . chr(10));
fclose($fp);
}
return $this->eintragGB;
}
}
?>
also wo soll's hin?
ghostgambler 01-09-2005, 16:23 php-tags benutzen!
realgarfield 01-09-2005, 16:40 php-tags benutzen!
na das ist ja mal ne antwort mit der ich richtig viel anfangen kann! :box:
ghostgambler 01-09-2005, 16:45 Original geschrieben von realgarfield
na das ist ja mal ne antwort mit der ich richtig viel anfangen kann! :box:
tja, und ohne php-tags wird es auch keine weiteren geben...oder glaubst du im ernst man erkennt ohne Highlighting irgendwas?
abgesehen davon: Mich interessiert es nicht, wer mir so dumm kommt, hat meine Hilfe auch nicht verdient *zuck*, und es steht übrigens in den Regeln die Tags zu benutzen, aber da du die ja scheinbar nicht gelesen hast ... Pech!
penizillin 01-09-2005, 16:57 kann leider nicht großartig helfen, denn ich erkenne kaum was in deinem code :dontknow:
aber ich habe beim groben überfliegen den eindruck gewonnen, dass du eine echt starke oop-basierende architektur entwickelst... ich zeige dir nachher meine klasse class myEcho extends myOutput
http://www.php-resource.de/forum/search.php?s=&action=showresults&searchid=664535&sortby=lastpost&sortorder=descending <- erster treffer.
mensch die Regeln! hast du die Regeln nicht gelesen realgarfield? ;)
und das, gleich beim ersten Beitrag, mann mann, Kinder! :rolleyes:
realgarfield 01-09-2005, 17:06 @ghostgambler:
na jut... mein fehler... ist aber genauso wie:
tee trinken
"das abwarten und " hätte davor nicht geschadet!
ich schau heut schon seit 9 std. auf diese möhre und bin nicht grade für kurzantworten aufgelegt!!!
ich probier's ma so:
<?php
include('index.php')
//Klasse Speichern in datei
$guestbookWriteInput = new guestbookWrite();
$guestoutput = $guestbookWriteInput->eintragGB;
//Lesen der Gästebuchfunktionsdaten
$adminInformationen = new Adminread();
$adminDetail = $adminInformationen->adminInfo;
//Lesen aus der Datei Eintrag.cfg
$guestbookreadInput = new guestbookRead();
$guestinput = $guestbookreadInput->guestreadinput;
?>
dann folgt der seiten aufbau....
meine klasse speichern sieht wie folgt aus
<?php
class guestbookWrite
{
var $eintragGB = array();
function guestbookWrite()
{
$lesegaestebuch = new guestbookRead();
$eintrag = $lesegaestebuch->guestreadinput;
if("" != $_POST['eingabeName'])
{
$this->eintragGB[0] = $_POST['eingabeName'];
$this->eintragGB[1] = date("d.M.Y");
$this->eintragGB[2] = $_POST['eingabeEmail'];
$this->eintragGB[3] = $_POST['eingabeHomepage'];
$this->eintragGB[4] = $_POST['eingabeICQ'];
$this->eintragGB[5] = $_POST['eingabeText'];
$this->eintragGB[6] = $_POST['ID'];
$fp = @fopen("Eintrag.cfg","a");
@fwrite($fp,$this->eintragGB[0] . chr(10));
@fwrite($fp,$this->eintragGB[1] . chr(10));
@fwrite($fp,$this->eintragGB[2] . chr(10));
@fwrite($fp,$this->eintragGB[3] . chr(10));
@fwrite($fp,$this->eintragGB[4] . chr(10));
@fwrite($fp,$this->eintragGB[5] . chr(10));
fclose($fp);
}
return $this->eintragGB;
}
}
?>
ghostgambler 01-09-2005, 17:12 ziemlich doof das mit ner Textdatei zu machen -.-
mach einfach nenheader('Location:http://' . $_SERVER['SERVER_NAME'] . $_SERVER['PHP_SELF']);
ist das Einfachste (mit ner Text-Datei)
Hi,
wenn ich dich richtig verstanden habe, du brauchst eine Reload Sperre damit sich
keine doppelte Beiträge in deinen GB sammeln.
Du könntest in einen verstecktes Formularfeld einen Zeitstempel speichern:
<input type="hidden" name="time" value="<?php echo time(); ?>">
Zum festhalten der Sekundenzahl, speicherst du der Zeitstempel in einen extra txt file.
Bein nächsten Eintrag in GB muss die neue Zahl höher sein als die alte. Falls
beide Werte jedoch gleich sind (Reload mit F5), dann ist einen doppelten Beitrag
aus dem Browsercache.
penizillin 01-09-2005, 18:48 pippo, auch du solltest dir den thread anschauen, auf den ich verwiesen habe.
Original geschrieben von penizillin
pippo, auch du solltest dir den thread anschauen, auf den ich verwiesen habe.
gerade getan..., ja guter trick das mit den 3 seiten!
Hatte dein Verweis übersehen :(
Was bringt denn der Zeitstempel?
2 User kommen auf das Gästebuch und schreiben einen Eintrag.
Der eine fängt um 15.01.13 Uhr an, was dann im Hidden feld steht. Der zweite fängt um 15.02.01 an, speichert den Eintrag aber um 15.03.34 Uhr. Der erste ist aber erst um 15.04.17 Uhr fertig und kann nun seinen Eintrag nicht speichern!
Das ist doch nicht sinn der Sache
Regelt das über eine Session und das wars dann!
ghostgambler 01-09-2005, 21:22 Original geschrieben von LGC
Regelt das über eine Session und das wars dann!
ne session für den reload-Schutz eines Gästebuches? Oo
Ich find das ist Perlen vor die Säue :D
um mal zu bleiben bei der variante ohne sessions und ohne penizillin-Methode...
Original geschrieben von LGC
Der eine fängt um 15.01.13 Uhr an, was dann im Hidden feld steht.
Ne eigentlich noch nicht, der Timestempel wird erst übertragen und gespeichert mit einen Formular.
Sorry hatte ich vorher nicht erwähnt.
<form action="xxx.php" method="post">
<input type="submit">
<input type="hidden" name="time" value="<?php echo time(); ?>">
</form>
Oben sagte ich, bei neueren Beiträge ins GB muss der neuer Timestempel höher sein als der alte,
das ist tatsächlich zu ungenau, man müsste eigentlich nur prüfen, ob der Zeitstempel ungleich
ist als der der schon in einen *.txt (wenn man keinen DB hat) file vorhanden ist.
Sind die Timestempels identisch, weil z.B. einen Reload mit F5 stattgefunden hat wo quasi aus dem
Browser-Cache der alte Timestempel wieder übertragen wird, wird den Eintrag ins GB unterbunden.
Man könnte das ganze in eine Funktion (sperre) packen (identische Zeitstempel gibt true) und zum
Schluss zusätzlich noch abfragen ob die Felder des Formulars auch gesetzt wurden.
if(!empty($feld1) && !empty($feld2) && !$sperre){
eintrag in GB
}
|
|