Хорошо, теперь у меня есть 2 поля ввода на флажке, и еще одно - вводимый текст как это
<input type = "text" name = "student[]">
<input type = "checkbox" name = "marks[]">
Теперь я хочу вставить все данные в базу данных. Как вставить одновременно.
это пример php want, но только один массив
foreach($student as $value){
$sql = "INSERT INTO `academic` ('student', `mark`) VALUES ('$value','mark')";
if (mysqli_query($conn, $sql)){
echo "Insert mark for student ".$value." complete<br>";
} else {
echo "Error: " . mysqli_error($conn);
}
}
как сделать так, чтобы он мог одновременно вставлять 2 разных массива?
Пожалуйста, покажите нам, как будет выглядеть ожидаемый результат (пример данных в базе данных).
Выполните два цикла foreach. Один для $student
и другой для $marks
, который будет внутри $student
.
@AmrAly - Использование PDO само по себе не поможет вам против SQL-инъекций. Вам необходимо использовать подготовленные операторы, что также можно сделать с помощью mysqli.
OP действительно должен показать нам ожидаемый результат, прежде чем мы сможем дать правильный ответ. Кстати, в форме есть несколько студентов? Если да, то как узнать, какие отметки у какого ученика? В настоящее время любой ответ будет просто дикой догадкой с множеством предположений.
@Magnus Eriksson, вы правы, подготовленные операторы также можно использовать в mysqli
Объедините два массива в один массив. Примерно так: $res = array_merge($my_array1, $my_array2);
Затем вставьте данные в базу данных, как показано ниже:
foreach (array_expression as $key => $value)
{
//Here Goes Here Your Logic....
}
Как это будет работать, если два массива содержат разные данные, которые предполагается вставить в разные столбцы?
Согласно вопросу, заданному @Fazidi Ijtihad, один массив будет содержать имена студентов, а другой - оценки каждого студента.
Да. $_POST['students']
и $_POST['marks']
. Если вы объедините их, в результате получится один массив со всеми значениями, не зная, какое значение какое.
используйте JSON для хранения данных. просто закодируйте массив в json и декодируйте, когда хотите использовать например, json_encode ($ array);
Это плохой дизайн, который противоречит нормализации базы данных.
вам нужно подсчитать значение student
и marks
и проверить student values>marks values
или student values<marks values
. и использовать его в цикле for. после этого проверьте, существуют ли значения в учащихся, и отметьте array. что-то вроде этого.
if (isset($_POST['student'])) {
$student=$_POST['student'];
$marks=$_POST['marks'];
$countStudent=count($student);
$countMarks=count($marks);
if ($countMarks>$countStudent) {
$resultCount=$countMarks;
}
else{
$resultCount=$countStudent;
}
for ($i = 0; $i <=$resultCount-1 ; $i++) {
if (isset($student[$i])) {
$value= $student[$i];
}
else{
$value= '';
}
if (isset($marks[$i])) {
$mark = $marks[$i];
}
else{
$mark = '';
}
$sql = "INSERT INTO `academic` ('student', `mark`) VALUES ('$value','$mark')";
}
}
В этом случае вы можете использовать второй foreach для второго массива, например
foreach($student as $value){
foreach($marks as $singlemarks){
$sql = "INSERT INTO `academic` ('student', `mark`) VALUES ('$value','$singlemarks')";
if (mysqli_query($conn, $sql)){
echo "Insert mark for student ".$value." complete<br>";
} else {
echo "Error: " . mysqli_error($conn);
}
}
}
и вы также можете преобразовать массив в json для хранения нескольких массивов в базе данных как json_encode ($ array) и так же, как вы можете декодировать, когда хотите его использовать
Как насчет использования
foreach
и попробовать это решение