Browser - Aktualisierung abbrechen

Hallo,

so erstmal vorweg. Ich weiß nicht, ob ich hier richtig bin oder besser bei html oder javascript hätte schreiben soll.

Aber nun zu meinem Problem. Wahrscheinlich ist es aber eh nicht losbar.

Also ich habe ein Formular mit welchem ich einen simplen Text eingeben kann. Dieser wird in einer Datenbank gespeichert und das formular wird wieder zur gleichen seite geschickt. (man bleibt also bei der seit wo man den Text eingegeben hat). Der text wird nun über dem formular angezeigt. Wenn man noch mehr Texte speichert werden sie über dem vorher eingegebenen angezeigt. ( :smile: halt wie ein Gästebuch)

Ein Problem habe ich nun, wenn ich ein Text erfolgreich eingegben habe und er angezeigt wird. Wenn man jetzt als nächstes sofort auf „aktualisiern“ des Browsers klickt wird der eben gespeicherte Text nochmal gespeichert und angezeigt und das bei jedem aktualisieren.

hier ein kleiner auszug beim speichern;

if(isset($gesendet)) // Wert des Formularbutton  
{   
$new\_kommentar = convert(true,true,true,$new\_kommentar);   
$akt\_datum = date("d.m.Y"); // aktuelles Datum wird eingelesen   
$akt\_datum = crunch($akt\_datum); // datum zum format JJJJ-MM-TT   
  
 if (strlen ($new\_kommentar)\> 0)   
 {   
 $kom\_new = "INSERT INTO $bug\_kommentar   
 (BUG\_NUM, KOMMENTAR, DATUM, ERSTELLER)  
 VALUES('$bug\_num', '$new\_kommentar', '$akt\_datum', '$username');";   
  
 mysql\_db\_query($dbname, $kom\_new); // der DBbefehl wird ausgefuehrt   
  
 if (mysql\_affected\_rows()==0) //wenn datensaetze geaendert wurden   
 {   
 echo "Fehler beim SQL-Befehl: $kom\_new ";   
 }   
 }  
}   

Kann man das iregdnwie unterbinden? Ich habe schon versucht die Werte auf null, 0 oder false zu setzen aber interessiern tut das den Browser herzlich wenig.

Danke,
MFG,
Wolf

Hallo,

so erstmal vorweg. Ich weiß nicht, ob ich hier richtig bin
oder besser bei html oder javascript hätte schreiben soll.

HTML sicherlihc nicht, javascript waer auch ein versuch wert gewesen. Aber wir finden auch hier eine Loesung! :smile:

Aber nun zu meinem Problem. Wahrscheinlich ist es aber eh
nicht losbar.

Was ist denn das fuer eine Einstellung?!

Also ich habe ein Formular mit welchem ich einen simplen Text
eingeben kann. Dieser wird in einer Datenbank gespeichert und
das formular wird wieder zur gleichen seite geschickt. (man
bleibt also bei der seit wo man den Text eingegeben hat). Der
text wird nun über dem formular angezeigt. Wenn man noch mehr
Texte speichert werden sie über dem vorher eingegebenen
angezeigt. ( :smile: halt wie ein Gästebuch)

Ein Problem habe ich nun, wenn ich ein Text erfolgreich
eingegben habe und er angezeigt wird. Wenn man jetzt als
nächstes sofort auf „aktualisiern“ des Browsers klickt wird
der eben gespeicherte Text nochmal gespeichert und angezeigt
und das bei jedem aktualisieren.

Logisch. Denn der Browser ruft die Seite wieder im POST mode auf mit den davor festgelegten post attributen (also den Formularfelder mit ihren Werten.)

Was du machen musst (kannst) ist folgendes:
Ueberpruefe bei jedem Eintrag, ob der letzte Eintrag der gemacht wurde den selben Text hat. Wenn dies der Fall ist, ist es sehr wahrschienlich, dass der Eintrag vom selben User stammt, und unabsichtlich nochmal gesendet wurde.
Mach zuerst eine DB Abfrage und Vergleich das Ergebnis mit dem per POST Uebergebenen Wert. Falls gleich => Fehlermeldung.

Ein anderer Loesungsansazt waehre das speichern der IP des USers und den timestamp in einer DB und den Eintrag nur dann zulassen, falls der letzte Eintrag dieses Users eine gewisse Zeit zurueck liegt.

Oder du kannst eine Session-Variable setzten sobald der User einen Eintrag gemacht hat, und sobald die Variable gesetzt ist, keinen weiteren Eintrag mehr zulassen.

Ganz wie du willst. (Die Ansaetze unterscheiden sich ja leicht in ihren Auswirkungen)

hier ein kleiner auszug beim speichern;

[CODE]
if(isset($gesendet)) // Wert des Formularbutton
{
$new_kommentar = convert(true,true,true,$new_kommentar);
$akt_datum = date(„d.m.Y“); // aktuelles Datum wird eingelesen
$akt_datum = crunch($akt_datum); // datum zum format
JJJJ-MM-TT

ps.: das kommt mir etwas umstaendlich vor, was du hier machst…

if (strlen ($new_kommentar)> 0)
{
$kom_new = „INSERT INTO $bug_kommentar
(BUG_NUM, KOMMENTAR, DATUM, ERSTELLER)
VALUES(’$bug_num’, ‚$new_kommentar‘,
‚$akt_datum‘, ‚$username‘);“;

mysql_db_query($dbname, $kom_new); // der DBbefehl wird
ausgefuehrt

if (mysql_affected_rows()==0) //wenn datensaetze
geaendert wurden
{
echo "Fehler beim SQL-Befehl: $kom_new ";
}
}
}
[/CODE]

Kann man das iregdnwie unterbinden? Ich habe schon versucht
die Werte auf null, 0 oder false zu setzen aber interessiern
tut das den Browser herzlich wenig.

Wie du dass meinst, hab ich nicht verstanden. Aber ist auch egal, denke ich.

Probiers einfach mal, und meld dich nochmal wenn was unklar war!

Danke,
MFG,
Wolf

Bitte
Dirk

Das Reload Problem mit Formen ist ein schon häufig besprochenes Problem.
Ein schon von vielen getestetes Mittel ist es mittes Sessionvariablen und eindeutigen Ids das Neuladen einer gesendeten Seite zu verhindern, die mehrfachbenutzung eines formulares damit aber nicht zu verhindern.
Eine hilfreiche PHP Klasse findet man hier:

http://www.contentmanager.de/magazin/artikel_371_for…

$result=mysql\_query ("select \* from ccgb where (text='{$\_POST['eintrag']}')");
$test=mysql\_fetch\_assoc($result);
if (!empty($test))
{ echo " **Eintrag existiert bereits!**
\n";}

So handhabe ich das meistens.