Защо когато рефрешна страницата ми презаписва последнота инф

lfc321

Registered
Защо в случая ми презаписва последната информация, която въвеждам във формата. Когато цъкна рефреш бутона горе до URL-а ми копира последния ред от таблицата в БД-то. Как да го оправя ?

Ето и кода:
Код:
 <?php
  $posted = false;
  if(isset($_POST['add']))
  {
   $posted = true;
	$email = $_POST['email'];
	$name = $_POST['name'];
	$rate = $_POST['rate'];
	$comment = $_POST['comment'];
	$dth = date("Y-m-d H:i:s");
	$q = "INSERT INTO reviews(email, name, rate, comment, date_created) VALUES ('$email', '$name', '$rate', '$comment', '$dth')";
	$k = mysqli_query($con,$q);
	}
 ?>
<body>
<?php
	$select_reviews = "SELECT comment, rate FROM reviews ORDER BY date_created DESC LIMIT 4" or die("Не може да изпълни заявката");
	$run_reviews = mysqli_query($con, $select_reviews);
	while ($review = mysqli_fetch_assoc($run_reviews)){
	$post_review = $review['comment'];
	$post_rate = $review['rate']
	
	?>
	<div class='comment'> <?php echo $post_review; ?></div>
	<div class='rate'> <?php echo $post_rate; ?>  </div>
		<div>-----------------</div>
<?php
	}
?>



<h1>Leave a review</h1>
<div class="error-conteiner">

</div>
<div class="clear"></div>
<form action="" method="post" class="form-content">
	<div class="left">
		<div class="field">
			<label>E-mail <span class="required">*</span></label>
			<input type="text" value="" name="email" class="required-field" data-validate="email"/>
		</div>
		<div class="clear"></div>
		<div class="field">
			<label>Name</label>
			<input type="text" value="" name="name"/>
		</div>
		<div class="clear"></div>
		<div class="field">
			<label>Rate</label>
			<select name="rate">
				<option value=''>Choose rate</option>
				<option value='1'>1</option>
				<option value='2'>2</option>
				<option value='3'>3</option>
				<option value='4'>4</option>
				<option value='5'>5</option>
			</select>
		</div>
	</div>
	<div class="left">
		<label>Comment <span class="required">*</span></label>
		<textarea name="comment" class="comment required-field"></textarea>
	</div>
	<input type="submit" value="Send" class="btn" name="add" />
	
</form>
<?php
	if($posted){
	if($k)
	echo "Thank you for your comment!";
 
 else
	die(mysqli_error());
 }

 ?>
</body>
 
Ако ползваш F5 вероятно след пратената заявка ти излиза едно прозорче (ако не е изключено) дали да зареди страницата и да изпрати заявката отново. Просто използвай вътрешна връзка или прочие или някаква сесия, тъй като информацията от линка се подава отново.
 
Това е недомислица в браузърите - при рефреш на страница, която има активна сесия за изпратени данни към сървъра с метод ПОСТ - браузъра отново субмитва информацията. Най-лесния механизъм за превенция е веднага след подвърждаването на данните от сървъра, страницата да бъде пренасочена. По този начин сесията се унищожава и няма опасност да се дублира изпратената информация. Друг прост вариант е да не се използва субмит форма, а да се реализира аякс комуникация. При този начин има повече динамика, но пък и малко повече драскании с js-та, което не винаги е приятно.
 

Back
Горе