2013-12-14 86 views
0

要瘋了試圖找出我要去的地方錯在這裏試圖爆炸陣列

我收到錯誤消息:

裝飾()預計參數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> 
+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來識別變數內稱爲數組的鍵。

+0

非常感謝你的隊友,現場答案 – user2224798