我正在尝试使用当前目录的内容填充HTML表单的下拉列表。我试图使用PHP的scandir()函数将这些文件作为数组输出,然后将它们提供给HTML表单中选项的value标记。
我看了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。'而不是菜单栏中的视频
答案 0 :(得分:2)
您必须在回显中使用$file
而不是$filenames
。像这样:
echo '<option value="' . $file . '">' . $file . '</option>';
有关详细信息,请参阅PHP foreach
。
答案 1 :(得分:2)
在迭代数组时,您需要使用$file
进行连接,而不是$filenames
:
echo '<option value="' . $file . '">' . $file . '</option>';
如果同一目录中存在inputfiles
,则应使用以下路径:inputfiles/
答案 2 :(得分:1)
您的脚本有几个问题。
首先,您需要在选项中输出正确的变量:
echo '<option value="' . $file . '">' . $file . '</option>';
其次,您可能需要在循环中添加.
和..
的检测,因为您可能不想输出它们。您可能还想排除目录。
第三,您应该清楚地说明您要扫描的目录。尝试使用完整的文件路径。如果您需要它相对于当前正在执行的文件的目录,您可以执行以下操作:
$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles'; // no need for trailing slash
第四,你可能想考虑使用像DirectoryIterator这样的东西给你一些更方便的方法来做你想做的事情(即在列出之前验证它是一个实际的文件)。所以像这样:
$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles';
$iterator = new DirectoryIterator($dir);
foreach ($iterator as $fileinfo) {
if($fileinfo->isFile()) {
echo '<option value="' . $fileinfo->getFilename() . '">' . $fileinfo->getFilename() . '</option>';
}
}
在这个简单的例子中,你不一定会通过使用DirectoryIterator获得很多(在节省额外代码方面),但我当然想在可以的时候指出它的用法,因为如果你需要开始做事情比如显示文件大小,文件权限,文件修改时间等。使用DirectoryIterator类(如果需要递归,使用RecursiveDirectoryIterator类)比使用传统的PHP文件系统函数要容易得多。