не удается добавить значения массива в mysql

#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  ;