2012-06-21 3 views
2

Я создаю процесс вставки в php, но у меня есть проблема в моем коде. когда я refresh моей странице, он также будет submit и insert данных.refresh = on submit in php, как его исправить?

вот мой код:

<form action="/drupal/node/1" method="post"> 
Name: <input type="text" name="name" /> 
Price: <input type="text" name="price" /> 
Minutes: <input type="text" name="minutes" /> 
<input type="submit" /> 
</form> 
<?php 
$con = mysql_connect("localhost","root",""); 
if (!$con) 
    { 
    die('Could not connect: ' . mysql_error()); 
    } 

// some code 
mysql_select_db("zain", $con); 
if (isset($_POST['name']) && isset($_POST['price']) && isset($_POST['minutes'])) 
{ 
$val_name = $_POST['name']; 
$val_price = $_POST['price']; 
$val_min = $_POST['minutes']; 
$max_id_sql = mysql_query("SELECT MAX(id) FROM card_category"); 
$data = mysql_fetch_array($max_id_sql); 
if ($data[0]==0) 
{ 
    $val_id = 1; 
} 
else 
{ 
    $val_id = $data[0] + 1; 
} 

mysql_query("INSERT INTO card_category (id, name, price, minutes) VALUES ($val_id,'$val_name',$val_price,$val_min)"); 
$_POST['name'] == NULL; 
$_POST['price'] == NULL; 
$_POST['minutes'] == NULL; 
} 
$result = mysql_query("SELECT * FROM card_category"); 

echo "<table border='1'> 
<tr> 
<th>id</th> 
<th>name</th> 
<th>price</th> 
<th>mins</th> 
</tr>"; 

while($row = mysql_fetch_array($result)) 
    { 
    echo "<tr>"; 
    echo "<td>" . $row['id'] . "</td>"; 
    echo "<td>" . $row['name'] . "</td>"; 
echo "<td>" . $row['price'] . "</td>"; 
    echo "<td>" . $row['minutes'] . "</td>"; 
    echo "</tr>"; 
    } 
echo "</table>"; 
if (isset($_POST['lastname'])) 
{ 
print $_POST['lastname']; 
} 
mysql_close($con); 
?> 

мой вопрос, как я могу справиться, когда я refresh страницу, и это не submit Будут ли эти данные?

заранее спасибо

+0

Проверьте очень первый ответ - http://stackoverflow.com/questions/10827242/understanding-post-redirect-get – verisimilitude

+0

@gadss - У вас [главное отверстие безопасности] (http://bobby-tables.com/). – Quentin

ответ

10

Когда вы получите представление POST:

  1. обрабатывать данные
  2. возвращающего Перенаправление ответ
  3. Получить запрос GET из браузера на URL вы переадресованы на
  4. Ответьте на это с помощью HTML

Если браузер обновлен, он повторно представит запрос GET, который ваш PHP не будет использовать для изменения базы данных.

Это POST-REDIRECT-GET pattern. Есть еще несколько деталей in this blog entry (в которых также есть пример кода PHP в комментариях).

+1

Практически Quentin означает использование заголовка ('Location: * url *'); Прочтите его ссылку - это концепция, о которой вы должны знать. –

-1

Если посмотреть на $ _SERVER [ ''] REQUEST_METHOD переменной, он будет говорить 'POST' когда пользователь представил данные и 'GET', когда он не сделал. Итак:

if($_SERVER['REQUEST_METHOD']=='POST') 
{ 
    // process the data 
} 

Кстати, ваш код является в высшей степени уязвимы для атак SQLI ...

+0

Когда браузер обновится, он сделает тот же запрос, что и он, чтобы получить страницу в первую очередь ... это почтовый запрос, так что это не сработает. – Quentin

0

Как исправить обновить страницу, не размещайте значение с помощью PHP:

if ($_SERVER['HTTP_CACHE_CONTROL']=="") 
{ 
// process the data 
} 
+0

Не могли бы вы добавить комментарии для своего кода? Почему вы думаете, что это решение, объясните себе немного больше. – Yaroslav