Вставляются пустые строки в таблицу MYSQL

введите сюда описание изображения

<?php
include('../includes/config.php');
 
include('../includes/db.php');
?>
<body>
<?php include "header.php"  ?>

         <div class="block" id="comment-add-form">
          <h3>Добавить Пост</h3>
          <div class="block__content">
            <form class="form__control"  method="POST" action="http://pblog/">
                <?php //post.php?id=<?php echo $current_id;

                mysqli_query($connection, "INSERT INTO `posts`( `title`,`content`)
                    VALUES ('".$_POST['name']."','".$_POST['content']."')");

         ?>

              <div class="form__group">
                <div class="row">
                  <div class="col-md-6">
                    <input type="text" required="" class="form__control"  value="" name="title" 
                     placeholder="Заголовок">
                  </div>

                </div>
              </div>
              <div class="form__group">
                <textarea name="content" required=""  class="form__control" value="" 
                      placeholder="Текст  ..."></textarea>
              </div>
              <div class="form__group">
                <input type="submit"  class="form__control" name="do_post" value="Добавить">
              </div>
            </form>
          </div>
        </div>
        <?php include "footer.php"  ?>
        </body>
        <?php
     
    //require_once"config.php";
     
    mysqli_report(MYSQLI_REPORT_ERROR | MYSQLI_REPORT_STRICT);
    $connection = mysqli_connect(
            $config['db']['server'] ,
            $config['db']['username'],
            $config['db']['pasword'],
            $config['db']['db_name']
    );
     
    if($connection == false)
    {
        echo "error";
        echo mysqli_connect_error();
    }
     
     
    
    ?>


Ответы (1 шт):

Автор решения: Михаил Ребров

А чего Вы еще хотели?
Вставить SQL между тегами <form></form> это не значит обработать форму.
В идеале в action должна быть указана ссылка на скрипт, единственной задачей, которого является обработка запроса данной формы.

Возможно и случаи, когда один и тот же скрипт и отображает форму и обрабатывает данные формы.
Но стоит помнить что это два совершенно разных запроса!!!
В вашем же случае, данные пытались вставиться при каждой загрузке страницы.

в таких случаях ставят проверку на HTTP метод.

  • GET запрос отображает форму
  • POST запрос обрабатывает данные формы

В коде это выглядит как-то так:

if ($_SERVER['REQUEST_METHOD'] == 'GET'){
   // отображение формы
}
if ($_SERVER['REQUEST_METHOD'] == 'POST'){
   // обработка формы
}

Также обратите внимание на следующее

<input type="text" required="" class="form__control"  value="" name="title" placeholder="Заголовок">

в форме вы заполняете поле title

mysqli_query($connection, "INSERT INTO `posts`( `title`,`content`)
                    VALUES ('".$_POST['name']."','".$_POST['content']."')");

а в запросе обращаетесь к $_POST['name']

не надо так.
нужно привести либо к одному либо ко второму.

В итоге:

<?php
include('../includes/config.php');
include('../includes/db.php');
?>
<body>
<?php include "header.php"  ?>
<div class="block" id="comment-add-form">
    <h3>Добавить Пост</h3>
    <div class="block__content">
        <?php if ($_SERVER['REQUEST_METHOD'] == 'GET'){ ?>
            <form class="form__control"  method="POST" action="http://pblog/">
                <div class="form__group">
                    <div class="row">
                        <div class="col-md-6">
                            <input type="text" required="" class="form__control"  value="" name="name" placeholder="Заголовок">
                        </div>
                    </div>
                </div>
                <div class="form__group">
                    <textarea name="content" required=""  class="form__control" value="" placeholder="Текст  ..."></textarea>
                </div>
                <div class="form__group">
                    <input type="submit"  class="form__control" name="do_post" value="Добавить">
                </div>
            </form>
        <?php }elseif ($_SERVER['REQUEST_METHOD'] == 'POST'){
            mysqli_query($connection, "INSERT INTO `posts`( `title`,`content`)
                    VALUES ('".$_POST['name']."','".$_POST['content']."')");?>
            <p style="color: #00FF00;border: 1px solid #00FF00; background-color: rgba(0,255,0,0.3); padding: 25px;text-align: center">
                Пост сохранен
            </p>
        <?php } ?>
    </div>
</div>
<?php include "footer.php"  ?>
</body>
→ Ссылка