0

我的 html 表单中有多个选择元素(方法 - 发布)。我想将 $songs 数组转换为有序列表。

<select name="songs" multiple>
  <option>song 1</option>
  <option>song 2</option>
  <option>song 3</option>
  <option>song 4</option>
  <option>song 5</option>
  <option>song 6</option>
  <option>song 7</option>
  <option>song 8</option>
  <option>song 9</option>
  <option>...</option>
</select>

我写了以下php代码

 $songs = test_input($_POST["songs"]);
 foreach ($songs as $song) 
 {
   $songs .= "<li>$song</li>";
 };

 $songList = "Songs: <ol> $songs </ol> \r\n";
 echo $songList;

 function test_input($data)
 {
      $data = trim($data);
      $data = stripslashes($data);
      $data = htmlspecialchars($data);
      return $data;
 }

但这给了我一个错误Invalid argument supplied for foreach()

foreach()有人请告诉这个循环出了什么问题


如果函数 test_input() 返回String而不是Array然后我应该怎么做才能转换$songs为有序列表?

4

3 回答 3

1

以下应该有效:

<?php
$songs = $_POST["songs"];
//$songs = Array("one","two","three");
foreach ($songs as $song) 
{
   $songStr = test_input($song);
   $songsOut .= "<li>$songStr</li>";
};

$songList = "Songs: <ol> $songsOut </ol> \r\n";
echo $songList;

function test_input($data)
{
   $data = trim($data);
   $data = stripslashes($data);
   $data = htmlspecialchars($data);
   return $data;
}

?>

需要在数组中的test_input()每个项目上单独调用,而不是在数组本身上调用。

您确定发布数据实际上是一个数组吗?我用一个 get 字符串测试了我的代码(所以我可以在浏览器栏中输入它),它需要以下语法:

http://localhost/songs.php?songs[]=one&songs[]=two&songs[]=three

错误消息将foreach说明 $POST associate 数组未返回值数组,取消注释我的代码中的第二行将有助于调试。如果您发布生成 $POST 的代码,我们也可以检查!

编辑 - 更改多选元素的名称似乎对我有用:

<select name="songs[]" multiple>
  <option>song 1</option>
  <option>song 2</option>
  <option>song 3</option>
  <option>...</option>
</select>

请参阅:多选到数组

于 2013-10-26T16:57:55.060 回答
0

$songs那是因为你在循环时正在改变。您应该为 html 字符串使用不同的变量:

 $songs = test_input($_POST["songs"]);
 $html = '';
 foreach ($songs as $song) 
 {
   $html .= "<li>$song</li>";
 }

 $songList = "Songs: <ol> $html </ol> \r\n";
 echo $songList;
于 2013-10-26T16:34:43.490 回答
0

test_input($_POST["songs"]);应该是一个数组,你的代码是完美的。test_input($_POST["songs"]);但应该返回一个数组

$songs使用函数检查您的数组是否为数组is_array()

$songs = array('a','b');
    if (is_array($songs))
    {
         foreach ($songs as $song) 
         {
           $songs .= "<li>$song</li>";
         }
    }else{
     echo "its not an array";
    }
$songList = "Songs: <ol> $songs </ol> \r\n";
echo $songList;`  //output:  Songs: <ol> Array<li>a</li><li>b</li> </ol> 
于 2013-10-26T16:38:18.230 回答