Php While循环将值插入数据库?

Php While循环将值插入数据库?,php,mysql,database,while-loop,Php,Mysql,Database,While Loop,我目前有一个表单,我可以订阅和取消订阅用户的时事通讯,如下所示: 底部部分(订阅部分)的代码如下: 现在它将只向我选中复选框的数据库中添加一行。我想让它工作,这样它将向数据库中添加3行,例如: 当我选择如下框时: 我希望将以下行添加到数据库中: ID Klant_ID Mail_ID Status Datum 20 6 1 10 20-03-2013 21 6 2 90 20-03-2013 22

我目前有一个表单,我可以订阅和取消订阅用户的时事通讯,如下所示:

底部部分(订阅部分)的代码如下:

现在它将只向我选中复选框的数据库中添加一行。我想让它工作,这样它将向数据库中添加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_数组的while循环是否可行?我不是php的专业人士,因为我还是一名学生,我无法独自解决这个问题。我希望我的问题足够清楚,但如果你有任何问题,请在评论中提问^^如果有人能告诉我是怎么做的,或者把我推向正确的方向,那就太好了


(我知道我不应该再使用mysql了,但这不是这里的重点^^)

你可以通过$\u 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));
}

这样,您的脚本也将是注入安全的,就像您当前的查询一样,它非常容易被注入。

您可以通过$\u 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));
}
这样,您的脚本也将是注入安全的,与您当前的查询一样,它非常容易被注入。

更改:

<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"];?>">
致:

注意
这是一个解决方案,没有注入和其他检查,创建它只是为了告诉你思考的方向。

只需做一段时间($row=mysql\u fetch\u array($result)){mysql\u query(“insert query”。$row[“values””)}顺便问一句,你考虑过使用单选按钮而不是复选框吗?用户不能同时订阅和取消订阅,对吗?这里没有可获取的内容,因为您只是向数据库添加数据。您的代码容易受到SQL注入的攻击。阅读了解如何防止这种情况。关于如何在mysql数据库中插入数据,有很多问题。其中一个是:只需做一段时间($row=mysql\u fetch\u array($result)){mysql\u query(“insert query”。$row[“values””)))}顺便问一下,您考虑过使用单选按钮而不是复选框吗?用户不能同时订阅和取消订阅,对吗?这里没有可获取的内容,因为您只是向数据库添加数据。您的代码容易受到SQL注入的攻击。阅读了解如何防止这种情况。关于如何在mysql数据库中插入数据,有很多问题。其中之一是:当其中一个用户既没有订阅也没有取消订阅时,此解决方案可能会导致问题。邮件id将移动并为错误的邮件id插入错误的值。您刚刚解决了我的问题,thnx^^@SavasVedova你是对的,这是一个非常糟糕的解决方案,但这只是考虑输入中的数组的方向。当一个用户既没有订阅也没有取消订阅时,此解决方案可能会导致问题。邮件id将移动并为错误的邮件id插入错误的值。您刚刚解决了我的问题,thnx^^@SavasVedova你是对的,这是一个非常糟糕的解决方案,但这只是考虑输入中的数组的方向。
<input type="checkbox" name="sub[]" value="10">
<input type="hidden" name="mailid[]" value="<?=$objResult1["ID"];?>">
$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());
}