2013-01-03 38 views
0

我有一個html表格,有13 <input>字段和約。 92個不同的行,使用php創建,它從mySQL數據庫中提取記錄。由於某種原因,當我爲此字段分配一個名稱時,會導致我的<input type="submit" name="update_submit">按鈕無法設置。如果我更改名稱,這並不重要,但是如果我刪除名稱,它將允許其他字段更新得很好。爲什麼html文本輸入名稱會導致提交輸入無法設置?

這裏是我的表單代碼片段($i是自動遞增):

往上頂......

<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; 
} 

我在總損失整個上午一直在解決此,我非常感謝一些幫助。

UPDATE:當我改變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",然後從其他input字段中刪除兩個不同的name屬性。這樣做後,它似乎運行的代碼。所以問題不是因爲這些特定的領域,而是因爲有超過11個值被傳遞。我查看了php.ini文件,看看這樣的東西是否有限制,但我什麼也沒看到。有誰知道可能是什麼原因造成的?

+1

當您提到名稱屬性時,在呈現表或輸入元素時是否出現錯誤? – Angel

+0

@Angel不,我剛剛在Firefox中查看「查看頁面源代碼」,並且沒有顯示錯誤。好主意,但我沒有想到。 –

+0

你可以添加Firefox的螢火蟲,並檢查是否有任何錯誤被拋出? – Angel

回答

0

,並@angel還跟深入嘗試爲好。最後我想通了。

問題結果是max_input_vars沒有被設置得足夠高,在我的php.ini文件中。更大的問題是該設置在添加之前並不存在,因此當您瀏覽該文件時,您看不到設置限制的任何設置!

所以,回顧一下。這個問題並不是因爲我所相信的name=""屬性。我想到了這一點,當我從兩個不同的輸入字段中刪除兩個其他名稱時,突然它工作正常,只有當我有這些額外的領域,它不會工作。下一個線索來自@Jakub Sacha,他建議使用var_dump($_POST)函數。當我開始查看數字時,終於點擊了通過的字段總數加起來爲1000. Google搜索PHP 1000 Limit後,我發現這個max_input_vars設置。

希望這會幫助別人,並防止幾個小時的故障排除!

1
  1. dump $_POST在php中檢查是否是你期望的。

  2. 驗證表單結構。所有的輸入都在同一個標​​籤內嗎?

+0

我不確定你的意思是「dump'$ _POST'」。表格結構我相信這一切都很好,每個''都在它自己的'​​'中,並且它們都在'

'內。 –

+0

在php中創建var_dump($ _ POST),然後檢查值(在php代碼中) –

+0

+1,用於'var_dump($ _ POST)'我不知道的想法!結果如預期的那樣,每次輸入(我有91行),我得到了91個結果,但是它突然停止在Pos_ID處,並且只返回了90個結果。沒有結果'$ _POST ['activeBox']',這可能是什麼? –

0

延長我敢打賭,我已經超過14小時以及花費了解決此問題的條件

if(isset($_POST['update_submit']) && $_POST['update_submit']=="you-given-name-just-null") 
+0

儘管我很欣賞這個建議,但爲什麼簡單地刪除'name =「Lic_Comp_Exp」'使所有其他工作?這是一個導致問題的特定輸入名稱是什麼? –

相關問題