我目前有一个表单,我可以在其中订阅和取消订阅用户的新闻通讯,如下所示:

底部部分(订阅部分)的代码如下:
<?php
$i = 0;
while($objResult1 = mysql_fetch_array($objQuery1))
{
$i++;
?>
<tr>
<td><div align="center"><?=$objResult1["ID"];?><input type="hidden" name="mailid" value="<?=$objResult1["ID"];?>"> </div></td>
<td><div align="center"><?=$objResult1["Titel"];?> </div></td>
<td><div align="center"><input type="checkbox" name="sub" value="10"> </div></td>
<td><div align="center"><input type="checkbox" name="sub" value="90"> </div></td>
</tr>
<?php
}
?> 将值插入数据库的代码如下所示:
<?php
mysql_connect('localhost','root','root');
mysql_select_db('NAW') or die (mysql_error());
$Klant_ID = $_POST['klantid'];
$Mail_ID = $_POST['mailid'];
$Status = $_POST['sub'];
$Datum = date("d-m-Y");
$sql = mysql_query(
"INSERT INTO Subscriptions (
Klant_ID,
Mail_ID,
Status,
Datum
) VALUES (
'".$Klant_ID."',
'".$Mail_ID."',
'".$Status."',
'".$Datum."'
)"
);
if ($sql === false) {
die (mysql_error());
} else {
echo 'Je gegevens zijn succesvol in de database geplaatst.<br><br>Om de gegevens uit de database te bekijken klik <A HREF="klanten.php">hier</A>. <br>Om meer gegevens in te voeren klik <A HREF="index.html">hier</A>.';
}
?>数据库是:
ID Klant_ID Mail_ID Status Datum
1 6 1 test
2 6 1 test test
3 10 10 10 19-03-13
16 6 4 90 20-03-2013
17 6 4 10 20-03-2013
18 7 4 90 20-03-2013现在,它只会在我选中复选框的数据库中添加1行。我想让它正常工作,这样它就会向数据库中添加3行,例如:当我像这样选择框时:

我希望将这些行添加到数据库中:
ID Klant_ID Mail_ID Status Datum
20 6 1 10 20-03-2013
21 6 2 90 20-03-2013
22 6 4 10 20-03-2013所以我的问题是,在mysql_fetch_array中使用while循环是否可行?我不是专业的php,因为我还是一个学生,我不能自己解决这个问题。我希望我的问题足够清楚,但是如果你有任何问题,请在评论中提问^^如果有人能向我展示它是如何做到的,或者把我推向正确的方向,那就太好了!
(我知道我不应该再使用mysql_*了,但这不是这里的重点^^)
发布于 2013-03-20 16:49:41
更改:
<input type="checkbox" name="sub" value="10">
<input type="hidden" name="mailid" value="<?=$objResult1["ID"];?>">至:
<input type="checkbox" name="sub[]" value="10">
<input type="hidden" name="mailid[]" value="<?=$objResult1["ID"];?>">在php中实现:
$sql = mysql_query("INSERT INTO Subscriptions (Klant_ID, Mail_ID, Status, Datum) VALUES ('".$Klant_ID."', '".$Mail_ID."', '".$Status."', '".$Datum."')") or die (mysql_error());至:
foreach($_POST['sub'] as $i=>$s){
$sql = mysql_query("INSERT INTO Subscriptions (Klant_ID, Mail_ID, Status, Datum) VALUES ('".$Klant_ID."', '".$_POST['mailid'][$i]."', '".$s."', '".$Datum."')") or die(mysql_error());
}注释:这是没有注入和其他检查的解决方案,创建它只是为了告诉你思考的方向。
发布于 2013-03-20 16:44:51
您只需循环通过$_POST‘’sub‘,然后在该循环中执行插入操作。
首先,您必须使sub成为一个数组,因此用name="sub[]"替换name="sub"
现在,您可以轻松地遍历所检查的值。
foreach($_POST['sub'] as $subscription){
mysql_query("INSERT INTO Subscriptions (Klant_ID, Mail_ID, Status, Datum) VALUES ('".$Klant_ID."', '".$Mail_ID."', '".$subscription."', '".$Datum."')") or die (mysql_error());
}我建议您不要使用mysql_函数,因为它们已被弃用。取而代之的是MySQLi或PDO (我最喜欢的)。:)
使用PDO,您只需在循环之前准备查询,然后在循环内执行它。这样,PHP只需准备一次查询。
$insert = $db->prepare("INSERT INTO Subscriptions (Klant_ID, Mail_ID, Status, Datum) VALUES (?, ?, ?, ?)")
foreach($_POST['sub'] as $subscription){
$db->execute(array($Klant_ID, $Mail_ID, $subscription, $Datum));
}这样,您的脚本也将是注入安全的,就像您当前的查询一样,它非常容易受到注入的攻击。
https://stackoverflow.com/questions/15518735
复制相似问题