复选框值与行选择不对应

时间:2018-03-22 10:35:08

标签: php html mysql

我有一个选择了多行的表单。所有列工作正常,但复选框值未正确更新。

 $data = $con->query($query);
  $data->setFetchMode(PDO::FETCH_ASSOC);
  foreach($data as $row){
   print " <tr> ";
   foreach ($row as $name=>$value){
   print " </p><br /><input type=text name='step[]' id=step value =$value size=80>
   <label for=correct>Correct:</label>
   <input type=hidden name='correct[]' id=correct value = 'Not Correct' checked>
   <input type=checkbox name='correct[]' id=correct value = 'Correct'>
   <label for=remark>Remark:</label>
   <input type=text name='remark[]' id=remark size=75>
   <input type=hidden name=date[] id=date value= $dateName>
   <input type=hidden name=time[] id=time value= $timeName>
   <input type=hidden name=type[] id=type value =$typeName>
   <input type=hidden name='resource[]' id=resource value ='$resourceName'>
   <input type=hidden name=location[] id=location value = $locationName >
   <input type=hidden name='submittedby[]' id=submittedby value= '$submittedby'> ";
   } // end field loop
   print " </tr> ";
  } // end record loop 
  print "</table> ";
  } catch(PDOException $e) {
   echo 'ERROR: ' . $e->getMessage();
  } // end try

这是插入部分:

$size = count($_POST['step']); 
$i = 0;
while ($i  < $size) { 
// define each variable 
$listno = $_POST['listno'][$i];
$date = $_POST['date'][$i];
$time = $_POST['time'][$i];
$type = $_POST['type'][$i]; 
$resource = $_POST['resource'][$i]; 
$location = $_POST['location'][$i]; 
$step = $_POST['step'][$i];
$correct =$_POST['correct'][$i];  
$remark = $_POST['remark'][$i];
$submittedby = $_POST['submittedby'][$i];
// do the update and print out some info just to provide some visual feedback 
$sql = "INSERT INTO feedback  (date, time, listno, type, resource, location, step, correct, remark, submittedby) VALUES ('$date', '$time', $listno, '$type', '$resource', '$location', $step, '$correct', '$remark', '$submittedby')"; 
if(mysqli_multi_query($link, $sql)){

       echo "Records added successfully.";

        } 
        else{

    echo "ERROR: Could not able to execute $sql. " . mysqli_error($link);

        }
print "<br />$date<br />$time<br />$listno<br />$type<br />$resource<br />$location<br />$step<br />$correct<br />$remark<br />$submittedby<br />"; 
++$i; 

插入所有“Correct”值,然后插入“Not Correct”值,但所有其他列都按记录顺序排列。

1 个答案:

答案 0 :(得分:0)

如果选中复选框,则复选框只是成功的控件。

如果一行没有选中复选框,那么它就不会得到任何结果,并且数组中跟随它的所有内容都会缩小位置以填补空白。

所以给出:

<input type=hidden name='correct[]' id=correct value = 'Not Correct' checked>
<input type=checkbox name='correct[]' id=correct value = 'Correct'>

...如果未选中该复选框,则您将$_POST['correct'][]中的一个值(来自隐藏的输入)插入一个值,如果它不是,那么您将插入两个(一个来自隐藏的输入)每个输入)。

不要依赖自动编入索引的字段名称。给他们明确的名字:

e.g。

name='correct[<?php echo htmlspecialchars($name); ?>]'

您拥有的每个字段执行此操作,而不仅仅是复选框。

然后,您可以从$_POST['step'][]获取密钥,并循环显示该密钥列表以从$_POST[$everything_else][$key]中提取匹配值。