我已经研究了两天而且只是让它正常工作......麻烦的是,当我在动态填充的表单上检查两个复选框时,我会插入四个记录。它变得更奇怪......其中一个记录是独一无二的。三个人有相同的信息。我完全迷失在这里。
以下是表单的代码:
<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邮政编码三次。
知道为什么吗?我很茫然。
提前谢谢!!! :)
答案 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>";
}
希望以某种方式有所帮助!