Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 处理未知数量的复选框_Php_Mysql_Arrays_Checkbox_Forms - Fatal编程技术网

Php 处理未知数量的复选框

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'];

我使用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   
    }
    ?>
然后,我尝试按如下方式添加行:

$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()提供的参数无效。很好,你为我修复了代码,服务器本身部分,这是另一个表单,它不应该在那里-删除它,现在整个事情都在运行,谢谢提示,非常感谢!