【问题标题】:Update Query base on HTML Select Option Array PHP基于 HTML 选择选项数组 PHP 更新查询
【发布时间】:2016-08-16 22:43:51
【问题描述】:

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 选择选项的多个数据库更新我的 table teacher_cv。体现教师学生核心价值的标准。

但是当涉及到我表中的一列 first_q 时,更新和插入查询似乎总是在最后一部分。这是我到目前为止制作的样本。

似乎核心 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,现在我知道该数组确实在传递。为什么只有数组的最后一个输入到数据库中? mo PHP 代码有什么问题?

【问题讨论】:

  • 在 foreach 开始之前打印 $coreid 和 $grade...!!它返回数组还是单个值?
  • @Kunal for $grade 我认为返回单个值。
  • @Kunal 我尝试了在 foreach 及其返回 ArrayArray 之前打印的建议

标签: php html mysql arrays


【解决方案1】:

您不应该在$coreid$grade 中使用嵌套循环,因为每个数组的对应元素都在一起。你在他们之间创造了一个交叉产品。所以应该是:

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

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

$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++;
}

【讨论】:

    猜你喜欢
    • 2016-06-11
    • 1970-01-01
    • 2017-05-28
    • 2019-02-14
    • 2012-01-17
    • 1970-01-01
    • 1970-01-01
    • 2023-03-09
    • 2011-10-28
    相关资源
    最近更新 更多