Frage zu $_POST

crashx

Erfahrenes Mitglied
Daten die via POST übergeben werden könne danach beliebig mit:
PHP:
<?PHP echo $_POST['inhalt']; ?>
Ausgegben werden.

Meine frage:
Kann man die daten die übergeben werden mit einem befehl o.ä löschen?

Konkret:
Ich übergebe mit $_POST['inhalt'] den wert "Hallo" danach verwende ich ihn und möchte ihn dan löschen, aber das script geht noch weiter.
Wenn ich die Seite refreshe (F5) kommt die meldung ob ich den Inhalt der mittels POST übergeben wurde wieder verwenden möchte oder nicht.

Ich möchte eigentlich nur verhindern das mit einem refresh ein Multipler Datenbank eintrag nicht möglich ist.
 
Ich möchte eigentlich nur verhindern das mit einem refresh ein Multipler Datenbank eintrag nicht möglich ist.
Hallo,
wenn du, nachdem du die Daten in die Datenbank eingetragen hast, auf eine andere Seite oder aber auch die gleiche seite weiterleitest, sollte dein Problem behoben sein.
Hie ein Beipsiel für eine Weiterletung:
PHP:
<?php
    header('Location: index.php');
?>

mfg
forsterm
 
Damit habe ich noch nie etwas zu tun gehabt :)

Kannst du mir das genauer erklären?

hier mal die Seite wo es das Problem gibt.

PHP:
<?PHP
	include('com/connect.php');
	include('asx-top.php');
	include('asx-navigation.php');

echo '<div class="content">';
				
					if(empty($_GET['section']))
						{
							$sql = "SELECT *
									FROM `content`       
									WHERE `section` = 'startseite'
									LIMIT 1
								   ";
							$result = mysql_query($sql);
							
							while ($row = mysql_fetch_assoc($result)) 
								{
									echo '<div style="text-transform:capitalize" class="box1">'.nl2br($row['section']).'</div>';
									echo '<div style="padding-left:10px">'.nl2br($row['text']).'</div>';
								}
						}else{
							$sql = "SELECT *
									FROM `guestbook`       
									WHERE `section` = '".mysql_real_escape_string($_GET['section'])."'
									LIMIT 1
								   ";
							$result = mysql_query($sql);
							
							while ($row = mysql_fetch_assoc($result)) 
								{
									echo '<div style="text-transform:capitalize" class="box1">'.nl2br($row['section']).'</div>';
								}
							
							if(isset($_POST['check']))
								{
									$true = 1;
									
									if($_POST['selection'] == 'insert')
										{
											
											if(empty($_POST['name']))
												{
													$true = 0;
													$no_name = 'Ihr name';
												}
											if(empty($_POST['mail']))
												  {
												  	$true = 0;
												  	$no_mail = 'e-M@il';
												  }else{
												  	if($_POST['mail']!="" && ereg("^([a-zA-Z0-9\.\_\-]+)@([a-zA-Z0-9\.\-]+\.[A-Za-z][A-Za-z]+)$", $_POST['mail']))
												    	{
											        	}else {
												    		$true = 0;
												    		$no_mail = 'e-m@il';
												    	} 
												  }
										}
								}
							if($true)
								{
									$datum = date(d).'.'.date(m).'.'.date(y);
									$zeit = date(H).'.'.date(i);
									$ip = $_SERVER['REMOTE_ADDR'];
													
									$sql = ' 
											INSERT INTO 
											`guestbook` 
											SET 
											`section`  = "guestbook", 
											`name`  = "'.mysql_real_escape_string($_POST['name']).'", 
											`email` = "'.mysql_real_escape_string($_POST['mail']).'", 
											`text` = "'.mysql_real_escape_string($_POST['text']).'",
											`datum` = "'.$datum.'", 
											`zeit` = "'.$zeit.'", 
											`ip` = "'.$ip.'"
											'; 
											 mysql_query($sql); 
													    
		    								echo mysql_error(); 
											echo 'eintrag erfolgreich';//wen es mir das anzeigt und ich F5 drücke trägt es mir daselbe noch einmal ein
												}else{
													echo '<div class="gbleft">';
													echo 'Aus Rechtlichen gründen, Distanziere ich mich<br>';
													echo 'vom Inhalt der geschriebenen Nachrichten.<br>';
													echo 'Das nützen von böswilligen Codes wird schon<br>';
													echo 'in der Phase des eintragens unterbunden, macht<br>';
													echo 'euch deshalb nicht die mühe HTML, Javascript<br>';
													echo 'oder ähnliches zu verwenden.<br>';
													echo 'Vielen Dank der Webmaster<br><br>';
													
													echo '<form action="'.$_SERVER['PHP_SELF'].'?additive=neutrally&section=guestbook&page=1" method="POST">';
													echo '<table>';
													echo '<tr><td colspan="2"><b>Eintrag:</td></tr></b>';
													echo '<tr><td>name:</td>';
													echo '<td><input type="text" name="name" class="insrt"></td></tr>';
													echo '<tr><td>e-m@il:</td>';
													echo '<td><input type="text" name="mail" class="insrt"></td></tr>';
													echo '<tr><td>nachricht:</td>';
													echo '<td><textarea name="text" class="insrt1" cols="26" rows="5"></textarea></td></tr>';
													echo '<tr><td></td>';
													echo '<input type="hidden" name="selection" value="insert">';
													echo '<input type="hidden" name="check" value="1">';
													echo '<td><input type="submit" name="send" class="insrtsub" value="Eintragen"></td></tr>';
													echo '</form>';
						
													
													echo '<form action="'.$_SERVER['PHP_SELF'].'?additive=neutrally&section=guestbook&page=1" method="POST">';
													echo '<tr><td colspan="2"><b><br>Eintrag suchen:</b></td></tr>';
													echo '<tr><td colspan="2">nach stichwort oder name suchen:</td></tr>';
													echo '<tr><td>stichwort:</td>';
													echo '<td><input type="text" name="mail" class="insrt"></td></tr>';
													echo '<input type="hidden" name="selection" value="search">';
													echo '<input type="hidden" name="check" value="1">';
													echo '<tr><td></td><td><input type="submit" name="send" class="insrtsub" value="Suchen"></td></tr>';
													echo '</form>';
													echo '</table>';
													
													echo '</div>';
													
													echo '<div class="gbright">';
														$sql = "SELECT * 
																FROM `guestbook`
															   ";               //Anstatt 'Tabelle' natürlich die betreffende Tabelle auswählen 
														$eintrage = mysql_num_rows(mysql_query($sql));   //Die Einträge der Tabelle herausholen 
														$maxproseite = 4;                                //Statt der 5 die maximale Anzahl der Einträe pro Seite angeben 
														$i = 0; 
														
														$seiten = $eintrage / $maxproseite;              //Anzahl der Seiten errechnen 
														
														if (!isset($_GET['page'])) {                     //normalabfrage, wenn keine Seite gegeben ist. 
														    $sql = "SELECT * FROM `guestbook` ORDER BY `id` DESC LIMIT 0,".$maxproseite.";";   
														} else {                                         //Abfrage, wenn eine Seitenzahl gegeben ist. 
														    $abeintrag = $_GET['page'] * $maxproseite - $maxproseite; 
														    $sql = "SELECT * FROM `guestbook` ORDER BY `id` DESC LIMIT ".$abeintrag.",".$maxproseite.";"; 
														} 
														$result = mysql_query($sql); 
														while($row = mysql_fetch_assoc($result))
														{ 
														   		echo '<div class="gbtext">';
																echo '<b><u>'.$row['name'].'</b> schrieb am '.$row[datum].' um '.$row['zeit'].'</u><br><br>';
																echo $row['text'].'<br><br>';
																echo '</div>';                           
														} 
														echo 'Seite '; 
														for($i = 1; $i - 1< $seiten; $i++){              //Ausgabe der Linkliste 
														    echo '<b><a href="'.$_SERVER['PHP_SELF'].'?additive=neutrally&section=guestbook&page='.$i.'" class="set2">&nbsp;'.$i.'</b></a>';
														}
														$back = $_GET['page']-1;
														if($_GET['page'] == '1'){}else
														{
														echo ' <a href="'.$_SERVER['PHP_SELF'].'?additive=neutrally&section=guestbook&page='.$back.'" class="set2">&nbsp; zurück</b>';
														}
													echo '</div>';
												}
						}
				
			echo '</div>';

	include('asx-bottom.php');
?>

Sorry wegen meiner Codeschreibweise, bin nicht geübt darin :)
 
Hallo!

Nur kurz, weil ich auf dem Sprung bin:

Das Prinzip ist folgendes:

Generiere einen Zufallsstring etwa mit md5() und unique().

1. Trage diesen einmal in einem hidden-Feld name="chal" im Formular ein, das abgesendet werden soll

2. Trage diesen auch in eine $_SESSION ein.

3. Wenn das Formular abgesendet wird, prüfst Du vor dem DB Eintrag ob $_POST['chal'] == $_SESSION['chal']. Das wird beim erstenmal der Fall sein. Nun entfernst Du nach einem erfolgreichen DB Eintrag die chal aus der $_SESSION.

4. Wird das Formular nun nocheinmal (warum auch immer) abgesendet, dann schlägt die Prüfung unter 3. fehl und es erfolgt kein weiterer DB Eintrag. Du könntest etwa nur nocheinmal eine Erfolgsmeldung zeigen.

Grüße

Martin
 
Andere möglichkeit wäre, soweit vorhanden, die IP des Absenders in einer Datenbank zu speichern und vor dem Verabeiten zu prüfen, ob die IP bereits vorhanden ist oder nicht.
 
Hallo!

Andere möglichkeit wäre, soweit vorhanden, die IP des Absenders in einer Datenbank zu speichern und vor dem Verabeiten zu prüfen, ob die IP bereits vorhanden ist oder nicht.

Kann allerdins zu Problemen führen, wenn mehrere User zur selben Zeit über einen Proxy mit derselben IP surfen (war das nicht bei den AOL Leuten so?). Ist allerdings sicher kein Problem, wenn die Seite nicht stark frequentiert ist.

Zudem, wenn es jemand darauf anlegt Dir möglichst viele Dubletten in die DB zu bringen, dann kann er die IP (automatisiert) wechseln.

Noch ein Tip:

Leg doch in Deiner DB (denke es ist MySQL) einen Unique-Index an, der für jede Nachricht eindeutig sein muß (etwa Triple aus Datum, Zeit und Emailadresse). Dann gibt mysql einen Fehler zurück und erlaubt keinen Eintrag der identisch ist.

Grüße

Martin
 
jop stimmt.. aber wer surft schon mit aol ;)
man könnte halt auch eifnfach nen cookie setzen, ist zwar auch nict 100% sicher aba was ist das schon
 
Die IP der Aol User ändert sich ja nicht sekündlich und ein Cookie lößt sich Blockieren - es sei denn man tüfftelt etwas mit einem Sessioncookie aus.
Etwas entspannter wäre doch die Variante einer Codeeingabe? Ich geh davon aus du abeitest mit Formularen?
 
Zurück