2016-07-18 2 views
0

Я новичок в php, и я играю вокруг, пытаясь написать веб-приложение для мини-чата. Вот мой код: страница для подключения к базе данных извлекает всю информацию, опубликованную заранее.Duplicate submit во время перезагрузки php-страницы

<?php 
    try{ 
    $bdd = new PDO('mysql:host=localhost;dbname=chat', 'root', ''); 
} 
catch(Exception $e) 
{ 
    die('Error: ' . $e->getMessage()); 
} 

    $myname =$_POST["myname"]; 
    $message =$_POST["message"]; 
    $req = $bdd->prepare('INSERT INTO users(myname, message) VALUES(
     :myname, 
     :message)'); 
     $req->execute(array(
      'myname' => $myname, 
      'message' => $message, 
     )); 
    include('page1.php'); 
    $reponse = $bdd->query('SELECT myname, message FROM users ORDER 
     BY ID DESC'); 

     while ($mydata = $reponse->fetch()) 
     { 
      echo '<p>' .($mydata['myname']) . 
      '</strong> : ' . ($mydata['message']) . '</p>'; 
        } 
?> 

Еще одна страница, которая содержит мою форму, где пользователи приходят и размещать их сообщения

<!DOCTYPE html> 
<html> 
<head> 
<meta charset="utf-8" /> 
<link rel="stylesheet" href="style.css" /> 
<script type="text/javascript" src="script.js"></script> 
<script type="text/javascript" src="jquery.js"></script> 
<title>chat</title> 
</head> 
<body> 
    <fieldset width="90"> 
     <marquee>my mini chat </marquee> 
     <form method="post" action="enregisteur.php"> 

      <label for="Identifier"> Identifier :</label> 
      <input type="text" name="myname" id="myname" value="myname" placeholder="myname"/> 
      <br> 
      <label for="message"> Messages :</label> 
      <textarea name="message" id="message" value="message"> 
      </textarea> 
         <br> 
      <input type="submit" name="validate" value=" validate " size="15"/> 

     </form> 
     </fieldset> 
</body> 
</html> 

Это хорошо работает, но есть небольшая проблема, что я хочу, чтобы получить созревший из: Я пользователь сказал user1 приходит и введите user1 и сообщения Hello, а затем нажмите кнопку «Отправить». Информация поступает в базу данных и отображается на веб-странице. Если он идет вперед и выполняет перезагрузку страницы, не нажимая на отправку, то такая же информация отправляется в базу данных и отображается снова в веб-игре. То есть у нас будет что-то вроде этого на веб-странице

После нажатия на кнопку отправить user1: Здравствуйте После перезагрузки страницы user1: Здравствуйте user1: Здравствуйте

Это произойдет после того, как каждый перезагружать

Пожалуйста, любая помощь будет приветствоваться. Спасибо.

+0

Чтобы динамически перезагружать некоторые данных без перезагрузки всей страницы, вы должны посмотреть технологию «AJAX» :)! – Julqas

+0

Я не думаю, что это проблема здесь, из того, что я понимаю, когда кто-то подает «какой-то текст» и перезагружает страницу, текст отправляется дважды в db. – Ivan

+0

SELECT и INSERT находятся на той же странице, что тоже может быть проблемой. Но да, вы правы, это не решение проблемы здесь, но поставите защиту, чтобы избежать двойного INSERT в DB при перезагрузке страницы далеко от текущего уровня OP, я думаю, что он должен увидеть большую картинку, прежде чем решить, что делать здесь :) – Julqas

ответ

0

отделить вставку и выберите запрос на разные страницы:

создать новую страницу и переместить вставки запроса:

<?php 
    try{ 
    $bdd = new PDO('mysql:host=localhost;dbname=chat', 'root', ''); 
} 
catch(Exception $e) 
{ 
    die('Error: ' . $e->getMessage()); 
} 

    $myname =$_POST["myname"]; 
    $message =$_POST["message"]; 
    $req = $bdd->prepare('INSERT INTO users(myname, message) VALUES(
     :myname, 
     :message)'); 
     $req->execute(array(
      'myname' => $myname, 
      'message' => $message, 
     )); 


    header('location:enregisteur.php'); 
?> 

И изменить действие формы на новую страницу

Смежные вопросы