#php
Вопрос:
<input type="number" min="0" name="option1_mark">
<input type="number" min="0" name="option2_mark">
<input type="number" min="0" name="option3_mark">
<input type="number" min="0" name="option4_mark">
У меня есть эти 4 поля. Когда пользователь заполняет любое из этих полей, его значения должны храниться в массиве.
$option_marks=array();
if(isset($_POST['option_marks'])){
$option_marks[0] = $_POST['option1_mark'];
$option_marks[1] = $_POST['option2_mark'];
$option_marks[2] = $_POST['option3_mark'];
$option_marks[3] = $_POST['option4_mark'];
}
Теперь я хочу сохранить его значения в базе данных внутри этого блока if.
if($result){
foreach($choice as $option => $value){
if($value != ""){
if($correct_choice == $option){
$is_correct = 1;
}else{
$is_correct = 0;
}
//Second Query for Choices Table
$query = "INSERT INTO options (";
$query .= "question_number,choice,correct,mark)";
$query .= " VALUES (";
$query .= "'{$question_number}','{$value}','{$is_correct}','{$option_marks}'";
$query .= ")";
Но он хранит 0 в столбце «отметка». Как я могу это решить?
Ответ №1:
Это можно упростить, установив имя входных данных HTML в массив следующим образом:
<input type="number" min="0" name="option_marks[]">
<input type="number" min="0" name="option_marks[]">
<input type="number" min="0" name="option_marks[]">
<input type="number" min="0" name="option_marks[]">
В настоящее время после отправки формы вы проверяете, соответствует ли имя option_marks
поля — поскольку в вашей форме нет поля с этим именем, код внутри инструкции if пропускается. Таким образом, вы эффективно передаете пустой $option_marks
массив (установленный выше проверки isset) в свою базу данных.
Теперь вы можете просто настроить свой массив следующим образом:
$option_marks = isset($_POST["option_marks"]) ? $_POST["option_marks"] : array();
Не видя кода $results
или $choice
массива, трудно понять, что происходит, но, насколько я понимаю, вы хотите вставить отдельные метки в базу данных — в отличие от всего массива для каждого варианта? Если это так, то что-то вроде этого должно сработать:
$counter = 0;
if($result){
foreach($choice as $option => $value){
if($value != ""){
if($correct_choice == $option){
$is_correct = 1;
}else{
$is_correct = 0;
}
//Second Query for Choices Table
$query = "INSERT INTO options (";
$query .= "question_number,choice,correct,mark)";
$query .= " VALUES (";
$query .= "'{$question_number}','{$value}','{$is_correct}','{$option_marks[$counter]}'";
$query .= ")";
$counter ;