试图爆炸阵列

时间:2013-12-14 20:09:28

标签: php arrays explode multi-select

疯狂地试图弄清楚我在哪里错了

我收到错误消息:

  

trim()期望参数1为字符串,给定数组

我知道我得到的是因为正在发送一个数组并且它正在等待一个字符串。

我有一个多选框,我从数据库中填充,如果有人可以在提交失败的页面提交后如何保留选择,我也会很感激。

我正在使用此$trimmed = array_map('trim', $_POST);所有其他表单输入都很好,但因为这是一个多选框并且它创建一个数组会导致错误。

有人知道这方面的方法吗?

<select name="special[]" id="special" multiple="multiple" style="width: 700px; height: 180px;"    >

         <?php
        $q_climbingSpecial = "SELECT climbingspecial.climbingspecial FROM climbingspecial ORDER BY climbingspecial ASC";
        $result_climbingSpecial = mysqli_query ($dbc,$q_climbingSpecial);

        if (mysqli_num_rows($result_climbingSpecial) > 0){

        while ($row_climbingSpecial = mysqli_fetch_array($result_climbingSpecial,MYSQLI_ASSOC)){

        echo "<option value=\"$row_climbingSpecial[climbingspecial]\"";


        echo "selected=\"selected\""; 

        echo ">$row_climbingSpecial[climbingspecial]</option>\n"; 
        }


        }

        ?>   



        </select> 

1 个答案:

答案 0 :(得分:1)

而不是使用array_map,你将不得不回退编写自己的代码,并检查你是否面对$ _POST数组中的数组。

if (isset($_POST))
    foreach($_POST as $key=>$val)
        if (is_array($val))
            foreach($val as $key2=>$val2)
                $_POST[$key][$key2] = trim($_POST[$key][$key2]);
        else
            $_POST[$key] = trim($_POST[$key]);



要在提交失败的页面后保留选择,您需要更改:

echo "selected=\"selected\"";

if (isset($_POST) && isset($_POST['special']) && is_array($_POST['special']))
    foreach($_POST['special'] as $key3=>$val3)
        if (trim($row_climbingSpecial['climbingspecial']) == trim($val3))
        {
            echo "CHECKED=\"CHECKED\""; // it's 'checked', not 'selected' for check box.
            break;
        }



顺便说一下,你还需要改变

echo "<option value=\"$row_climbingSpecial[climbingspecial]\"";

echo "<option value=\"{$row_climbingSpecial['climbingspecial']}\"";

撇号'阻止关于字符串的未定义常量的通知,并且大括号{}允许早期版本的php识别变量内的被调用数组键。