Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/239.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
通过html表单控制PHP scandir_Php_Html_Forms_Scandir - Fatal编程技术网

通过html表单控制PHP scandir

通过html表单控制PHP scandir,php,html,forms,scandir,Php,Html,Forms,Scandir,我正在使用PHP和scandir函数构建一个文件排序工具。到目前为止,我得到的是一个包含PHP的简单HTML文档,它打印出特定目录下的所有文件-耶。它还根据文件名的升序或降序来实现这一点,具体取决于我使用的PHP脚本。现在,我试图构建一个HTML表单,其中包含两个单选按钮和一个修改PHP脚本的提交按钮:它应该显示升序或降序列表。这是我的html表单: <div class="controls"> <form class="controlform">

我正在使用PHP和scandir函数构建一个文件排序工具。到目前为止,我得到的是一个包含PHP的简单HTML文档,它打印出特定目录下的所有文件-耶。它还根据文件名的升序或降序来实现这一点,具体取决于我使用的PHP脚本。现在,我试图构建一个HTML表单,其中包含两个单选按钮和一个修改PHP脚本的提交按钮:它应该显示升序或降序列表。这是我的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


提升
下降的
排序
PHP



谢谢大家!

SCANDIR\u SORT\u NONE、
SCANDIR\u SORT\u DESCENDING
SCANDIR\u SORT\u suscending
常量都是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>
然后,您的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\u dir
可能返回了
false
。相对于正在执行的脚本,是否存在
文件
目录?哎呀,抱歉,刚刚找到解决方案,更新了以下内容:case'asc':$sortFlag=0;打破案例'desc':$sortFlag=1;打破0表示“升序”,1表示“降序”,现在一切正常。
<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>
<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>
$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);
// ...