【问题标题】:PHP: Dynamic dropdown cascade to select directory and then folderPHP:动态下拉级联选择目录,然后选择文件夹
【发布时间】:2014-07-31 23:49:33
【问题描述】:

我以前只在 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>

并创建了一个名为“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);

【问题讨论】:

  • 我不明白缺少数据库与此有什么关系
  • 好像可以这样。还有什么事?
  • 好吧,没有疑问,我只是不确定它是如何工作的。我还用post吗?我可以将 $val 传递到下一个下拉菜单吗?所以这个函数可以拉起目录。我想将所选目录传递到下一个下拉列表,并让下一个下拉列表显示所选目录中的文件列表。
  • 不理解你不理解的东西;(
  • 肯定考虑使用 Ajax。这么简单的功能很可能是您的最佳选择

标签: php html dynamic drop-down-menu


【解决方案1】:

使用 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);

 }

用于进行 ajax 调用和更新文件选项的 jQuery 代码

$(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 ); 
      });
   });
});

试一试,相信对你有帮助

【讨论】:

  • 非常感谢您让我在正确的开始。我将在最终工作的上方发布。非常感谢您的帮助!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2013-09-14
  • 1970-01-01
  • 1970-01-01
  • 2013-07-09
  • 2021-01-31
  • 1970-01-01
  • 2019-06-04
相关资源
最近更新 更多