2

PHP で挿入プロセスを作成していますが、コードに問題があります。私がrefresh自分のページにいるとき、それもデータsubmitになりinsertます。

ここに私のコードがあります:

<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がデータではない場合、どうすれば処理できますか?

前もって感謝します

4

3 に答える 3

10

POST 送信を取得すると、次のようになります。

  1. データを処理する
  2. リダイレクト応答を返す
  3. リダイレクト先の URL でブラウザから GET リクエストを取得します
  4. HTMLでそれに応答する

ブラウザが更新されると、PHP がデータベースの変更に使用しない GET リクエストが再送信されます。

これがPOST-REDIRECT-GET パターンです。詳細については、このブログ エントリ(コメントに PHP コードの例もあります) を参照してください。

于 2012-06-21T08:27:42.493 に答える
0

ページの更新を修正する方法は、php を使用して値を投稿しません。

if ($_SERVER['HTTP_CACHE_CONTROL']=="")
{
// process the data
}
于 2012-09-12T12:06:57.323 に答える
-1

$ _SERVER ['REQUEST_METHOD']変数を見ると、ユーザーがデータを送信した場合は「POST」 、送信しなかった場合は「GET」と表示されます。それで:

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

ちなみに、あなたのコードはSQLI攻撃に対して非常に脆弱です...

于 2012-06-21T08:32:59.197 に答える