0

foreachループがmysqlテーブルに余分な行を作成し、データを含む列を1つだけ挿入するのはなぜだろうと思っていました。私はphpとmysqlに慣れていないので、どんな助けでも大歓迎です。以下は私のフォームからのコードです

<form name="insert_test" action="inserttest.php" method="post">
<table>

    <tr>
        <td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
    </tr>

    <tr>
        <td><input type="text" name="brand[]" /></td>
        <td><input type="text" name="terms[]" /></td>
        <td><input type="text" name="hwstamp[]" /></td>
        <td><input type="text" name="origin[]" /></td>
        <td><input type="text" name="cases[]" /></td>
        </tr>




</table>

    <table>

    <tr>
        <td>Brand</td><td>terms</td><td>HW Stamp</td><td>Origin</td><td>Cases</td>
    </tr>

    <tr>
        <td><input type="text" name="brand[]" /></td>
        <td><input type="text" name="terms[]" /></td>
        <td><input type="text" name="hwstamp[]" /></td>
        <td><input type="text" name="origin[]" /></td>
        <td><input type="text" name="cases[]" /></td>
        </tr>




</table>



<input type="hidden" name="report_id" value="<?php echo $report_id;?>" />

<input type="submit" value="Submit" />

これは私のphpコードです:

foreach ($_POST['brand'] as $key => $brand) {


 $terms = addslashes($_POST['terms'][$key]);
    $hwstamp = addslashes($_POST['hwstamp'][$key]);
    $origin = addslashes($_POST['origin'][$key]);
    $cases = addslashes($_POST['cases'][$key]);
    $report_id = addslashes($_POST['report_id'][$key]);





$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());




    mysql_query($queryreg);

}

echo mysql_error();

私のテーブルの列は(id、brand、terms、hwstamp、origin、cases、report_id)idが主キーで、report_idが外部キーです。両方のテーブルにデータを入力すると、2つの行が作成され、列にすべてのデータが正しく挿入されます。1つのテーブルにのみデータを入力すると、すべてのデータを含む1つの行がテーブルに作成されますが、次のように2番目の行が作成されます。 report_id列を除くすべての列が空です。

4

2 に答える 2

0

これを変える

$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);

$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());

mysql_query($queryreg);

これに:

if (trim($_POST['terms'][$key])!='' {
$terms = addslashes($_POST['terms'][$key]);
$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);
$report_id = addslashes($_POST['report_id'][$key]);

$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());
mysql_query($queryreg);
 }

空の行を防ぐ必要があります。

于 2013-02-05T17:40:37.877 に答える
0

ご意見をお寄せいただきありがとうございます。空白行の問題を解決できました。リング0が提案したようにhtmlをチェックし、print_r($_post)を実行して何が投稿されているかを確認し、配列に空のキーがありました。

配列 ( [ブランド] => 配列 ( [0] => テスト [1] => ) [項] => 配列 ( [0] => テスト [1] => ) [hwstamp] => 配列 ( [0] => はい [1] => ) [origin] => Array ( [0] => mex [1] => ) [cases] => Array ( [0] => 1234 [1] => ) )

そのため、foreach ループでは、ユーザーがすべてのフォーム フィールドを使用して空のデータで 2 行目を作成していないかどうかを確認するために、次のことを行いました。

foreach ($_POST['brand'] as $key => $brand) 



{

if($brand !=''){


$terms = addslashes($_POST['terms'][$key]);

$hwstamp = addslashes($_POST['hwstamp'][$key]);
$origin = addslashes($_POST['origin'][$key]);
$cases = addslashes($_POST['cases'][$key]);



$queryreg= "INSERT INTO lots VALUES('',' $brand', '$terms',' $hwstamp', '$origin', '$cases','$report_id')" or die(mysql_error());

mysql_query($queryreg);
}

echo mysql_error();
}   

機能するようになったので、そこに行ってコードをクリーンアップして、SQL インジェクションを防ぐことができます。ご意見をお寄せいただきありがとうございました

于 2013-02-06T21:17:29.207 に答える