Вставлять данные только в одну строку в цикле

#php #mysql #sql

#php #mysql #sql

Вопрос:

У меня есть две таблицы (table_server) и (table_comment). Когда я помещаю данные в table_comment внутри цикла table_server, он помещает данные в каждую строку таблицы.

Есть ли способ просто вставить данные только в одну строку на основе row-parent_id? Итак, если я пишу комментарий в строке 4, то он регистрируется только в строке 4.

Пример моего table_comment

 echo "<ul>";
if($result-> num_rows > 0){
    while($row = $result-> fetch_assoc()){

        $theRowId = $row['ID'];

        if(isset($_POST['commentSubmit'])){
            $comment = $_POST['comments'];

            if(!empty($comment)){
                $sqlss = "INSERT INTO table_comment(parent_id, comment) VALUES ('$theRowId', '$comment')";
                $resultss = $conn->query($sqlss);
            }
        }
  

Моя форма html

 <form method='POST' action='index.php' id='singleAmountForm'>
   <textarea class='txtarea' id='".$row['ID']."' name='comments' placeholder='Comment...' rows=6></textarea>
   <button type='submit' name='commentSubmit' id='insertComment' class='visa-fler'>Add comment</button>
</form>
  

Посмотреть пример
table_info = table_server

Комментарии:

1. Это трудно понять. Какой первый запрос, результаты которого вы просматриваете? Зачем вы используете цикл, если не хотите использовать все строки? Или, может быть, для первого запроса требуется WHERE предложение, поэтому он извлекает только одну строку, которую вы хотите использовать.

2. Вы уверены, что вам вообще нужен цикл PHP? Почему бы не использовать INSERT INTO table_comment(parent_id, comment) SELECT ID, '$comment' FROM table_server WHERE ...

3. Ваша форма должна отправлять поле ввода, в котором указано, какую строку вы комментируете. Затем вы используете это в WHERE предложении SELECT , чтобы получить только этот идентификатор строки.

4. Спасибо за ваш ответ @Barmar, Мой первый цикл для выбора всех элементов / строк сервера, и внутри этих строк у меня есть комментарии (цикл выдает все комментарии). что мне нужно, так это иметь возможность комментировать каждую строку table_server, чтобы у каждой строки было свое поле комментария

5. Как пользователь сообщает ему, какую строку он комментирует?

Ответ №1:

Введите идентификатор строки в скрытый ввод или значение кнопки отправки.

 <form method='POST' action='index.php' id='singleAmountForm".$row['ID']."'>
   <textarea class='txtarea' id='".$row['ID']."' name='comments' placeholder='Comment...' rows=6></textarea>
   <button type='submit' name='commentSubmit' id='insertComment".$row['ID']."' class='visa-fler' value='".$row['ID']"'>Add comment</button>
</form>
  

Я также изменил все идентификаторы в форме, чтобы они включали идентификатор строки, потому что у вас не должно быть повторяющихся идентификаторов в DOM (но, возможно, этим элементам даже не нужны идентификаторы, поскольку они меняются динамически).

Затем вы можете вставить комментарий (это не обязательно делать в цикле). Лучше всего использовать подготовленную инструкцию для защиты от внедрения SQL.

 if(!empty($_POST['commentSubmit']) amp;amp; !empty($_POST['comments'])){
    $sqlss = "INSERT INTO table_comment(parent_id, comment) VALUES (?, ?)";
    $stmt = $conn->prepare($sqlss);
    $stmt->bind_param("ss", $_POST['commentSubmit'], $_POST['comments']);
    $stmt->execute($sqlss) or die($stmt->error);
}