PHP foreach循环不工作

PHP foreach循环不工作,php,foreach,Php,Foreach,我的html表单中有以下多个select元素(method-post)。我想将$songs数组转换为有序列表中的转换 <select name="songs" multiple> <option>song 1</option> <option>song 2</option> <option>song 3</option> <option>song 4</option>

我的html表单中有以下多个select元素(method-post)。我想将$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>

歌曲1
歌曲2
歌曲3
歌曲4
歌曲5
歌曲6
歌曲7
歌曲8
歌曲9
...
我编写了以下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;
 }
$songs=test_输入($_POST[“songs]”);
foreach($songs作为$song)
{
$songs.=“
  • $song
  • ”; }; $songList=“Songs:$Songs\r\n”; echo$歌曲列表; 功能测试输入($data) { $data=修剪($data); $data=条带斜杠($data); $data=htmlspecialchars($data); 返回$data; }
    但是它给了我一个错误
    为foreach()提供的无效参数

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



    如果函数test_input()返回的是
    String
    而不是
    Array
    ,那么我应该如何将
    $songs
    转换为有序列表

    这是因为在循环过程中您正在更改
    $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;
    
    $songs=test_输入($_POST[“songs]”);
    $html='';
    foreach($songs作为$song)
    {
    $html.=“
  • $song
  • ”; } $songList=“歌曲:$html\r\n”; echo$歌曲列表;
    测试输入($\u POST[“歌曲])应该是一个数组,您的代码是完美的<代码>测试输入($_POST[“歌曲])但应返回一个数组

    使用函数
    is_array()

    $songs=array('a','b');
    if(is_数组($songs))
    {
    foreach($songs作为$song)
    {
    $songs.=“
  • $song
  • ”; } }否则{ echo“它不是数组”; } $songList=“Songs:$Songs\r\n”; echo$songList;`//输出:歌曲:数组
  • a
  • b

  • 以下各项应起作用:

    <?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;
    }
    
    ?>
    
    foreach
    错误消息将说明$POST-associate数组没有返回值数组,取消注释代码中的第二行将有助于调试。如果您发布生成$post的代码,我们也可以检查它

    编辑-更改“多重选择”元素的名称似乎对我有效:

    
    歌曲1
    歌曲2
    歌曲3
    ...
    

    参见:

    var_dump($songs);在foreach循环之前,让我们知道结果des
    test\u input()
    返回一个数组?你能显示你选择的HTML表单吗?如果看不到
    test\u input
    的定义,我们无法回答这个问题。你应该删除
    位于foreach循环的末尾括号中
    foreach
    对数组的副本进行操作,尽管这不是一个特别好的做法,但您可以在循环中更改变量,而不会产生负面影响。我已经更新了代码。还是没有working@itsme请参见在帖子正文中编辑
    <?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;
    }
    
    ?>
    
    http://localhost/songs.php?songs[]=one&songs[]=two&songs[]=three
    
    <select name="songs[]" multiple>
      <option>song 1</option>
      <option>song 2</option>
      <option>song 3</option>
      <option>...</option>
    </select>