我在html表单中有多个select元素(方法 - 帖子)。我想将$ 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
转换为有序列表?
答案 0 :(得分: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关联数组未返回值数组,取消注释我的代码中的第二行将有助于调试此问题。如果您发布生成$ POST的代码,我们也可以检查它!
编辑 - 更改多个选择元素的名称似乎对我有用:
<select name="songs[]" multiple>
<option>song 1</option>
<option>song 2</option>
<option>song 3</option>
<option>...</option>
</select>
答案 1 :(得分: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;
答案 2 :(得分: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>