每个选中的$_POST复选框的PHP MySQL INSERT脚本


PHP MySQL INSERT script for each $_POST checkbox that is checked

基本上,用户填写表格以输入产品,然后通过勾选这些用户的复选框来声明该产品是"专门"为用户提供的。

产品名称:foo

特定用户:

  • Bob
  • 法案
  • Ben
  • Rob

因此,用户可以"选中"1个或多个用户来链接产品。

我已经设置了数据库表:

用户|userID|name|

产品|productID|name|

链接表|linkID|productID|userID|

我希望的是,当用户选中"Bill"answers"Ben"并单击"Submit"时,产品被添加到产品表中,返回新的productID,INSERT脚本上会发生一个循环,向LINKTABLE中添加一条新记录,其中包含每个选中用户的productID和userID。

到目前为止,我已经完成了插入产品详细信息并返回productID的工作,但我很难将productID和userID插入到链接表中。

$product = $_POST["product"];
$sql = "INSERT INTO products ('name') VALUES ($product);
$result = mysql_query($sql);
$newProductID = mysql_insert_id();

我试过这个:

if(!empty($_POST['users'])) {
foreach($_POST['users'] as $userID)
    {
        $sql = "INSERT INTO linktable (productID, userID) VALUES (".$newProductID.", ".$userID.")";
        $result = mysql_query($sql) or die(mysql_error()."<br />".$sql);
    }

但这引发了一个错误:

警告:为…中的foreach()提供的参数无效。。。。

在"foreach"循环的行上。

任何帮助都会很棒。谢谢

我怀疑$_POST['users']不是一个数组。你的复选框在html中是什么样子的?它们需要看起来像这样:

<input type="checkbox" name="users[]" value="Bob">Bob
<input type="checkbox" name="users[]" value="Bill">Bill
<input type="checkbox" name="users[]" value="Ben">Ben

注意名称users[]

现在你可以做:

foreach ($_POST['users'] as $user) {
    // do something
}

$_POST['users']将是一个字符串否?我已经有一段时间没有做PHP了,但你不能POST一个数组或任何东西,只能POST一个字符串。所以你不能越过绳子。

$_POST['users']是什么类型的数据?这是一份清单吗。我更熟悉Coldfusion,在那里你可以使用不同的语法在列表上循环,但我敢肯定你必须检查你的post变量的数据,并相应地采取行动。

如果您想使用:

foreach($_POST['users'] as $userId)

然后,您需要在HTML中使用一个复选框数组,并将value属性设置为ID,如下所示:

Bob <input type="checkbox" name="users[]" value="101" />
Bill <input type="checkbox" name="users[]" value="102" />
Ben <input type="checkbox" name="users[]" value="103" />

请注意名称中使用了[],这使它成为一个数组。