使用Foreach数组在Mysql中插入多行

时间:2012-05-18 18:06:22

标签: php mysql arrays for-loop foreach

我正在尝试从允许多个复选框的表单中插入多行来插入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之后回显用户名,则会显示多个用户名。

如果有人可以提供帮助,我会很感激。

2 个答案:

答案 0 :(得分:0)

您是否尝试使用$username以外的其他变量?因为您似乎已经使用此名称基于$lowername = strtolower($username);行。

答案 1 :(得分:0)

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

$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的内容)。