PHP 内爆函数不适用于串联变量


php implode function not working on concatenated variables

我有多个数组,我正在将其传递给表单提交操作sales_process.php的文件。数组的命名是这样的:boards1 = {a , b , c}, boards2 = {b , c , d}, boards3 = {a , c, d} 。.等等(值不是 a,b,c,d)。我将它们通过我的表单中的多个"多选框"传递,如下所示,其中 a,b,c,d 是我的多选选项:

for ($count=1;$count<10;$count++)
echo "<td>"."<select name='boards".$count."[]' multiple='multiple'>".showOptionsDrop($boards,$arr)."</select></td>";  

现在,当我将它们传递给文件sales_process.php时,我想使用内爆函数将这些数组转换为字符串,以便我可以将它们存储到我的"学校"表中。在sales_process.php文件中,我正在这样做:

for ($i=0;$i<$count;$i++) {
$board = implode(',',${'boards'.$i});
$query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
$result = mysql_query($query) or die("Error in updating table :".mysql_error());
}  
所以这样,

每次我的循环运行时,boardsX 的值都会被转换为字符串并存储在表中,其中 X 是 1,2,3...,依此类推。
问题是内爆函数不起作用并给出错误:
Warning: implode() [function.implode]: Invalid arguments passed in C:'xampp'htdocs'relationshipReport'sales_process.php on line 18

现在,如果您说变量 ${'boards'.$i} 不是数组,我这样做并发现它只给了我一个数组:

$i=1;
var_dump(${'boards'.$i});
print_r(${'boards'.$i});  

其输出为:

array(3) { [0]=> string(4) "CBSE" [1]=> string(4) "ICSE" [2]=> string(5) "IGCSE" }
Array ( [0] => CBSE [1] => ICSE [2] => IGCSE )  

我希望我的问题很清楚。请帮助我找出内爆功能中出了什么问题。如果您不明白这个问题,请提及。

从您的示例中,我相信这是您当前的代码:

for ($i=0;$i<$count;$i++) {
    $board = implode(',',${'boards'.$i});
    $query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
    $result = mysql_query($query) or die("Error in updating table :".mysql_error());
} 
如果是这样,

请尝试更改它,使其看起来像这样:

for ($i=0;$i<$count;$i++) {
    if(isset($_POST['boards'.$i]))
    {
        $board = mysql_real_escape_string(implode(',',$_POST['boards'.$i]));
        $query = "UPDATE schools SET board = '$board' where schoolcode = (some_no)";
        $result = mysql_query($query) or die("Error in updating table :".mysql_error());
    }
    else
    {
        echo '$_POST[''boards' . $i . '''] doesn''t exist or is null.<br>';
    }
} 

这包含一个if条件,检查数组条目是否确实存在。如果确实存在,它将运行查询。如果没有,它echo返回一条消息,告诉您哪一个不存在。

即使你已经用Javascript在前端确认了,你也应该在运行代码之前始终检查,以确保它不会破坏它。你永远不会太安全,特别是如果你的代码包含敏感信息。

试试这个,让我知道你怎么做。

假设${'boards'.$i}来自$_POST['boards'.$i]。(如果没有,您正在使用register_globals,但这不好。

对于多选,如果未选择任何选项,则$_POST['boards'.$i]将为您提供null而不是数组。