Не могу вставить в mysql из html формы с несколькими вариантами, используя php

0

Я новичок в этом, так что извините, если это очень простой вопрос. Когда я пытаюсь вставить в MySQL, используя HTML-форму с несколькими вариантами, он вставляет только последний вариант, выбранный из выпадающего списка, но вставляет этот параметр несколько раз.

HTML

<form action ="test_page.php" method="post">
     <select name= fruit[] size="8" multiple>
         <option value ="Apples" >Apples</option>
         <option value ="Oranges" >Oranges</option>
         <option value ="Bananas" >Bananas</option>
         <option value ="Grapes" > Grapes </option>
         <option value ="Strawberries"> Strawberries</option>
    </select>
    <br><br>
    <input type="submit" name="submit" value="Submit" />
</form>'

А вот и PHP

<?php

foreach ($_POST["fruit"] as $favourite)
{
    $sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) VALUES ('$favourite','$favourite','$favourite', '$favourite');";
}

if ($conn->multi_query($sql) === TRUE)  {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>"  .  $conn->error;
}

$conn->close();
?>
  • 3
    вам нужно запустить запрос в цикле или объединить запрос, чтобы выполнить его один раз, в настоящее время вы перезаписываете $ sql в цикле, поэтому вы получаете только последний
  • 1
    Предупреждение: вы широко открыты для SQL-инъекций и должны действительно использовать параметризованные подготовленные операторы вместо того, чтобы вручную создавать подобные запросы. Тем более, что вы вообще не избегаете пользовательских вводов! Это дополнительное значение при использовании мульти-запроса , так как любые пройти полное выражение SQL , который стирает всю БД.
Показать ещё 3 комментария
Теги:
option

2 ответа

-1

Я нашел вашу проблему! Таким образом, вы на самом деле устанавливаете $sql несколько раз с foreach, выполняя только последний.

Ну вот так;

foreach ($_POST["fruit"] as $favourite)
{
$sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) 
 VALUES ('$favourite','$favourite','$favourite', '$favourite');";
}

Это полный рабочий код!

<?php

foreach ($_POST["fruit"] as $favourite)
{
$sql = "INSERT INTO Fruit_table (Apples, Oranges, Bananas, Grapes) 
 VALUES ('$favourite','$favourite','$favourite', '$favourite');";

if ($conn->query($sql) === TRUE)  {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>"  .  $conn->error;
}
}

$conn->close();
?>

Итак, я изменился только до тех пор, пока не будет foreach(). Это должно работать сейчас!

  • 0
    Все еще использует multi_query без всякой причины, и теперь имеет multi_query для SQL-инъекции вместо сломанной. «Работа» означает «книгой», а не «может функционировать в чрезвычайно узком наборе обстоятельств и имеет побочные эффекты, которые могут включать в себя потерю контроля над вашей базой данных и / или вашей компанией».
  • 1
    Этот код даже не решает проблему, теперь он вставляет N записей, по одной на каждую проверенную вещь, и во всех них есть все заполненные столбцы.
-3

Добавьте кавычки вокруг имени.

Из этого:

<select name=fruit[] size="8" multiple>

к этому:

<select name="fruit[]" size="8" multiple>
  • 1
    На самом деле, это будет работать и без кавычек. ОП также говорит, что вставлен только последний выбранный элемент, что означает, что форма действительно публикует его правильно и что проблема в коде PHP.

Ещё вопросы

Сообщество Overcoder
Наверх
Меню