0

私は13のフィールドと約を持つhtmlフォームを持っています。データベースからレコードを取得する<input>を使用して作成された 92 の異なる行。何らかの理由で、この 1 つのフィールドに名前を割り当てると、ボタンが設定されなくなります。名前を変更しても問題ありませんが、名前を削除すると、他のフィールドが正常に更新されるようになります。phpmySQL<input type="submit" name="update_submit">

これが私のフォームコードのスニペットです($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;
}

私は完全に途方に暮れており、午前中ずっとトラブルシューティングを行っていました。助けていただければ幸いです。

更新:変更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'");`

これは、私の 1 つが で<input>はないことを意味していると思いますarrayよね? もしそうなら、私はそれがどのようになるのかわかりません.tableがそこにあり、database.

更新 2:何かわかったと思いますが、それを修正する方法がわかりません。name="Lic_Auth_Exp"andを残してから、他のフィールドから 2 つの異なる属性をname="Lic_Comp_Exp"削除しようとしました。それをした後、コードを実行したようです。したがって、問題はこれらの特定のフィールドが原因ではなく、11 を超える値が渡されていることが原因のようです。ファイルを調べて、そのようなことに制限があるかどうかを確認しましたが、何も見当たりませんでした。誰がこれを引き起こしているのか知っていますか??nameinput$_POSTphp.ini

4

3 に答える 3

1
  1. php にダンプ$_POSTして、期待どおりかどうかを確認します。

  2. フォーム構造を検証します。すべての入力は同じタグ内にありますか?

于 2013-01-03T07:21:47.110 に答える
0

私はこの問題のトラブルシューティングに 14 時間以上を費やしたと思います。最後に、私はそれを理解しました。

問題は、私のファイルmax_input_varsで十分に高く設定されていないことでした。php.iniさらに大きな問題は、追加するまで設定が実際には存在しないことでした。そのため、ファイルを調べても、そもそも制限を設定しているものは何も表示されません!!

では、要約します。問題は、name=""私が信じさせられたような属性のためではありませんでした. 2つの異なる入力フィールドから他の2つの名前を削除したときにこれを理解しましたが、突然正常に機能し、これらの余分なフィールドがある場合にのみ機能しませんでした. 次の手がかりは、@Jakub Sacha が関数の使用を提案したときのおかげですvar_dump($_POST)。数字を見始めたとき、渡されるフィールドの総数が 1000 になるということを最終的にクリックしました。Google で検索した後、この設定PHP 1000 Limitについて知りました。max_input_vars

うまくいけば、これが他の誰かを助け、何時間ものトラブルシューティングを防ぐことができます!

于 2013-01-05T11:42:34.717 に答える
0

条件を拡張する

if(isset($_POST['update_submit']) && $_POST['update_submit']=="you-given-name-just-null")
于 2013-01-03T07:23:24.663 に答える