2016-10-15 4 views
0

Я делал очень простую систему комментариев php, где пользователь просто вводит комментарий и появляется на сайте. Однако я понял, что последний комментарий будет продолжаться, пользователь обновил страницу.Комментировать система reposting comment на странице reload

Я полагал, что это как-то связано с циклом while в функции getComments, но я пробовал заголовок («Location: index.php»), и у него была другая ошибка, поэтому у меня действительно нет идей.

index.php:

<?php 
    date_default_timezone_set('Europe/Bucharest'); 
    include 'dbh.inc.php'; 
    include 'comments.inc.php'; 
?> 

<!DOCTYPE html> 
<html> 
<head> 
    <meta charset="utf-8"> 
    <link rel="stylesheet" type="text/css" href="styles.css"> 
</head> 

<body> 

<?php 
echo "<form method='POST' action='".setComments($conn)."'> 
    <input type='hidden' name='uid' value='Anonymous'> 
    <input type='hidden' name='date' value='".date('d-m-Y H:i:s')."'> 
    <textarea name='message'></textarea><br/> 
    <button type='submit' name='commentSubmit'>Comment</button> 
</form>"; 

getComments($conn); 

?> 
</body> 

</html> 

Comments.inc.php:

<?php 

function setComments($conn) 
{ 
    if (isset($_POST['commentSubmit'])) 
    { 
     $uid = $_POST['uid']; 
     $date = $_POST['date']; 
     $message = $_POST['message']; 

     $sql = "INSERT INTO comments (uid, date, message) VALUES ('$uid','$date','$message')"; 
     $result = mysqli_query($conn,$sql); 
    } 
} 

function getComments($conn) 
{ 
    $sql = "SELECT * FROM comments"; 
    $result = mysqli_query($conn,$sql); 
    while($row =$result->fetch_assoc()) 
    { 
     echo "<div class='comment-box'><p>"; 
      echo $row['uid']." "; 
      echo $row['date']."<br>"; 
      echo nl2br($row['message']); 

     echo "</p></div>"; 
    } 
} 

dbh.inc.php

<?php 
$conn = mysqli_connect('localhost', 'root', '' , 'commentsection'); 

Любая обратная связь очень ценится.

+0

Обновление обновляет форму. Взгляните на http://stackoverflow.com/questions/6320113/how-to-prevent-form-resubmission-when-page-is-refreshed-via-php. Вы также открыты для инъекций SQL. Используйте параметризованные запросы. – chris85

+1

Прежде чем исправить эту проблему, ваш код не имеет смысла. Нет никакой возможной причины, по которой у вас будет 'action' быть concat для функции, которая добавляет что-то в базу данных и ничего не возвращает. –

+0

Как мне это сделать? –

ответ

0

Так что я не знаю, если это хорошая вещь, но это, кажется, очень practical.What я наконец-то сделал это:

настроить сеанс variable.Then вместо

function getComments($conn) 
{ 
    $sql = "SELECT * FROM comments"; 
    $result = mysqli_query($conn,$sql); 
    while($row =$result->fetch_assoc()) 
    { 
     echo "<div class='comment-box'><p>"; 
      echo $row['uid']." "; 
      echo $row['date']."<br>"; 
      echo nl2br($row['message']); 

     echo "</p></div>"; 
    } 
} 

я

function getComments($conn) 
{ 
     $sql = "SELECT * FROM comments"; 
     $result = mysqli_query($conn,$sql); 
     while($row =$result->fetch_assoc()) 
     { 
      if($_SESSION["repeated"]!=$row['message']) 
      { 
      echo "<div class='comment-box'><p>"; 
       echo $row['uid']." "; 
       echo $row['date']."<br>"; 
       echo nl2br($row['message']); 
      }   
      $_SESSION["repeated"]=$row['message']; 
      echo "</p></div>"; 
     } 
} 

И это, кажется, абсолютно рабочий он имеет незначительные сбои, хотя: Если удалить все переменные в базе данных после того, как я уже отправил комментарий в этом сессии, в какой-то момент он опубликует его снова (не большое дело). Но вот и все. Я собирался отправить сообщение/переадресовать/получить, но я был немного смущен и попробовал это из любопытства, и это сработало. (Для меня) Это кажется более простым подходом, или это то, что я не вижу?

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