对于PHP中的计数器循环在提交时无法正常工作

时间:2016-02-25 06:24:50

标签: php for-loop

我有一个非常奇怪的问题。我有一个从数据库中填充的表。对于每一行,我添加了一个复选框和一个文本框。当用户单击该复选框时,将显示texbox。当我尝试在提交时获取这些值时,非常奇怪的是当我检查第1行或第2行时,值会正常返回。当我排除第1行和第2行时,它们无法正确保存。

  

我的PHP代码

<?PHP
    $myquery="  select A,B,C,Row_Number from Test WHERE Serial_Number='$Serial_Number';
    $fetched=sqlsrv_query($conn,$myquery) ; 
    if( $fetched === false ) { die( print_r( sqlsrv_errors(), true ));}
    while($res=sqlsrv_fetch_array($fetched,SQLSRV_FETCH_ASSOC))
    {
        $Row_Number=$res['Row_Number'];
        echo "<tr><td>".$res['A']."</td>";
        echo "<td>".$res['B']."</td></tr>";
        echo "<tr><td>".$res['C']."</td>";
        echo "<td style='width:2%;'><input type='checkbox' name='tick[]' value='".$Row_Number."' onClick='document.getElementById('comments').focus();' id='Chk_".$Row_Number."'></td>";
        echo "<td style='display:none;' id='Chk_".$Row_Number."_box'><input type='text' name='reason[]' id='comments' class='form-control'></td></tr>";
    }
?>

<script>
    $(function(){
    $("input[type='checkbox']").change(function(){
    if($(this).is(":checked"))
    {
       $("#"+$(this).attr("id")+"_box").show();
    }
    else{                     $("#"+$(this).attr("id")+"_box").find("input[type='text']").val("")  ;
    $("#"+$(this).attr("id")+"_box").hide(); 
    }
    });
    });
</script>
  

提交时的代码

for($i=0;$i<count($_POST['reason']);$i++)
{
echo $_POST['reason'][$i];
echo $_POST['tick'][$i];
}
  

检查所有框时的结果:

enter image description here

  

检查除前2

以外的所有其他框的结果

enter image description here

我在php错误日志中收到错误 Undefined offset

我尝试将for计数从count($_POST['reason'])更改为count($_POST['reason'])并删除回显中的<br/>,但却得到相同的结果。我在哪里错过了或出错了?感谢任何建议。谢谢:))

2 个答案:

答案 0 :(得分:1)

From the chat:

您在$_POST['reason']数组中得到空值为:

Array ( [0] => [1] => [2] => Test [3] => Test )

在这种情况下,数组的计数应为 4 2 empty and 2 filled = 4)。

您可以使用array_filter()array_values()

来解决此问题

示例:

$reason = array_values(array_filter($_POST['reason']));
for($i=0;$i<count($reason);$i++)
{
echo $reason[$i];
echo $_POST['tick'][$i];
}

array_filter()用于删除空值 array_values()用于重新排序密钥

答案 1 :(得分:0)

尝试以下代码

<?php
  $myquery = "select A,B,C,Row_Number from Test WHERE Serial_Number=".$Serial_Number;
  $fetched = sqlsrv_query($conn,$myquery); 
  if( $fetched === false ) { die( print_r( sqlsrv_errors(), true ));}
  while($res = sqlsrv_fetch_array($fetched,SQLSRV_FETCH_ASSOC))
  {
    $Row_Number = $res['Row_Number'];
    echo "<tr><td>".$res['A']."</td>";
    echo "<td>".$res['B']."</td></tr>";
    echo "<tr><td>".$res['C']."</td>";
    echo "<td style='width:2%;'><input type='checkbox' name='tick[]' value='".$Row_Number."' onClick='document.getElementById('comments').focus();' id='Chk_".$Row_Number."'></td>";
    echo "<td style='display:none;' id='Chk_".$Row_Number."_box'><input type='text' name='reason[]' id='comments' class='form-control'></td></tr>";
  }
?>