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')");
    }
}
?>

データベースに1行挿入していますが、複数行は挿入していません。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());

これにより、データベースへの 1 回の呼び出しですべての挿入が実行されます。echo実行中の正確なクエリを確認できるように、クエリを実行する前に を追加しました。


必ず注意すべきことの 1 つは、コードが SQL インジェクションに対して脆弱であるように見えることです。身を守る方法について詳しく知ることができる場所は何百もあるので、検索してみてください。私のお気に入りのリファレンスはBobby Tablesです。

また、フォームが XSS 攻撃に対して脆弱であるようです。データベースからデータを選択して HTML に直接挿入しますが、最初にサニタイズする必要があります (のようなものを使用htmlspecialchars)。

于 2012-05-18T18:30:06.247 に答える