0

PHP フォームに問題があります。ページを更新するたびに、古いデータがデータベースに自動的に挿入されます。私のコードは次のとおりです。

<?php
   if(isset($_GET['send'])){
      isset($_GET['name'])?$name = $_GET['name']:"";
      isset($_GET['score'])?$score = $_GET['score']:0;

      $con = mysql_connect('localhost','root','') or die(mysql_error());
             mysql_select-db('student',$con) or die(mysql_error());
      $qry = mysql_query('INSERT INTO student(name, score) VALUES('$name', $score)') or die(mysql_error());

      $display = mysql_query('SELECT * FROM student',$con) or die(mysql_error());
      echo '<table border=1>';
      while($rows = mysql_fetch_array($display)){
          echo '<tr>';
          echo "<td>$rows['id']</td>";
          echo "<td>$rows['name']</td>";
          echo "<td>$rows['score']</td>";
          echo '</tr>';
      } 
      echo '</table>';
    }
    ?>

この問題を解決するのを手伝ってください。

4

3 に答える 3

2

フォーム送信の重複を防ぐ一般的な方法は、Post/Redirect/Get Patternを利用することです。

次に、フォーム メソッドをPostに変更する必要があります。フォームの送信が成功した後、再度フォームにリダイレクトしますが、リダイレクトを get リクエストにします。その後、フォームはリセットされます (空の値)。

編集:

今私が見ているように、あなたのスクリプトは実際に似たようなことをすることができます: mysql データベースに挿入した後、取得パラメータを削除してそれ自体にリダイレクトできます:

<?php
if(isset($_GET['send'])){
  isset($_GET['name'])?$name = $_GET['name']:"";
  isset($_GET['score'])?$score = $_GET['score']:0;

  $con = mysql_connect('localhost','root','') or die(mysql_error());
         mysql_select-db('student',$con) or die(mysql_error());
  $qry = mysql_query('INSERT INTO student(name, score) VALUES('$name', $score)') or die(mysql_error());
  header('Location: myscriptsurl.php');
  exit;
}

$display = mysql_query('SELECT * FROM student',$con) or die(mysql_error());
echo '<table border=1>';
while($rows = mysql_fetch_array($display)){
  echo '<tr>';
  echo "<td>$rows['id']</td>";
  echo "<td>$rows['name']</td>";
  echo "<td>$rows['score']</td>";
  echo '</tr>';
} 
echo '</table>';
?>
于 2011-07-06T10:04:22.267 に答える
1

U は GET メソッドを使用しているため、ページが更新されるたびに URL から値が取得されます。POSTメソッドを使用してみてください...それはあなたの問題を解決し、POSTの条件を入れることを忘れないでください

if(isset($_POST))
{
   /* Your Insert Code */

}
于 2011-07-06T10:14:06.080 に答える
1

だからあなたは問題を抱えています。そして、画面の更新は避けられないので...

フォーム投稿を行っている場合は、レコードを挿入した後にロケーション ヘッダーを送信することを検討してください。

<form action="process.php" method="POST">
<input type="text" name="number">
<input type="sumbit">
</form>

次に、process.php から: // 投稿に基づいてデータベースに挿入しますか?

header("Location: http://www.example.com/thanks.php");
// do not forget the exit, since your script will run on without it.
exit;

そのようにして、スクリプトは投稿を処理し、ブラウザをにリダイレクトしますthanks.php. のリロードはthanks.php、新しいデータベース挿入にはなりません。

于 2011-07-06T10:05:59.383 に答える