【问题标题】:Control PHP scandir via html form通过 html 表单控制 PHP scandir
【发布时间】:2015-01-14 15:08:05
【问题描述】:

我正在使用 PHP 和 scandir 函数构建一个文件排序工具。到目前为止,我得到的是一个包含 PHP 的简单 HTML 文档,它打印出特定目录的所有文件 - 是的。它还根据文件名的升序或降序执行此操作,具体取决于我使用的 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>';
                    }
                }
            }

            ?>

谢谢!

【问题讨论】:

    标签: php html forms scandir


    【解决方案1】:

    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);
    // ...
    

    【讨论】:

    • 嗯,这真的很聪明,很优雅,谢谢!你会说什么是将表格带到行动中的最佳方式?我应该将 PHP 放在外部文件中并通过 GET 将其连接到 php 表单吗?抱歉,PHP 新手
    • @Marc 哦,您可以将其保留在同一个文件中,然后使用 GET。实际上,这可能更合适。我正在编辑我的答案。这样,如果用户使用前进/后退/重新加载按钮,他们将不会收到“您要重新提交表单数据”警告。
    • 嘿@sjagr 感谢您的快速回复,看看我更新的问题,介绍我当前的解决方案。你能明白为什么根本没有输出吗?仔细检查了所有内容。
    • @Marc 你应该发布一个新问题,但从我的快速观察来看,is_dir 似乎正在返回falsefiles 目录相对于你的执行脚本是否存在?
    • 哎呀,抱歉,刚刚找到解决方案,更新如下: case 'asc': $sortFlag = 0;休息;案例 'desc': $sortFlag = 1;休息; 0 代表“上升”,1 代表“下降”,现在一切正常。
    猜你喜欢
    • 2012-03-17
    • 1970-01-01
    • 2012-05-06
    • 2022-09-27
    • 2012-01-11
    • 2017-09-09
    • 2018-12-13
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多