我有一个html
表格,有13个<input>
字段和约。使用php
创建的92个不同的行,它从mySQL
数据库中提取记录。出于某种原因,当我为此一个字段指定了名称时,会导致我的<input type="submit" name="update_submit">
按钮无法设置。如果我更改名称,这没关系,但如果我删除名称,它将允许其他字段更新。
以下是我的表单代码片段($i
自动递增):
Up Top ...
<form method="post" action="process_form.php">
<table>
<tr>
再往下......
echo "<td align=\"center\" class=\"edit_emp_comp_exp_cell\"><input type=\"text\" maxlength=\"10\" size=\"10\" id=\"Lic_Comp_Exp$i\" name=\"Lic_Comp_Exp[]\" value=\"" . $emp_query['Lic_Comp_Exp'] . "\">";
<input type="submit" name="update_submit" style="width:100px;" value="UPDATE">
再往下......
</tr>
</table>
</form>
这是我的process_form:
if(isset($_POST['update_submit']))
{
$id = $_POST['Emp_ID'];
$name = $_POST['Emp_Name'];
$phone = $_POST['Emp_Phone'];
$start = $_POST['Start_Date'];
$leave = $_POST['Paid_Leave'];
$aca = $_POST['Emp_ACA'];
$licauth = $_POST['Lic_Auth_ID'];
$authexp = $_POST['Lic_Auth_Exp'];
$liccomp = $_POST['Lic_Comp_ID'];
$compexp = $_POST['Lic_Comp_Exp'];
$miscp = $_POST['MiscP_ID'];
$position = $_POST['Pos_ID'];
$active = $_POST['activeBox'];
$i = 0;
foreach($id as $update)
{
if (!isset($active[$i])) { $active[$i] = 0; }
$sql = ("UPDATE employee SET Emp_Name = '$name[$i]', Emp_Phone = '$phone[$i]', Emp_Start_Date = '$start[$i]', Paid_Leave = '$leave[$i]', Emp_ACA = '$aca[$i]', Lic_Auth_ID = '$licauth[$i]', Lic_Auth_Exp = '$authexp[$i]', Lic_Comp_ID = '$liccomp[$i]', Lic_Comp_Exp = '$compexp[$i]', MiscP_ID = '$miscp[$i]', Pos_ID = '$position[$i]', Emp_Active = '$active[$i]' WHERE Emp_ID = '$update'");
echo "SQL: " . $sql . "<br>";
if(!$result_employee_update = $mysqli->query($sql))
{
$errors[] = "There was an error updating the employee table. MySqli Error Number: " . $mysqli->errno . "";
goto end;
}
$i++;
}
goto redirect;
}
我完全失去了并且整个上午一直在排除故障,我真的很感激一些帮助。
更新:当我将if(isset($_POST['update_submit']))
更改为if(!isset($_POST['update_submit']))
并运行时,我收到错误消息:
"Notice: Undefined offset: 83 ... on line 31"
和第31行是我的
`$sql = ("UPDATE employee SET Emp_Name = '$name[$i]', Emp_Phone = '$phone[$i]', Emp_Start_Date = '$start[$i]', Paid_Leave = '$leave[$i]', Emp_ACA = '$aca[$i]', Lic_Auth_ID = '$licauth[$i]', Lic_Auth_Exp = '$authexp[$i]', Lic_Comp_ID = '$liccomp[$i]', Lic_Comp_Exp = '$compexp[$i]', MiscP_ID = '$miscp[$i]', Pos_ID = '$position[$i]', Emp_Active = '$active[$i]' WHERE Emp_ID = '$update'");`
我认为这意味着我的<input>
之一不是array
,对吧?如果是这样,我不知道那是怎么回事,table
就在那里,它是从database
动态创建的。
UPDATE2:我想我已经找到了一些东西,但我不知道如何修复它。我尝试退出name="Lic_Auth_Exp"
和name="Lic_Comp_Exp"
,然后从其他name
字段中删除两个不同的input
属性。在这之后它似乎运行代码。所以问题不在于这些特定字段,而是因为传递了超过11个$_POST
值。我浏览了php.ini
文件,看看是否有任何限制,但我没有看到任何内容。有谁知道是什么导致了这个?
答案 0 :(得分:1)
在php中转储$_POST
以检查它是否符合预期。
验证表单结构。所有输入都在同一个标签内吗?
答案 1 :(得分:0)
延长条件
if(isset($_POST['update_submit']) && $_POST['update_submit']=="you-given-name-just-null")
答案 2 :(得分:0)
我打赌我花了超过14个小时来解决这个问题,而且@angel也非常友好地尝试了。最后我想通了。
问题最终导致我的max_input_vars
文件中的php.ini
未设置得足够高。更大的问题是,在你添加设置之前,设置实际上并不存在,所以当你查看文件时,你看不到任何设置限制的东西!!
所以,回顾一下。这个问题不是因为name=""
这个属性让我相信。当我从两个不同的输入字段中删除另外两个名字时,我想到了这一点,突然它工作正常,只有当我有这些额外的字段时它才会起作用。感谢@Jakub Sacha建议使用var_dump($_POST)
函数时,下一个线索来了。当我开始查看这些数字时,它最终点击了传递的字段总数最多为1000.在Google搜索PHP 1000 Limit
后,我发现了max_input_vars
设置。
希望这可以帮助其他人,并防止数小时的故障排除!