gadss
gadss

Reputation: 22489

refresh = on submit in php, how to fix it?

I am creating an insert process in php but I have a problem in my code. when I refresh my page, it will also submit and insert the data.

here is my code :

<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);
?>

my question is, how can I handle when I refresh the page and it will not submit the data?

thanks in advance

Upvotes: 2

Views: 379

Answers (3)

Paul Anderson
Paul Anderson

Reputation: 1

How to fix refresh the page do not post the value using php:

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

Upvotes: 0

erik
erik

Reputation: 31

If you look at $_SERVER['REQUEST_METHOD'] variable, it will say 'POST' when the user submitted data and 'GET' when he did not. So:

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

By the way, your code is eminently vulnerable to SQLI attacks ...

Upvotes: -1

Quentin
Quentin

Reputation: 943143

When you get the POST submission:

  1. Process the data
  2. Return a Redirect response
  3. Get a GET request from the browser on the URL you redirect to
  4. Respond to that with the HTML

If the browser is refreshed, it will resubmit the GET request which your PHP won't use to modify the database.

This is the POST-REDIRECT-GET pattern. There are some more details in this blog entry (which also has example PHP code in the comments).

Upvotes: 10

Related Questions