Php 为什么html文本输入名称会导致未设置提交输入?
我有一个Php 为什么html文本输入名称会导致未设置提交输入?,php,html,mysql,Php,Html,Mysql,我有一个html表单,有13个字段和大约92个不同的行,使用php从mySQL数据库中提取记录。由于某种原因,当我将一个名称分配给这个字段时,它会导致我的按钮未设置。如果我更改名称,这无关紧要,但是如果我删除名称,它将允许其他字段正常更新 以下是我的表单代码片段($i自动递增): 在上面 <form method="post" action="process_form.php"> <table> <tr> 第31行是我的 `$sql = ("UPDATE e
html
表单,有13个
字段和大约92个不同的行,使用php
从mySQL
数据库中提取记录。由于某种原因,当我将一个名称分配给这个字段时,它会导致我的
按钮未设置。如果我更改名称,这无关紧要,但是如果我删除名称,它将允许其他字段正常更新
以下是我的表单代码片段($i
自动递增):
在上面
<form method="post" action="process_form.php">
<table>
<tr>
第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'");`
我想这意味着我的一个
不是数组,对吗?如果是这样,我不知道这是怎么回事,表就在那里,它是从数据库动态创建的
更新2:我想我已经解决了一些问题,但我不知道如何解决它。我试图离开name=“Lic\u Auth\u Exp”
和name=“Lic\u Comp\u Exp”
,然后从其他输入
字段中删除两个不同的name
属性。这样做之后,它似乎运行了代码。所以问题不在于这些特定字段,而在于传递的值超过了11个。我查看了php.ini
文件,看看这样的东西是否有任何限制,但我没有看到任何东西。有人知道这是什么原因吗
在php中转储$\u POST
,检查它是否符合您的期望
验证表单结构。是否所有输入都在同一个标签内
延长条件
if(isset($_POST['update_submit']) && $_POST['update_submit']=="you-given-name-just-null")
我打赌我花了超过14个小时来解决这个问题,而且@angel也很友好地尝试了深入研究。我终于明白了
问题是max\u input\u vars
在我的php.ini
文件中设置得不够高。更大的问题是,在您添加之前,该设置实际上并不存在,因此当您查看该文件时,您首先不会看到任何设置限制的内容
所以,概括一下。这个问题不是因为name=“
属性,就像我被引导去相信的那样。当我从两个不同的输入字段中删除另外两个名称时,我发现它突然工作正常,只有当我有这些额外的字段时,它才会工作。下一条线索来自@Jakub Sacha,他建议使用var\u dump($\u POST)
函数。当我开始查看这些数字时,它终于点击了一下,传递的字段总数加起来达到了1000个。在谷歌搜索了PHP1000 Limit
之后,我发现了这个max\u input\u vars
设置
希望这将帮助其他人解决问题,并避免数小时的故障排除 我不知道你说的“dump$\u POST
”是什么意思。表单结构我相信一切都很好,每个
都在它自己的
中,它们都在
中。在php中创建var\u dump($\u POST),并检查值(在php代码中)+1以获得我不知道的var\u dump($\u POST)
想法!结果正如预期的那样,我每个输入得到91个结果(我得到了91行),但它突然在Pos\u ID处停止,只返回90个结果。对于$\u POST['activeBox']
,没有结果,这是不是有什么问题?我被纠正了,我再次运行了它(我有一些输入被注释掉了),实际上每个输入只返回83行,而应该有91行。我想我们找到了什么!虽然我很欣赏这个建议,但为什么仅仅删除name=“Lic\u Comp\u Exp”
就可以让其他一切正常工作呢?这一特定的输入名称是什么导致了问题?当您提到name属性时,在呈现表或输入元素时是否出现任何错误?@Angel否,我刚刚在firefox中选中了“查看页面源”,没有显示错误。好主意,但我没有想到。你能为firefox添加firebug并检查是否有抛出的错误吗?我确实安装了firebug,没有太多使用它,但在控制台下它不会显示任何错误。当你指定了name属性时,你的按钮不会显示或工作,否则它会显示。我说得对吗?
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;
}
"Notice: Undefined offset: 83 ... on line 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'");`
if(isset($_POST['update_submit']) && $_POST['update_submit']=="you-given-name-just-null")