Я пытаюсь просмотреть некоторые поля ввода в форме и добавить их в базу данных. Пользователь задает количество полей, поэтому я не могу сделать что-то вроде кода ниже, потому что нет определенного количества полей.
for($i=0; $i<(number-of-fields); $i++) { $_REQUEST['Question+$i'] }
Я тоже пробовал это:
<?php $con=mysqli_connect("","test","test","Flashcards"); foreach($_REQUEST['Question[]'] as $value) { $newcards="INSERT INTO Cards(Questions) VALUES($value)"; mysqli_query($con,$newcards); } mysqli_close($con); ?>
Он просто ничего не добавляет к моей базе данных. Как мне это сделать? Я новичок в PHP и SQL и не могу понять этого.
Данный:
<input type="text" name="foo[]" /> <input type="text" name="foo[]" /> etc...
в вашей форме, вы будете перебирать их с помощью
foreach($_POST['foo'] as $index => $value) { ... }
Имя []
в имени поля будет удалено PHP и использовано как подсказка о том, что он должен ожидать несколько значений с тем же именем, заставляя его создавать под-массив внутри $ _GET / $ _ POST для размещения этих дополнительных значений.
Вы также можете указать, какие ключи ключей следует использовать PHP, например
<input type="text" name="foo[1]" value="hi there" /> <input type="text" name="foo[abc]" value="TGIF!" /> echo $_POST['foo'][1]; // outputs "hi there" echo $_POST['foo']['abc'] // outputs "TGIF!"
Многомерные массивы также поддерживаются с использованием тех же методов нотации / доступа.
вы можете назначить входные имена, как он, следуя (используя javascript), и создать скрытое поле, которое содержит число полей, поэтому, когда пользователь добавляет больше полей ввода, скрытое поле обновляется динамически.
<input name="field_1"> <input name="field_2"> <input name="field_3"> <input type="hidden" name="count" value="3">
поэтому, когда вы публикуете это сообщение, вы знаете, сколько полей у вас есть.
ОК.
Не знаете, как выглядит ваша база данных. Должно ли каждое поле формы быть отдельной строкой или отдельной колонкой? Кажется, что ваш код делает первый, но похоже, что вы хотите последнего? Если это последний, вам действительно нужно будет назвать ваши входные данные, как отметил Амир Нури.
Предполагая, что у вас есть такая форма:
<form method="POST" action="myphp.php`> <input type="text" name="column_name_one" /> <input type="text" name="column_name_two" /> <input type="text" name="column_name_three" /> <input type="submit" name="submit" value="submit" />
тогда
<?php if (isset $_POST['submit'] { $con=mysqli_connect("","test","test","Flashcards"); $values = array(); $columns = array(); foreach($_POST[] as $key => $value) { if (!empty($key) && $key != "submit") { $values[] = $con->real_escape_string($value); $columns[] = $con->real_escape_string($key); } } $colStr = implode(",",$columns); $valStr = implode("','",$values); $myQuery = "INSERT INTO Cards($colStr) VALUES ('$valStr'); if (!$con->query($myQuery)) { echo "Error Occured: $con->error"; } } ?>
Теперь это работает только тогда, когда имена столбцов совпадают с именами ваших форм. Также предполагается, что это все строки (varchar и т. Д.). Если это не так, вам необходимо обработать это путем простого доступа к полям формы по имени. Один простой способ:
<? if (isset($_POST['name']) && !empty($_POST['name']) { //name field maps to cName column varchar $colStr = "cName,"; $valStr = "'" . $_POST['age'] . "',"; //need quotes } if (isset($_POST['age']) && !empty($_POST['age']) { //age field maps to customerAge column numeric $colStr .= "customerAge,"; $valStr .= $_POST['age'] . ","; //no quotes } ?>
Или используйте array_map () для сопоставления массива имен столбцов для формирования полей. Что-то вроде этого также может помочь, если вам нужно убедиться, что все имена переменных post действительно являются именами столбцов, и кто-то не пытается отправить вам мусор. Очевидно, что вставка не удастся, если имена столбцов неверны, но обычно лучше не позволять даже пытаться вставить плохой запрос.