我的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
转换为有序列表?
以下方法应该有效:
<?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>
请参阅: 多选到阵列
那是因为你在循环时正在改变$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;
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>