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

时间:2012-12-14 00:13:26

标签: php html html-form

我正在尝试使用当前目录的内容填充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。'而不是菜单栏中的视频

3 个答案:

答案 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文件系统函数要容易得多。