1

Проктикуюсь в самостоятельном создании небольшого блога. Проблема в том что нет добавления записи в БД.

Данные в значения прокидываются здесь .Проверил отладочной функцией

  $sql = "INSERT INTO `posts`(`title`, `texton`, `img`) VALUES('$title','$texton','$img')";

Но самой отправки в БД не происходит. Не вижу где может быть промах.Прошу помощи.Спасибо

         Логика отправления в БД
<?php
session_start();
require_once '../DB.php';

if($_SERVER['REQUEST_METHOD'] === 'POST' && isset($_POST['button-post'])) {

$title = trim( $_POST['title']); $texton = trim( $_POST['texton']); $img = $_POST['img'];

$error ='';

if (strlen($title) <= 2 ) { $error = 'Заголовок должен иметь хотя-бы 2 символа'; } elseif (strlen($texton)<= 5 ) { $error = 'У текста должно быть хоть какое-то содержание'; }

else { $sql = "INSERT INTO posts(title, texton, img) VALUES('$title','$texton','$img')";

$query = $connect-&gt;prepare($sql);

$query-&gt;execute([$title,$texton,$img]);

} }

Форма заполнения на всякий случай.

<form action="addPost_form.php" method="post" class="row justify-content-center">
        <h2>Добавление статьи</h2>
        <div class="mb-3 col-12 col-md-4 err">
            <p><?=$error?></p>
        </div>
    &lt;div class=&quot;w-100&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;mb-3 col-12 col-md-6&quot;&gt;
      &lt;label for=&quot;title&quot;&gt;Заголовок&lt;/label&gt;
      &lt;input type=&quot;text&quot; name=&quot;title&quot; id=&quot;title&quot; class=&quot;form-control&quot;&gt;
    &lt;/div&gt;

    &lt;div class=&quot;w-100&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;mb-3 col-12 col-md-8&quot;&gt;
      &lt;label for=&quot;texton&quot;&gt;Содержание&lt;/label&gt;
      &lt;textarea type=&quot;text&quot; name=&quot;texton&quot; id=&quot;texton&quot; class=&quot;form-control&quot; &gt;&lt;/textarea&gt;
    &lt;/div&gt;

    &lt;div class=&quot;w-100&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;mb-3 col-12 col-md-4&quot;&gt;
          &lt;input name=&quot;img&quot; type=&quot;file&quot; class=&quot;form-control&quot; id=&quot;img&quot;&gt;
      &lt;/div&gt;

    &lt;div class=&quot;w-100&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;mb-3 col-12 col-md-4&quot;&gt;

&lt;/div&gt;
    &lt;div class=&quot;w-100&quot;&gt;&lt;/div&gt;
    &lt;div class=&quot;mb-3 col-12 col-md-4&quot;&gt;
        &lt;button type=&quot;submit&quot; class=&quot;btn btn-secondary&quot; name=&quot;button-post&quot;&gt;Добавить&lt;/button&gt;

    &lt;/div&gt;
&lt;/form&gt;

Макc
  • 53
  • 7
  • 1
    А суть этого выражения execute([$title,$texton,$img]) ты понимаешь? – u_mulder Sep 18 '21 at 15:53
  • Насколько я знаю это запуск запроса на его выполенение с конкретными в нем данными. А команда >prepare это подготовка запроса в выполнению – Макc Sep 18 '21 at 16:56
  • должно быть VALUES(?,?,?) – Ипатьев Sep 18 '21 at 17:29
  • 1
    плюс настроить ПДО чтобы сообщал об ошибках – Ипатьев Sep 18 '21 at 17:30
  • прям заметил, большинство любит тупо лепить кавычки куда не попадя и попадается на этом https://phpize.online/?phpses=fdbc669630e9483aefbecaf1326114a5&sqlses=b79a112acee29b9a5b4dc3ecbf534980&php_version=php7&sql_version=mysql57 – Jean-Claude Sep 18 '21 at 17:31
  • 1
    Настройка как в вопросе на который переправили очень помогла.Спасибо большое.Ошибка сразу себя показала и моментом решилась – Макc Sep 18 '21 at 17:52

1 Answers1

-1

Почитайте про PDO в PHP, и как с ним правильно работать. Вот, хорошая документация, или конкретно, как добавлять данные в таблицу.

Ваш код должен выглядеть так:

$sql = "INSERT INTO `posts`(`title`, `texton`, `img`) VALUES (:title, :texton, :img)";

$query = $connect->prepare($sql);

$query->execute([ 'title' => $title, 'texton' => $texton, 'img' => $img ]);

MyZik
  • 2,861
  • 1
    двоеточия потерял в массиве плейсхолдеров – Jean-Claude Sep 18 '21 at 16:34
  • Точно, спасибо :) – MyZik Sep 18 '21 at 16:38
  • Забавно, но даже после прочтения туториала, вы сделали неправильно – Ипатьев Sep 18 '21 at 16:55
  • Что неудивительно, поскольку документация по ссылке оставляет желать лучшего – Ипатьев Sep 18 '21 at 16:57
  • Ну это не помогло, по прежнему данные отправляются просто в пустоту. Я кстати не особо заметил разницу в отправке.То есть в значения я сразу подставлял заполненные данные,а тут в зарпосе на выполнение идет присвоение.В этом и все разница насколько я понял.Я самоучка,мне долго еще учить и усваивать.Но тут что-то не могу второй день найти ошибку и сюда обратился. Ни у кого нет вариатов что может быть не так? – Макc Sep 18 '21 at 17:03
  • @Jean-Claude а зачем prepare-то 2 раза? :) – Ипатьев Sep 18 '21 at 17:31
  • @Ипатьев скопировал блок не задумываясь – Jean-Claude Sep 18 '21 at 17:32