通过 html 表单控制 PHP 扫描



我正在使用PHP和scandir函数构建一个文件排序工具。到目前为止,我得到的是一个简单的 HTML 文档,其中包含 PHP,可以打印出特定目录的所有文件 - 耶。它还根据文件名的升序或降序执行此操作,具体取决于我使用的 PHP 脚本。现在我正在尝试构建的是一个带有两个单选按钮和一个更改 PHP 脚本的提交按钮的 HTML 表单:它应该显示升序或降序列表。这是我的 html 表单:

<div class="controls">
    <form class="controlform">
        <input type="radio" name="valone" value="Milk">Ascending
        <input type="radio" name="valtwo" value="Milk">Descending
        <button class="sortbutton">Sort!/button><br>
    </form>
</div>

。在HTML文档后面几行,这是我的PHP脚本的样子:

<?php
$dir = "files";
$exclude = array( ".","..","error_log","_notes" );
if (is_dir($dir)) {
$files = scandir($dir 
    // adding this for descending order ,SCANDIR_SORT_DESCENDING
    );
foreach($files as $file){
    if(!in_array($file,$exclude)){
        echo '
        <li> ' . $file . ' </li>';
    }
 }
}
?>

现在的问题是:我如何让它工作?谢谢!

更新和最终解决方案

非常感谢您的回答!这是可行的解决方案:

.HTML

            <form class="controlform" method="get" action="index.php">
                    <input type="radio" name="sort" value="asc">Ascending
                    <input type="radio" name="sort" value="desc">Descending
                    <button class="sortbutton">Sort!</button><br>
            </form>

.PHP

            <?php
            $sortFlag = SCANDIR_SORT_NONE; // set a default
            if (!empty($_GET['sort'])) {
                switch ($_GET['sort']) {
                    case 'asc': $sortFlag = 0; break;
                    case 'desc': $sortFlag = 1; break;
                }
            }
            $dir = "files";
            $exclude = array( ".","..","error_log","_notes" );
            if (is_dir($dir)) {
                $files = scandir($dir, $sortFlag);
                foreach($files as $file){
                    if(!in_array($file,$exclude)){
                        echo '
                        <li><h3>' . $file . ' </h3></li>';
                    }
                }
            }
            ?>

谢谢!

SCANDIR_SORT_NONESCANDIR_SORT_DESCENDINGSCANDIR_SORT_ASCENDING常量只是PHP以有意义的方式使用的整数。您可以根据需要将这些常量分配给变量,并根据表单输入操作此变量。

$sortFlag = SCANDIR_SORT_NONE; // set a default
if (!empty($_GET['valone'])) $sortFlag = SCAN_SORT_ASCENDING;
if (!empty($_GET['valtwo'])) $sortFlag = SCAN_SORT_DESCENDING;
$files = scandir($dir, $sortFlag);
// ...

您的表格:

<form class="controlform" method="get" action="">
    <input type="radio" name="valone" value="Milk">Ascending
    <input type="radio" name="valtwo" value="Milk">Descending
    <button class="sortbutton">Sort!/button><br>
</form>

我可能会修复radio元素以使用相同的name属性:

<form class="controlform" method="get" action="">
    <input type="radio" name="sort" value="asc">Ascending
    <input type="radio" name="sort" value="desc">Descending
    <button class="sortbutton">Sort!/button><br>
</form>

那么你的PHP代码可能看起来更像这样:

$sortFlag = SCANDIR_SORT_NONE; // set a default
if (!empty($_GET['sort'])) {
    switch ($_GET['sort']) {
        case 'asc': $sortFlag = SCAN_SORT_ASCENDING; break;
        case 'desc': $sortFlag = SCAN_SORT_DESCENDING; break;
    }
}
$files = scandir($dir, $sortFlag);
// ...

最新更新