使用PHP数组填充HTML表单下拉菜单



我正在尝试用当前目录的内容填充HTML表单的下拉列表。我尝试使用PHP的scandir()函数将这些文件输出为数组,然后将它们输入HTML表单中的选项值标记中

我查看了SO和外部的各种解决方案,但似乎都不适合我

这就是我的代码现在的样子:

<form action="" >
<input type="submit" class="Links" value="Select Input">
<select >               
<?php 
$dir="./inputfiles/"; 
$filenames = scandir($dir); 
foreach($filenames as $file){
echo '<option value="' . $filenames . '">' . $filenames . '</option>';
}
?>                      
</select> 
</form> 

现在,我在下拉菜单中没有任何选项。

我是PHP的新手,非常感谢您对如何实现这一点的反馈。


进一步更改:

我尝试了下面给出的解决方案,但似乎都不起作用。我修改了代码,以检查PHP脚本是否能够输出html表单列表中的任何变量。

<form action="" >
<input type="submit" class="Links" value="Select Input">
<select >               
<?php 
$someval = "Video";
echo '<option value="value"> ' . $someval .' </option>';
?>                      
</select> 
</form>

它显示"$someval."而不是菜单栏中的视频

您必须在回显中使用$file,而不是$filenames。像这样:

echo '<option value="' . $file . '">' . $file . '</option>';

有关更多信息,请参阅PHPforeach

在数组上迭代时,需要使用$file进行串联,而不是$filenames:

echo '<option value="' . $file . '">' . $file . '</option>';

如果inputfiles存在于同一目录中,则应使用路径:inputfiles/

脚本中的几个问题。

首先,您需要在选项中输出正确的变量:

echo '<option value="' . $file . '">' . $file . '</option>';

其次,您可能需要在循环中添加对...的检测,因为您可能不想输出它们。您可能还想排除目录。

第三,您可能应该明确要扫描的目录。请尝试使用完整的文件路径。如果你需要它相对于当前执行文件的目录,你可以做一些类似的事情:

$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles'; // no need for trailing slash

第四,您可能想考虑使用DirectoryTerator之类的工具,为您提供一些更方便的方法来完成您想要做的事情(即在列出它之前验证它是一个实际的文件)。这样的东西:

$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles';
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $fileinfo) {
if($fileinfo->isFile()) {
echo '<option value="' . $fileinfo->getFilename() . '">' . $fileinfo->getFilename() . '</option>';
}
}

在这个琐碎的例子中,使用DirectoryTerator不一定会获得很多好处(在保存额外代码方面),但我当然喜欢在可能的时候指出它的用法,因为如果你需要开始做一些事情,比如显示文件大小、文件权限、文件修改时间,使用DirectoryTerator类(如果需要递归,则使用RecursiveDirectoryTeror类)比使用传统PHP的文件系统函数要容易得多。

最新更新