Reloadsperre

Joe

Erfahrenes Mitglied
Guten Tag Comunity.

Ich versuche das wiederladen der Seite oder scriptes zu verhindern. So das ein Reload oder ein Klick auf den Button eine Seite zurück nicht möglich ist.

Mein Script zeigt ein Ereigniss und der User kann nur Ok klicken (jedes andre Script aus Navigation würde wieder das Ereigniss zeigen).
Nach dem klicken ruft sich die Seite selbst auf und prüft die Post-Daten, löscht das Ereigniss aus der Datenbank. Nach dem OK-Klick kann man die Seite nicht wieder Aufrufen (Seite zurück gehen im Browser oder F5 drücken).

Das funktioniert auch soweit bis auf eine Ausnahmesituation. Wenn man das Ereigniss also meine Seite sieht und direckt den Browser schliesst, den Browser wieder öffnet (Firefox) dann holt die Seitenwiederherstellung das Ereigniss/Seite/Script wie gewünscht wieder (wie gewünscht es wurde ja noch nicht Ok geklickt).
Wenn man nun Ok klickt kann man aber dennoch immer wieder eine Seite zurück gehen. Das Ereigniss wiederholt sich immer wieder.
Wie gesagt das klappt nur wenn man den Browser vorher geschlossen hatte.

Ums in kurze Worte zu fassen: Nach dem Schliessen/Öffnen des Browsers kann man die Seite immer wieder zurück holen. Die Reloadsperre greift nicht.

Was kann ich da machen?
Meta Tags werden anscheinend auch ignoriert.
HTML:
<meta http-equiv="cache-control" content="no-cache"></meta>
<meta http-equiv="pragma" content="no-cache"></meta>
<meta http-equiv="expires" content="0"></meta>
<meta name="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT"></meta>

Der Code zum besseren Verständniss:
PHP:
	<meta http-equiv="cache-control" content="no-cache"></meta>
	<meta http-equiv="pragma" content="no-cache"></meta>
	<meta http-equiv="expires" content="0"></meta>
	<meta name="Expires" content="Mon, 26 Jul 1997 05:00:00 GMT"></meta>
	<div id="content-pic">
	<?php include 'templates/Ress.tpl'; ?>
	</div>
<div id=content>
<h1>Ereigniss</h1>
<h2>Sammeln<br></h2>
<?php
if (($_POST['IDEreignisse']!='') OR ($_POST['DeleteEreigniss']!='') ) {
	$IDEreignisse = trim($_POST['IDEreignisse']);
	$IDEreignisse = mysql_real_escape_string($IDEreignisse);
	$DeleteEreigniss = trim($_POST['DeleteEreigniss']);
	$DeleteEreigniss = mysql_real_escape_string($DeleteEreigniss);
	if ($DeleteEreigniss=='Y') {
		$loeschen = "DELETE FROM 
						Ereignisse 
					WHERE 
						ID = '$IDEreignisse'";
		$loesch = mysql_query($loeschen);
		mysql_query("UPDATE
						CharFaehigkeiten
					SET
						ExpPoints=ExpPoints+2
					Where
						Username= '$Username'");
		if (mysql_errno()) {		
			echo mysql_errno() . ": " . mysql_error(). "\n";
		}
		if (mysql_affected_rows() == 0) {
			mysql_query("INSERT INTO
						CharFaehigkeiten
								(Username,
								ExpPoints)
							VALUES
								('$Username',2)");
			if (mysql_errno()) {		
				echo mysql_errno() . ": " . mysql_error(). "\n";
			}
		}
		$IDEreignisse='';
		$DeleteEreigniss='';
		header("Location: main.php?section=sammeln");
		?>
		</div>
		<div id="upper-pic">
		<h2>Pics:</h2>
		</div>
		<div id="uppercontent">
		<h2>Text:</h2>
		</div>
		<?php
		die;
	}
}


$getEreignisse = "SELECT
					ID,
					RessourceName,
					Wert1
				FROM
					Ereignisse
				WHERE
					Username='$Username' AND Aktion='Sammeln'";
$Ereignisse = mysql_query($getEreignisse);
if (!$Ereignisse) {
	die ('Etwas stimmte mit dem Query nicht: '.$db->error);
}
if (mysql_num_rows($Ereignisse) != 0) {
	$rowEreignisse = mysql_fetch_assoc($Ereignisse);
	$IDEreignisse=$rowEreignisse["ID"];
	$Wert1Ereignisse=$rowEreignisse["Wert1"];
	$RessourceName=$rowEreignisse["RessourceName"];
		
	
echo "<p>$IDEreignisse</p>";

	echo "<p>Du hast deine Arbeit erfolgreich beendet</p>
			<p>$Wert1Ereignisse $RessourceName</p>
			<h2>Erfahrungpunkte: 2Exp</h2>";
	
	echo "<form action=\"main.php?section=ereigniss_sammeln\" method=\"post\">
		<input type='hidden' name='DeleteEreigniss' value='Y'>
		<input type='hidden' name='IDEreignisse' value='$IDEreignisse'>
		<input type='submit' style='font-family: Verdana; font-size: 8pt' name='formaction' value='OK!'></form>";
}
else {
	header("Location: main.php?section=sammeln");
}
?>
</div>
	<div id="upper-pic">
	<h2>Pics:</h2>
	</div>
	<div id="uppercontent">
	<h2>Text:</h2>
	</div>
 
Hm hab vorerst ne "Lösung" gefunden mit mysql_affected_rows() und die;
Aber das ist echt irgendwie blöd das die Postdaten so resistent im Cache verbleiben.
So muss auf jeden Fall immer erst ein SQL-Statement ausgeführt werden. Obwohl von der Logik des Scrptes dürte es garnicht zum ersten IF kommen. Es dürfte noch nichtmal das Ereigniss mehr in der DB sein. Is es auch tatsächlich nicht aber Firefox scheints aus den Cache zu zaubern und damit als reele existierende Daten zu behandeln.

Vieleicht fällt euch ja noch was besseres ein.

PHP:
$loeschen = "DELETE FROM 
						Ereignisse 
					WHERE 
						ID = '$IDEreignisse'";
		$loesch = mysql_query($loeschen);
		if (mysql_affected_rows() == 0) {
			header("Location: main.php?section=sammeln");
			die;
		}
 
Zurück