@Taronei

Как починить добавление коментариев?

Приветствую,как мне починить добавление коментариев?,комментарий добавляются на при этом при каждой обновлений страницы добавляется пустой коментарий хотя кнопка добавления не нажималась,ну или просто при переходе в статью добавляется пустой коментарий.
код файла с добавлением коментарий
<?php
 require "includes/config.php";
 ?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <title><?php echo $config['title']; ?></title>
  <!-- Bootstrap Grid -->
  <link rel="stylesheet" type="text/css" href="/media/assets/bootstrap-grid-only/css/grid12.css">
  <!-- Google Fonts -->
  <link href="https://fonts.googleapis.com/css?family=Roboto:300,400,500,700" rel="stylesheet">
  <!-- Custom -->
  <link rel="stylesheet" type="text/css" href="/media/css/style.css">
</head>
<body>
<div id="wrapper">
<?php include "includes/header.php";?>
<?php 
$article = mysqli_query($connection, "SELECT * FROM `articles` WHERE `id` = " . (int) $_GET[id]);
if(mysqli_num_rows($article) <= 0 ){
  ?>
  <div id="content">
      <div class="container">
        <div class="row">
          <section class="content__left col-md-8">
            <div class="block">
              <h1>Статья не существует!<h1>
              <div class="block__content">
                <div class="full-text">
                 Запрашиваемая вами статья не существует!
                </div>
              </div>
            </div>
          </section>
          <section class="content__right col-md-4">
            <?php require "includes\sitebar.php"; ?>
          </section>
        </div>
      </div>
    </div>
    <?php
  } else 
{
    $art = mysqli_fetch_assoc($article);  
    mysqli_query($connection, "UPDATE `articles` SET `views` = `views` + 1 WHERE `id` = " . (int) $art['id']);
  ?>
  <div id="content">
      <div class="container">
        <div class="row">
          <section class="content__left col-md-8">
            <div class="block">
              <a><?php echo $art['views'];?>Просмотров</a>
              <h2><?php echo $art['title'];?></h2>
              <div class="block__content">
                <img src = "static/images/<?php echo $art['image'];?>" style="max-width: 100%;">
                <div class="full-text">
                  <?php echo $art['text']; ?></div>
              </div>
            </div>    
        <div class="block">
          <a href="#comment-add-form">Добавить свой</a>
              <h3>Коментарии</h3>
              <div class="block__content">
                <div class="articles articles__vertical">
                  <?php
                   $comments = mysqli_query($connection, "SELECT * FROM `comments` WHERE `articles_id` = " . (int) $art['id'] . " ORDER BY `id` DESC");             
                if( mysqli_num_rows($comments) <= 0)
                {
                  echo "Нет коментариев!";
                }
                
                  while ($comment = mysqli_fetch_assoc($comments))
                  {
                    ?>
                    <article class="article">
                    <div class="article__image" style="background-image: url(https://www.gravatar.com/avatar/<?php echo md5($comment['email'])?>?s=125];?>);"></div>
                    <div class="article__info">
                      <a href="/article.php?id=<?php echo $comment['articles_id']; ?>"><?php echo $comment['author'];?></a>                    
                      <div class="article__info__meta"> </div>
                      <div class="article__info__preview"><?php echo $comment['text']; ?><div>
                       </div>
                       </article>
                    <?php
                  } 
                  ?>
                </div>
              </div>
            </div>
            <div id="comment-add-form" class="block" >
              <h3>Добавить комментарий</h3>
              <div class="block__content">
                <form class="form" method="POST" action="/article.php?id=<?php echo $art['id']; ?>#comment-add-form">
                  <?php
                  mysqli_query($connection, "INSERT INTO `comments` (`author`,`email`,`text`,`pubdate`,`articles_id`) VALUES ('".$_POST['author']."', '".$_POST['email']."', '".$_POST['text']."', NOW(), '".$art['id']."')");
                  if( isset($_GET['do_post']) )
                  {
                    $error = array();
                    if($_POST['author'] == '')
                    {
                      $errors[]= 'Введите ваш никнейм!';
                    }
                    if($_POST['email'] == '')
                    {
                      $errors[]= 'Введите Email!';
                    }
                    if($_POST['text'] == '')
                    {
                      $errors[]= 'Введите текст коментария!';
                    }
                    if( empty($errors))
                    {
                      //добавить коментарий
                                            echo '<span style ="color:green;font-weight: bold;margin-bottom: 10px;display: block;">Коментарий успешно добавлен!</span>';
                    } else
                {
                  //вывести ошибку
                  echo '<span style ="color:red;font-weight bold;margin-bottom: 10px;display: block;">' .$errors['0'] .'</span>';
                }
             }
                ?>
                  <div class="form__group">
                    <div class="row">
                        <div class="col-md-6">
                        <input type="text" class="form__control" required="" name="author" placeholder="Никнейм" value="<?php echo $_POST['author']; ?>">
                      </div>
                        <div class="col-md-6">
                        <input type="text" class="form__control" required="" name="email" placeholder="Email (не будет показан)" value="<?php echo $_POST['email']; ?>">
                      </div>
                    </div>
                  </div>
                  <div class="form__group">
                    <textarea name="text" required="" class="form__control" placeholder="Текст комментария ..."><?php echo $_POST['text']; ?></textarea>
                  </div>
                  <div class="form__group">
                    <input type="submit" class="form__control" name="do_post" value="Добавить комментарий">
                  </div>
                </form>
              </div>
            </div>
        </section>
          <section class="content__right col-md-4">
            <?php require "includes\sitebar.php"; ?>
          </section>
        </div>
      </div>
    </div>
  <?php
}
?>  
    <?php include "includes/footer.php"?>
  </div>
</body>
</html>
  • Вопрос задан
  • 96 просмотров
Решения вопроса 1
rozhnev
@rozhnev Куратор тега PHP
Fullstack programmer, DBA, медленно, дорого
Во-первых: поставьте запись в базу после условия
Во-вторых: прочитайте про SQL-injection и используйте prepared satatements
if( empty($errors))
{
    //добавить коментарий
    $stmt = $connection->prepare("INSERT INTO `comments` (`author`,`email`,`text`,`pubdate`,`articles_id`) VALUES (?, ?, ?, NOW(), ?)");
    $stmt->bind_param("sssi", $_POST['author'], $_POST['email'], $_POST['text'], $art['id']);
    $stmt->execute();
    echo '<span style ="color:green;font-weight: bold;margin-bottom: 10px;display: block;">Коментарий успешно добавлен!</span>';
 }
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы