多个复选框插入不正确

时间:2013-08-11 16:59:04

标签: php mysql

我已经研究了两天而且只是让它正常工作......麻烦的是,当我在动态填充的表单上检查两个复选框时,我会插入四个记录。它变得更奇怪......其中一个记录是独一无二的。三个人有相同的信息。我完全迷失在这里。

以下是表单的代码:

<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

正如你所看到的那样,darned的东西只是输入了第一次在页面上检查的邮政编码(作为第四条记录),但是首次进入SECOND邮政编码三次。

知道为什么吗?我很茫然。

提前谢谢!!! :)

2 个答案:

答案 0 :(得分:1)

您正在拨打mysql_query() 3次,其中2次在foreach()循环之外,它会将最后$query / $zip_code再插入2次。< / p>

<?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();
} 
}

答案 1 :(得分:0)

问题与您使用mysql_query()和您正在使用的$ query变量有关。 这是一个漫步。

  

您通过$ _POST提交两个邮政编码   循环遍历$ _POST数组并将$ query设置为INSERT字符串。   然后将其传递给函数mysql_query()以执行命令以插入记录。

     

现在,您的数据库中有两条记录。您没有进行任何检查,看看它们是否在该循环中单独作为插入工作(您应该有)。你也没有做任何逃避以避免狡猾的注射篡改。 (你应该有)。

     

无论如何,在你的循环之后,这就是出错的地方。然后,再次运行mysql_query($ query)检查它是否有效。这实际上将运行您作为命令再次生成的最后一个$ query INSERT字符串。这样就可以在表格中插入另一条记录。

     

然后,你再次使用变量$ results执行某些操作,运行mysql_query($ query)命令。这是你插入的另一条记录。   这意味着您将在表中插入4条记录。

建议 这是我的头顶! - 未经过测试

$u = "Whatever";
$inserted = 0;
$fatal = Array();

foreach($_POST['zip_code'] AS $z){
    if(mysql_query("INSERT INTO user_zip_save(username, zip_code) VALUES ('$u','".mysql_real_escape_string($z)."')";
        $success += mysql_affected_rows();
    } else {
        $fatal[] = mysql_error();
    }
}

echo "Inserted $success of ".count($_POST[zip_code])." records.<br />";
if(count($fatal)){
    $fatal = array_unique($fatal); 
    echo "The following error(s) occurred:<br />";
    print "<pre>";
    print_r($fatal);
    print "</pre>";
}

希望以某种方式有所帮助!