基于HTML的更新查询选择选项阵列PHP

时间:2016-04-23 08:23:30

标签: php html mysql arrays

HTML

            <input type="hidden" name="coreid[]" value="<?php echo $coreid; ?>">
            <input type="hidden" name="student_no" value="<?php echo $student_no; ?>">

            <div class="col col-lg-2 col-md-2 col-xs-2">
                <div class="form-group">
                    <select name="corevalues[]" class="form-control">
                        <option value="">Select</option>
                        <?php 

                $result11 = mysqli_query($con, "SELECT * FROM core_values");

                while ($row11 = mysqli_fetch_array($result11)){
                    $idcore = $row11['id'];
                    $levelid = $row11['marking'];
                    $level_name = $row11['non_marking'];
                    if ($first == $level_name){
                        echo '<option value="'.$level_name.'" selected="selected">'.$level_name.'</option>';
                    } else{
                        echo '<option value="'.$level_name.'">'.$level_name.'</option>';
                    }
                }
                        ?>
                    </select>
                </div>
            </div>

PHP

$coreid = $_POST['coreid'];
$grade = $_POST['corevalues'];
$student_no = $_POST['student_no'];
$quarter = $_POST['quarter'];
$marking = $_POST['marking'];
$quarter2 = $_POST['quarter2'];

$xx = 0;



foreach ($coreid as $sid) {
    foreach ($grade as $sid2) {
       $checkrecords = mysqli_query($con, "SELECT * FROM teacher_cv WHERE coreid='".$sid."' AND student_no='".$student_no."'");

           if (mysqli_num_rows($checkrecords) > 0){

               $sql = "UPDATE teacher_cv
                        SET $quarter='".$sid2."'
                                WHERE coreid='".$sid."' AND
                                    student_no='".$student_no."'";

            if (!mysqli_query($con,$sql))
            {
                die('Error: 1 ' . mysqli_error($con));
            }
               $xx++;
           } else{

               $sql = "INSERT INTO teacher_cv
               (         coreid,
                            $quarter,
                                student_no)
            VALUES (      '".$sid."',
                            '".$sid2."',
                                '".$student_no."')";

               if (!mysqli_query($con,$sql))
               {
                   die('Error: 1 ' . mysqli_error($con));
               }
               $xx++;
       }
    }
}

我正在使用HTML Select Option的多个数据库更新我的 table teacher_cv 。显示教师学生的核心价值标准。

但是看来Update和Insert Query总是得到了first_q的最后一部分,这是我表中的一列。这是我到目前为止所做的样本。 enter image description here

似乎核心ID正在运行,但在HTML Select中选择的标准总是得到数组的最后一部分。如何插入/更新所有数组而不是数组的最后一部分?

更新

我尝试在foreach之前打印它,看看它是否真的通过了数组,这就是结果。

    Array ( [0] => 1 [1] => 2 [2] => 3 [3] => 4 [4] => 5 ) 
    Array ( [0] => Sometimes Observed [1] => Rarely Observed [2] => Rarely Observed [3] => Not Observed [4] => Sometimes Observed )

感谢Kunal,我知道阵列真的在传递。为什么只有最后一个数组是在数据库上输入的?什么是错误的莫 PHP代码

1 个答案:

答案 0 :(得分:1)

您不应该使用$coreid$grade的嵌套循环,因为每个数组的相应元素都在一起。您正在创建所有这些产品之间的交叉产品。所以它应该是:

foreach ($coreid as $i => $sid) {
    $sid2 = $grade[$i];
    ...
}

此外,由于您正在使用MySQLI,因此您应该使用准备好的查询而不是将变量连接到查询。如果(coreid, student_no)上有唯一索引,您可以使用INSERT选项在单个ON DUPLICATE KEY UPDATE查询中执行所有操作。

$stmt = mysqli_prepare($con, "INSERT INTO teacher_cv (coreid, quarter, student_no)
    VALUES(?, ?, ?)
    ON DUPLICATE KEY UPDATE quarter = VALUES(quarter)" or die(mysqli_error($con));;
mysqli_stmt_bind_param($stmt, "sss", $sid, $sid2, $student_no);

foreach ($coreid as $i => $sid) {
    $sid2 = $grade[$i];
    mysqli_stmt_execute($stmt);
    $xx++;
}