Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/235.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
PHP:动态下拉级联选择目录,然后选择文件夹_Php_Html_Dynamic_Drop Down Menu - Fatal编程技术网

PHP:动态下拉级联选择目录,然后选择文件夹

PHP:动态下拉级联选择目录,然后选择文件夹,php,html,dynamic,drop-down-menu,Php,Html,Dynamic,Drop Down Menu,我以前只在MySQL中使用过PHP,我发现自己在没有数据库的情况下无法工作!我真的很感谢你的帮助 我想创建两个动态下拉列表。第一个选择目录,第二个选择所选目录中的文件 下面是我当前用于选择目录的代码,但我仍无法确定下一步要做什么 此函数用于拉起目录。我想将所选目录传递到下一个下拉列表,并让下一个下拉列表显示所选目录中的文件列表 <select name="Dirs"> <option value="" selected="selected">Lab</option&

我以前只在MySQL中使用过PHP,我发现自己在没有数据库的情况下无法工作!我真的很感谢你的帮助

我想创建两个动态下拉列表。第一个选择目录,第二个选择所选目录中的文件

下面是我当前用于选择目录的代码,但我仍无法确定下一步要做什么

此函数用于拉起目录。我想将所选目录传递到下一个下拉列表,并让下一个下拉列表显示所选目录中的文件列表

<select name="Dirs">
<option value="" selected="selected">Lab</option>
<?php
$dirs = glob("/var/www/html/blast/labs/*", GLOB_ONLYDIR);
foreach($dirs as $val){
echo '<option value="'.basename($val).'">'.basename($val)."</option>\n";
}
?>
</select>

实验室
解决方案:

我在主页上使用此脚本添加了两个下拉列表:

<select id="Files" name="Files">
</select>
<script type="text/javascript">

$(function(){ 
  $("#Dirs").on('change', function(){
     var Dir = $(this).val();
 //Make an ajax call 
     $( "#Files" ).html( '<option>Loading...</option>' );
     $.get( "listfiles.php?Dirs=" + encodeURIComponent(Dir), function( data ) {
       //Update the files dropdown 
       $( "#Files" ).html( data ); 
     });
  });
});
</script>

$(函数(){
$(“#Dirs”).on('change',function(){
var Dir=$(this.val();
//进行ajax调用
$(“#文件”).html('Loading…');
$.get(“listfiles.php?Dirs=“+encodeURIComponent(Dir),function(data){
//更新“文件”下拉列表
$(“#文件”).html(数据);
});
});
});
并创建了一个名为“listfiles.php”的文件,其中包含以下php脚本:
$folder = $_GET['Dirs'];
if(!file_exists($folder)) {
exit('File Not Found');
}

$out = '';

function only_files($file) { $idx = strlen($file) - 1;
return substr($file, $idx) != '/';
}

$files = array_filter(glob($folder . "/*", GLOB_MARK), 'only_files');

foreach($files as $val){
$out .= '<option value="'.$val.'">'.basename($val)."</option>\n";
}

//Output the file options
exit($out);
$folder=$\u GET['Dirs'];
如果(!file_存在($folder)){
退出(“未找到文件”);
}
$out='';
仅函数_文件($file){$idx=strlen($file)-1;
返回substr($file,$idx)!=“/”;
}
$files=array_filter(glob($folder./*”,glob_标记),“only_files”);
foreach($val形式的文件){
$out.=''.basename($val)。“\n”;
}
//输出文件选项
退出($退出);

使用jQuery ajax填充文件下拉列表,下面是一个示例

<select id="dirs" name="Dirs">
  <option value="" selected="selected">Lab</option>
  <?php
     $dirs = glob("/var/www/html/blast/labs/*", GLOB_ONLYDIR);
        foreach($dirs as $val){
           echo '<option value="'.$val.'">'.basename($val)."</option>\n";
        }
  ?>
</select>

<select id="files" name="mFiles">

</select>

实验室
您需要一个文件来处理ajax调用,或者只需在文件的开头添加下面的代码

ajax.php

<?php
 /* AJAX check  */
 if(!empty($_SERVER['HTTP_X_REQUESTED_WITH']) &&
    strtolower($_SERVER['HTTP_X_REQUESTED_WITH']) == 'xmlhttprequest') {

    //Check for passed dir exist 
    $folder = $_GET['Dirs'];

    if(!file_exists($folder)) {
      exit('Folder Not Found');
    }

    $out = '';

    $files = array_filter(glob($folder.'/*'), 'is_file');
      foreach($files as $val){
          $out .= '<option value="'.$val.'">'.basename($val)."</option>\n";
      }

    //Output the file options
    exit($out);

 }

我看不出db的缺失与此有什么关系,似乎这可以奏效。还有什么?没有疑问,我只是不知道它是怎么工作的。我还用邮局吗?我可以将$val传递到下一个下拉列表吗?所以这个函数的作用是拉起目录。我想将所选目录传递到下一个下拉列表,让下一个下拉列表显示所选目录中的文件列表;(当然可以考虑使用Ajax。这很可能是您使用如此简单的功能的最佳选择。非常感谢您让我有了一个正确的开始。我将在上面发布最终有效的功能。我非常感谢您的帮助!
$(function(){ 
   $("#dirs").on('change', function(){
      var Dir = $(this).val();
      //Make an ajax call 
      $( "#files" ).html( '<option>Loading...</option>' );
      $.get( "ajax.php?Dirs=" + encodeURIComponent(Dir), function( data ) {
        //Update the files dropdown 
        $( "#files" ).html( data ); 
      });
   });
});