2014-10-02 2 views
1

Im возникают проблемы с несколькими PHP-страниц, следующий код, например, толькоПредотвратить "пост снова" в PHP

form.php

<form mehtod="post" action="submit.php"> 
<input type="text" name="theTextbox"/> 
<input type="submit"/> 
</form> 

submit.php

<?php 
$theText = $_POST['theTextbox']; 
mysqli_query($link,"INSERT into textlist (text) VALUES ('$theText')"); 
mysqli_query($link,"SELECT * FROM textlist ORDER by inserted LIMIT1"); 
...some fetch stuff... 
echo "Last insert ID is...".$lastID 
?> 

Итак, если я введу «1234» в текстовое поле, на form.php и нажмите «Отправить», запись будет вставлена ​​в таблицу с 1 234 в "текст" и "ид" становится как 20 ....

эхо на submit.php является "Последняя вставка ID это ... 20" ..

Но теперь .... проблема если я ссылаюсь на страницу, firefox спрашивает меня, хочу ли я снова укусить. Если я нажму YES, тот же текст получит вставку, а идентификатор станет 21.

Я не могу посоветовать пользователю, чтобы не использовать эту функцию. ... и Google Chrome даже не спрашивает.

Как это можно предотвратить?

+1

Вы можете перенаправить их обратно на пустую форму/на другую страницу? Вы также широко открыты для атаки SQL-инъекций. –

+1

перенаправить на пустую форму, например, @ ʰᵈˑ, или сделать какую-то проверку против двойных записей. – Azrael

+0

** Danger **: вы уязвимы для [SQL-инъекций] (http://bobby-tables.com/) **, которые вам нужно [защищать] (http://stackoverflow.com/questions/ 60174/best-way-to-prevent-sql-injection-in-php). – Quentin

ответ

4

После того, как вы ввели его, перенаправите пользователя с помощью header() таким образом, что браузер потеряет информацию $ _POST, однако вам нужно будет использовать сеансы для отправки данных назад.

Пример:

post_form.php

<?php 
session_start(); 
$theText = $_POST['theTextbox']; 
mysqli_query($link,"INSERT into textlist (text) VALUES ('$theText')"); 
mysqli_query($link,"SELECT * FROM textlist ORDER by inserted LIMIT1"); 
$_SESSION['last_id'] = $lastID; 
header('Location: /form.php'); 
?> 

form.php

<?php 
session_start(); 
echo "Last insert ID is...".$_SESSION['last_id']; 
?> 

С <form> вы будете отправлять сообщения в post_form.php, то после того, как строка была вставлена ​​он будет установить сеанс и перенаправить пользователя обратно в form.php

+0

Это также ошибка. Вам не хватает точки с запятой, чтобы закончить эхо. –

+0

как насчет эха ?, он уйдет! –

+1

Отредактировал свой ответ, ребята, терпение, молодые падаваны. – Karl

Смежные вопросы