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的最后一部分,这是我表中的一列。这是我到目前为止所做的样本。
似乎核心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代码?
答案 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++;
}