为什么html文本输入名称会导致提交输入不被设置?

时间:2013-01-03 07:19:09

标签: php html mysql

我有一个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文件,看看是否有任何限制,但我没有看到任何内容。有谁知道是什么导致了这个?

3 个答案:

答案 0 :(得分:1)

  1. 在php中转储$_POST以检查它是否符合预期。

  2. 验证表单结构。所有输入都在同一个标​​签内吗?

答案 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设置。

希望这可以帮助其他人,并防止数小时的故障排除!