我使用mysql在我的表单中生成了一个未知数量的复选框,这个数字总是会有所不同,
$frinfoq = mysql_query($frinfo) or die (mysql_error());
while($frow = mysql_fetch_assoc($frinfoq)) {
$username = $frow['username'];
$ct = $frow['country'];
$fruuid = $frow['uid'];
?>
<tr><td><p><?php echo $username; ?></p></td><td><p><?php echo $ct; ?></p></td><td><form method="post" action="<?php echo $_SERVER['PHP_SELF']; ?>" id="delf"><input type="hidden" value="<?php echo $fruuid; ?>" /><input type="checkbox" name="add[]" value="<?php echo $fruuid; ?>" id="a_t_game" /><form></td></tr>
<?php
}
?>
当表单被提交并由“create.php”处理时,它应该只将已检查的用户添加到mysql表,每个用户一行,我确定(我不确定这是否可以解决问题我即将到达)这样检查:
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
然后我尝试添加如下行:
$arr = array($user_uid);
foreach($arr as $user_uid) {
$game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('$gid','$user_uid',now(),'none')";
$gameq = mysql_query($game) or die (mysql_error());
}
除了设置为“Array”的用户uid之外,所有数据输入都很好。它也只创建一行,每个用户需要一行。
我知道我的数组处理方式存在问题,这很明显,但我对如何修复它并不是最模糊的想法。任何帮助/指针都会有很大的帮助!
答案 0 :(得分:0)
$arr = array($user_uid);
是你的问题。尝试$arr = $user_uid;
,或者甚至删除中间人并使用$arr = $_POST["add"];
。
<小时/> 的修改
您的代码还可以改进许多其他内容。首先,它很难阅读。我建议稍微清理一下,避免在HTML和PHP之间跳转。
另一件事是你应该逃避任何可能来自用户输入的数据库(如$ _POST)。您应该使用mysql_real_escape_string
。
第三件事是,一个动作指向$_SERVER["PHP_SELF"]
的表单并不安全。它容易受到跨站点脚本(XSS)的攻击。有关漏洞的更详细说明,请参阅this blog。
我建议你做更像这样的事情:
<?php
if ($_POST["add"])
{
$arr = $_POST["add"];
foreach ((array)$arr as $user_uid)
{
$game = "INSERT INTO wd_game (game_uid,user_uid,lastmove,startcountry) VALUES ('". mysql_real_escape_string($gid) ."','". mysql_real_escape_string($user_uid) ."', now(), 'none')";
$gameq = mysql_query($game) or die (mysql_error());
}
}
$frinfoq = mysql_query($frinfo) or die (mysql_error());
while($frow = mysql_fetch_assoc($frinfoq))
{
$username = $frow['username'];
$ct = $frow['country'];
$fruuid = $frow['uid'];
echo " <tr>
<td>
<p>{$username}</p>
</td>
<td>
<p>{$ct}</p>
</td>
<td>
<form method=\"post\" action=\"". htmlentities($_SERVER['PHP_SELF']) ."\" id=\"delf\">
<input type=\"hidden\" value=\"{$fruuid}\" />
<input type=\"checkbox\" name=\"add[]\" value=\"{$fruuid}\" id=\"a_t_game\" />
<form>
</td>
</tr>\n";
}
?>
答案 1 :(得分:0)
你的问题在这里:
$arr = array($user_uid);
$ user_uid已经是$ _POST中的一个数组;再次将它转换为数组将使其成为二维。
试试这个。
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
foreach($user_uid as $userId) { ....
答案 2 :(得分:0)
似乎$ user_uid已经是一个数组,你将它包装在一个数组中(再次),从而产生一个多维数组。考虑测试$ user_uid以查看它是否是一个数组:
if(!is_array($user_uid)) {
$arr = array($user_uid);
} else {
$arr = $user_uid;
}
然后,我相信你的代码会做你期望的。