0

我正在尝试从允许多个复选框的表单中将多行插入到 mysql 表中。

这是表格:

<input type='submit' name='invite-group' value='Invite To Group'>
<br />
<?php
$query2aac = mysql_query("SELECT * FROM follow WHERE yoozer1='$userdb1a' AND  followaccept='Yes' ORDER BY yoozer2 DESC");

while($row2aac = mysql_fetch_array($query2aac))
{
    $rowid = $row2aac['followid'];
    $yoozer2aac = $row2aac['yoozer2'];
    $yoozer2aacurl = strtolower($yoozer2aac);
    $palurl = '<a href="http://www.bunchofus.com/fanpage/' . $yoozer2aacurl . '">' .    $yoozer2aac . '</a>';
    echo '<input type= "hidden" name = "id[]" value="' . $rowid . '"></input>';
    echo '<input type= "checkbox" name = "friends[]" value="' . $yoozer2aac . '">' . $palurl . '</input><br />';
}   
?>

这是php:

if ($submit)
{
    $submit = $_POST['invite-group'];
    $date1 = date("Y-m-d");
    $lowername = strtolower($username);
    $combined = $_POST['friends'];

    foreach ($combined as $username) 
    {
        $insert1 = mysql_query("INSERT INTO grprequest VALUES ('','$grpid3','$username','$myuser','$grprights3','$grpactive3')");
    }
}
?>

它是在数据库中插入一行,而不是多行。如果我在 foreach 之后回显用户名,则会显示多个用户名。

如果有人可以提供帮助,我将不胜感激。

4

2 回答 2

0

您是否尝试过使用其他变量$username?因为您似乎已经离线使用了此名称$lowername = strtolower($username);

于 2012-05-18T18:25:42.520 回答
0

根据您提供的示例代码和 var_dump $combined,我不确定为什么它不适合您。但也许你可以尝试这样的事情:

$inserts = array();
foreach ($combined as $username)
    $inserts[] = "('','$grpid3','$username','$myuser','$grprights3','$grpactive3')";

$query = "INSERT INTO grprequest VALUES ". implode(", ", $inserts);

echo "query = $query"; // for debugging purposes, remove this once it is working
mysql_query($query) or die(mysql_error());

这将在一次调用数据库中执行所有插入操作。我echo在执行查询之前添加了一个,以便您可以看到正在执行的确切查询。


您绝对应该注意的一件事是,您的代码看起来容易受到 SQL 注入的攻击。您可以在数百个地方寻找更多关于如何保护自己的信息,因此只需搜索即可。我最喜欢的参考资料是Bobby Tables

看起来您的表单也容易受到 XSS 攻击。您从数据库中选择数据并将其直接插入 HTML,但您应该首先对其进行清理(使用类似的东西htmlspecialchars)。

于 2012-05-18T18:30:06.247 回答