Обновление формы -> загрузка данных - PullRequest
0 голосов
/ 06 июля 2011

У меня проблема с моей формой 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>';
    }
    ?>

, пожалуйста, помогите мне решить эту проблему.

Ответы [ 3 ]

2 голосов
/ 06 июля 2011

Распространенным способом предотвращения повторной отправки формы является использование шаблона Post / Redirect / Get * .

. Вам необходимо изменить метод форм на Post тогда.После успешной отправки формы вы снова перенаправляетесь на форму, но делаете запрос на получение перенаправления.Тогда форма будет сброшена (пустые значения).

Редактировать:

Теперь, как я вижу, ваш скрипт действительно может сделать что-то похожее: после вставки в mysqlБазу данных вы можете перенаправить к себе, удалив параметры get:

<?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>';
?>
1 голос
/ 06 июля 2011

Вы использовали метод GET, поэтому при каждом обновлении страницы оно будет получать значение из URL.Попробуйте использовать метод POST ... Это решит вашу проблему и не забудьте поставить условие для POST

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

}
1 голос
/ 06 июля 2011

Итак, у вас есть проблема. И так как вы не можете избежать обновления экрана ...

Если вы делаете пост в форме, вы можете рассмотреть возможность отправки местоположения Заголовок ПОСЛЕ того, как вы вставили запись:

<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 не приведет к новой вставке в БД.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...