Php 处理未知数量的复选框
我使用mysql在我的表单中生成了未知数量的复选框,这个数字总是不同的Php 处理未知数量的复选框,php,mysql,arrays,checkbox,forms,Php,Mysql,Arrays,Checkbox,Forms,我使用mysql在我的表单中生成了未知数量的复选框,这个数字总是不同的 $frinfoq = mysql_query($frinfo) or die (mysql_error()); while($frow = mysql_fetch_assoc($frinfoq)) { $username = $frow['username']; $ct = $frow['country']; $fruuid = $frow['uid'];
$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
}
?>
然后,我尝试按如下方式添加行:
$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());
}
除了设置为“数组”的用户uid之外,所有数据输入都很好。它也只创建一行,每个用户需要一行
我知道处理数组的方式有问题,这是很明显的,但我对如何解决这个问题一无所知。任何帮助/指点都会帮上大忙 $arr=array($user\u uid)代码>是您的问题。只需尝试$arr=$user\u uid
,甚至省去中间人,只需使用$arr=$\u POST[“add”]代码>
编辑
您的代码还可以改进许多其他方面。首先,它很难阅读。我建议将它清理一下,避免在HTML和PHP之间跳转
另一件事是,您应该转义进入数据库的任何数据,这些数据可能来自用户输入(如$u POST)。您应该使用mysql\u real\u escape\u string
第三件事是,带有指向$\u服务器[“PHP\u SELF”]
的操作的表单是不安全的。它易受跨站点脚本(XSS)攻击。有关该漏洞的更详细说明,请参阅
我建议你做一些更像这样的事情:
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
<?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";
}
?>
您的问题在于:
$arr = array($user_uid);
$user\u uid已经是$\u POST中的数组;再次将其投射到阵列将使其成为二维
试试这个
if($_POST['add'] == true) {
$user_uid = $_POST['add'];
}
foreach($user_uid as $userId) { ....
看起来$user_uid已经是一个数组了,您正在将它包装到一个数组中(再次)生成一个多维数组。考虑测试$USER UID,看看它是否是数组:
if(!is_array($user_uid)) {
$arr = array($user_uid);
} else {
$arr = $user_uid;
}
那么,我相信你的代码会达到你期望的效果。你不用换行吗?!我不得不写信。不过说真的,把字符串分成多行并没有什么错。请不要在if语句中使用“==true”。它们是100%冗余的。你知道吗?@Martin:我敢打赌他一定指望这一点。这引发了一个错误:为foreach()提供的参数无效。很好,你为我修复了代码,服务器本身部分,这是另一个表单,它不应该在那里-删除它,现在整个事情都在运行,谢谢提示,非常感谢!