Reload (F5)

Dieses Thema Reload (F5) im Forum "Webentwicklung, Hosting & Programmierung" wurde erstellt von noah1, 29. Sep. 2006.

Thema: Reload (F5) Hallo, folgendes Problem: Ich bastele gerade an einer Website (PHP), unter anderem mal als Beispiel ein Formular zum...

  1. Hallo, folgendes Problem:
    Ich bastele gerade an einer Website (PHP), unter anderem mal als Beispiel ein Formular zum Anlegen von Benutzern, die Zugang zum Admin-Center bekommen.
    Sieht so aus:
    accounts.inc.php
    Code:
    ...
    <?PHP
    else if(($_REQUEST['submit']) && ($_POST['submit'] == Account speichern))
    		{
    			...
    			if($fehler)
    				{
    				$fehler = 0;
    				include(admin/accounts/account_neu.inc.php);
    				}
    			else if(!$fehler)
    				{
    				include(save/dbconnect.inc.php);
    				$query = INSERT INTO accounts SET vorname =->.$_POST['vorname'].', nachname =->.$_POST['nachname'].', username =->.$_POST['username'].', password =->.md5(geheim).', usergroup =->.$_POST['usergr'].';
    				mysql_query($query);
    				mysql_close($dz);
    				echo<meta http-equiv='Refresh' content='0; url=index.php?go=accounts'>;
    				}			
    		}
    	else
    		{
    			include(admin/accounts/accounts_anzeigen.inc.php);
    		}
    ?>
    
    Die daten werden von der Datei account_neu.inc.php über ein Formular übergeben - funzt alles prima.
    Jetzt kommt aber mein Problem, ich denke dieses Problem haben viele.
    Wenn ich also die Daten übergebe werden sie in die Datenbank geschrieben und es wird wieder die Seite accounts.anzeigen.inc.php angezeigt - eine Liste bereits bestehender Accounts. Wie aber kann ich verhindern dass die Daten durch das Aktualisieren im Browser erneut gesendet werden?
     
  2. OK, so ganz versteh ich die Frage zwar nicht (oder doch :-\), aber nach dem Refresh sind doch die $_POST-Daten eh weg.

    Zur Sicherheit kannste ja vor dem Refresh noch $_POST zurücksetzen.

    $_POST = false;

    oder

    unset($_POST);
     
  3. Nee, leider nicht. Im Cache des Browsers sind sie offensichtlich noch gespeichert, (trotz <meta http-equiv=cache-control content=no-cache />im <head>), und bei einem Reload der Seite werden sie wieder an das Script übergeben. Und dem Script ist es wohl egal woher die Daten kommen, die werden in die DB geschrieben.

    Mit unset($_POST); komme ich auch nicht weiter, ich denke mal daß ich damit ja nicht die eingegebenen Formulardaten im Cache des Browsers leere.
     
  4. Dann gib dem Formular einen timestamp mit auf die Reise, den kannste z.B. in der SESSION speichern.


    Code:
    <form .....>
     <input type=hidden name=timecheck value=<?php echo time(); ?> />
     <input ......
     <input ......
    </form>
    
    <?php
    .....
    .....
    
    if($_POST[timecheck] == $_SESSION[timecheck]) $error = true;
    
    .....
    .....
    
    mysql_close($dz);
    $_SESSION[timecheck] = $_POST[timecheck];
    
    .....
    .....
    ?>
    
    Natürlich sollte eine SESSION gestartet sein ;)

    Du kannst natürlich den timestamp auch in die DB schreiben und vor dem INSERT abfragen ob für diesen timestamp schon ein Eintrag existiert.
    Das würde dann auch ohne SESSION funktionieren.
     
  5. Session ist ein gutes Stichwort - ich definiere einfach in der Datei die für das Formular included wird eine Variable die ich in der Session speichere und gebe der den Wert 1. Vor dem Speichern der übergebenen Daten frage ich ab ob die Variable den Wert 1 hat, wenn ja wird alles in die DB geschrieben, wenn nicht dann passiert nichts...
    Nach dem Eintrag in die DB muß ich nur der Variablen den Wert 0 oder sonstwas geben...
    Code:
    <?php
    	$_SESSION[db_eintrag] = 1;
    	?>
    <form method=post action=index.php?go=accounts>
    <table style=80$; margin:auto; font:9px verdana; color:#CCCCCC;>
    	<tr>
    		<td style=font:11px verdana; text-align:center colspan=2>Neuen Account anlegen</td>
    	</tr>
    ...
    
    Code:
    else if(($_REQUEST['submit']) && ($_POST['submit'] == Account speichern) && ($_SESSION['db_eintrag'] == 1))
    		{$query = INSERT INTO accounts SET vorname =->.$_POST['vorname'].', nachname =->.$_POST['nachname'].', username =->.$_POST['username'].', password =->.md5(geheim).', usergroup =->.$_POST['usergr'].';
    				mysql_query($query);
    				mysql_close($dz);
    				$_SESSION['db_eintrag'] = 0;
    				include(admin/accounts/accounts_anzeigen.inc.php);
    ...
    ?>
    
    Und das Beste - es funktioniert. :1
     
  6. Ich bin stolz auf dich, aber im Prinzip ist es genau das was ich vorgeschlagen hab :2funny: :2funny:
     
  7. Aber bei Deiner Lösung habe ich länger gebraucht bis ich sie verstanden habe als bei meiner... ;D
     
Die Seite wird geladen...

Reload (F5) - Ähnliche Themen

Forum Datum
Mit D Fend Reloaded (=DosBox) über USB eine Serielle Schnittstelle bedienen Windows XP Forum 25. Mai 2012
NERO7 PREMIUM RELOADED Audio, Video und Brennen 29. März 2009
PISA reloaded ? Windows XP Forum 14. Nov. 2007
Preload Windows XP Forum 22. Apr. 2007
Ohne Reload Eintrag ändern & speichern Webentwicklung, Hosting & Programmierung 27. März 2007