1

私はこれを 2 日間調査しましたが、ほぼ機能しています... 問題は、動的に入力されたフォームで 2 つのチェックボックスをオンにすると、4 つのレコードが挿入されることです。それはもっと奇妙になります...レコードの1つはユニークです。3 つは同じ情報を持っています。私はここで完全に迷っています。

フォームのコードは次のとおりです。

<form name="form1" id="form1" method="post" action="insert_zip_codes.php?u=<?php echo $_SESSION['username'] ?>">
                            <table class="bordered" cellspacing="0">
                            <tr><th>City</th><th>State</th><th>ZIP Code</th></tr>
                            <?php while($row = mysql_fetch_array($rs)) { ?>
                                <tr><td><input name="zip_code[]" type="checkbox" id="zip_code" value="<?php echo $row[zip_code] ?>" /></td><td><?php echo $row[city] ?></td><td><?php echo $row[state] ?></td><td><?php echo $row[zip_code]?></td></tr> 
                            <?php } ?>
                            </table><br />
                              <input type="submit" name="Submit" value="Submit" />
          </form>

次のページの挿入ステートメントのコードを次に示します。

<?php $u = $_GET['u']; ?>
<?php var_dump($_REQUEST); ?> </br> </br>`
<?php foreach ($_POST['zip_code'] as $zip_code) {
$query = "INSERT INTO user_zip_save(username, zip_code) VALUES ('$u','".$zip_code."')";
mysql_query($query);
}  
if(mysql_query($query))
{
echo 'success';
}
else
{
echo 'failure' .mysql_error();
} 

echo $query;  // print the sql to screen for de-bugging

$results = mysql_query($query); ?>

送信を押すと、次のように出力され、データベースに正常に挿入されます。

 ["zip_code"]=> array(2) { [0]=> string(5) "97477" [1]=> string(5) "97478" }

正しく見えますよね?しかし、データベースはこれらのレコードを取得します...

id  40  username  ***  zip_code  97478
id  41  username  ***  zip_code  97478
id  42  username  ***  zip_code  97478
id  43  username  ***  zip_code  97477

ご覧のとおり、ページでチェックされた最初の郵便番号を 1 回だけ (4 番目のレコードとして) 入力していますが、最初に 2 番目の郵便番号を 3 回入力しています。

理由はありますか?私は途方に暮れています。

前もって感謝します!!!:)

4

2 に答える 2

1

3回呼び出してmysql_query()おり、そのうち2回foreach()がループの外にある場合、最後の$query/$zip_code追加の2回が挿入されます。

<?php foreach ($_POST['zip_code'] as $zip_code) {
$query = "INSERT INTO user_zip_save(username, zip_code) VALUES ('$u','".$zip_code."')";
mysql_query($query);  // 1st time (does query foreach zip_code)
}  
if(mysql_query($query)) // 2nd time (does query on last zip_code a second time)
{
echo 'success';
}
else
{
echo 'failure' .mysql_error();
} 

echo $query;  // print the sql to screen for de-bugging

$results = mysql_query($query); // 3rd time (does query on last zip_code a third time) ?>

最後のものを削除すると、デバッグのためにそこにあるため、ループコードを次のように変更できます-

<?php foreach ($_POST['zip_code'] as $zip_code) {
$query = "INSERT INTO user_zip_save(username, zip_code) VALUES ('$u','".$zip_code."')";
$result = mysql_query($query);
if($result)
{
echo 'success ';
}
else
{
echo 'failure' .mysql_error();
} 
}
于 2013-08-11T17:10:18.053 に答える