我几乎是个PHP小白,但做一个项目正需要php动态生成复选框列表,我是从几个代码段里总结实验后得到我想要的结果,完美实现动态生成复选框列表。我感觉这个比java或其他语言要简单(关键代码30行),条理也清晰,也可能是别的语言我不懂。
先说一下项目要求:
- 扫描/home/pi/music/目录下的音乐文件并生成文件列表文件(txt)。
- 删除文件中的非音乐文件。
- 以列表文件为内容动态生成复选框列表。
- 选择以后按确定按钮,生成mplayer播放的list文件,供mplayer调用(本例尚未完成)。
实现思想:php和shell配合以txt文件做为数据交换完成要求。
实现方法:
- 扫描生成列表文件:
ls /home/pi/music/ >musicfilet1122.list
之所以用这个一个比较奇怪的名字是因为尽量不要与本来的音乐文件有重复,如有重复会被后面的sed删除。 - 因为mplayer要求播放列表文件必须与音乐文件在同一文件夹,所以虽然第一次没问题,但以后再用的时候,文件列表内必然有一个musiclist1122.list文件,所以必须删除。
sed -i ‘/^musicfile1122/d’ muscifile1122.list - 将上面两行代码写入sh文件中,以供php文件调用。
musicfile1122.sh代码:
#! /bin/bash
cd /home/pi/music
ls >musicfile1122.list
sudo sed -i '/^musicfile1122/d' musicfile1122.list
- 生成复选框列表,这部分是根据几段代码组成的,由于原内容网址不记得,所以没贴出来,在此感谢各位大神!这里的代码基本我解释不了,拿来就用也基本没问题。里面也有一些东西要优化,以后优化好了,再贴出来。不多说,直接上全部代码。
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>音乐列表生成</title>
</head>
<body>
<h2>#####音乐列表已生成……</h2>
<h3>请选择要播放的歌曲:</h3>
</body>
</html>
<?php
$cmd='sudo bash /home/pi/musicfile1122.sh';
shell_exec($cmd);
?>
<?php //定义生成列表数函数
function all_checkboxes($name,$options, $default=array()) {
if (!is_array($default)){
$default = array();
}
foreach($options as $value => $label) {
$html .= "<input type=checkbox ";
if (in_array($value, $default)){
$html .= "checked ";
}
$html .= "name=\"{$name}[]\" value=\"$value\">";
$html .= $label . "<br>";
}
return($html);
}
//打开列表文件
$file = fopen("musicfile1122.list", "r");
$options=array();
$i=0;
//输出文本中所有的行,直到文件结束为止。
while(! feof($file))
{
$options[$i]= fgets($file);//fgets()函数从文件指针中读取一行
$i++;
}
fclose($file);
$options=array_filter($options);
$html = all_checkboxes("interests",$options, $interests);
?>
<form action="" method=post>
<?php echo $html;?>
<input type=submit value="确定">
</form>
<?php //显示选择结果
foreach($_REQUEST as $k=>$v){
echo $k;echo "--";
echo $v;echo "</br>";
}
echo "</br>";
if(isset($_POST['interests'])){
foreach($_POST['interests'] as $k=>$v){
echo $k;echo "--";
echo $v;echo "</br>";
}
}
?>