我有一个非常奇怪的问题。我有一个从数据库中填充的表。对于每一行,我添加了一个复选框和一个文本框。当用户单击该复选框时,将显示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];
}
检查所有框时的结果:
检查除前2
以外的所有其他框的结果
我在php错误日志中收到错误 Undefined offset 。
我尝试将for计数从count($_POST['reason'])
更改为count($_POST['reason'])
并删除回显中的<br/>
,但却得到相同的结果。我在哪里错过了或出错了?感谢任何建议。谢谢:))
答案 0 :(得分:1)
您在$_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>";
}
?>