2012-12-14 68 views
0

我試圖填充一個HTML表單的下拉當前目錄的內容列表。我試圖使用PHP的scandir()函數將這些文件作爲數組輸出,然後將它們饋送到HTML表單中的選項的值標記中。填充HTML表單下拉菜單,一個PHP數組

我看着SO外提供的各種解決方案,但似乎沒有爲我工作。

這是我的代碼看起來像現在:

<form action="" > 
     <input type="submit" class="Links" value="Select Input"> 
     <select >    
      <?php 
       $dir="./inputfiles/"; 
       $filenames = scandir($dir); 
       foreach($filenames as $file){ 
        echo '<option value="' . $filenames . '">' . $filenames . '</option>'; 
        } 
      ?>      
     </select> 
</form> 

現在我得到在下拉菜單中絕對沒有任何選項。

我很新的PHP,並會感謝您的反饋,如何使這項工作。


進一步修改:

我試着下面給出的解決方案,並且似乎沒有工作。我更改了代碼來檢查PHP腳本是否能夠輸出任何變量或不在HTML表單列表中。

<form action="" > 
     <input type="submit" class="Links" value="Select Input"> 
     <select >    
      <?php 
        $someval = "Video"; 
        echo '<option value="value"> ' . $someval .' </option>'; 
      ?>      
     </select> 
</form> 

它顯示'。 $ someval。'而不是在菜單欄中

+0

此外,請確保使用2個週期在文件系統中升級:'$ dir =「../ inputfiles /」;' – christopher

+0

我正在搜索當前級別以上的文件。所以,inputfiles文件夾出現在當前目錄中。 – mystique

+1

@NineHourz在這種情況下,您應該使用路徑'inputfiles /' –

回答

1

一對夫婦對你的劇本的擔憂。

首先,你需要輸出的選項中正確的變量:

echo '<option value="' . $file . '">' . $file . '</option>'; 

其次,你可能會需要在你的循環添加檢測...,因爲你很可能不希望將他們輸出。您可能也想要排除目錄。

第三,你應該說清楚正是你所想掃描的內容目錄。嘗試使用完整的文件路徑。如果你需要它相對於當前執行文件的目錄,你可以這樣做:

$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles'; // no need for trailing slash 

第四,你可能要考慮的東西,如DirectoryIterator工作,讓大家有更方便的方法,你在找什麼做(即在列出它之前驗證它是一個實際的文件)。因此,像這樣:

$dir= __DIR__ . DIRECTORY_SEPARATOR . 'inputfiles'; 
$iterator = new DirectoryIterator($dir); 
foreach ($iterator as $fileinfo) { 
    if($fileinfo->isFile()) { 
     echo '<option value="' . $fileinfo->getFilename() . '">' . $fileinfo->getFilename() . '</option>'; 
    } 
} 

在這個簡單的例子,它,你不一定會收穫很多(以節省額外的代碼而言)採用DirectoryIterator,但我肯定喜歡時,我可以指出它的用法,因爲如果您需要開始執行諸如顯示文件大小,文件許可權,文件修改時間等等。使用DirectoryIterator類(或RecursiveDirectoryIterator類,如果您需要遞歸)使用它比使用傳統PHP文件系統更容易功能。

+0

非常感謝Mike!你的解釋是有道理的。我嘗試了你的建議,但它仍然顯示'。 $ fileinfo-> getFilename()。 '而不是實際的變量值。如果我用echo''替換該行;它確實在菜單欄中顯示了一些值。我不明白爲什麼PHP不能正確解析實際值。 – mystique

+0

是否存在'$ fileinfo'對象,否則'isFile()'不等於'true'。你確定你的回聲中的引號放置正確嗎?當你var_dump($ fileinfo)'或'var_dump($ fileinfo-> getFilename())'時,你會得到什麼? –

+0

當我將var_dump($ fileinfo)中的值打印到單獨的瀏覽器中時,我得到正確的文件列表。但是,當我在值選項中包含var_dump ..時,它將按原樣打印,而不會評估實際值。 – mystique

2

視頻你有迴音了沒有$filenames使用$file。像這樣:

echo '<option value="' . $file . '">' . $file . '</option>';

有關更多信息,請參見PHP foreach

+0

感謝您的快速回復。我嘗試了這個改變,但是它仍然沒有改變輸出。 – mystique

+0

檢查路徑。或者可以先嚐試絕對路徑,看它是否工作。你也可以使用函數'getcwd'(http://php.net/manual/en/function.getcwd.php)來獲得當前的工作路徑,以確認你是否正確。 – NawaMan

+0

請看編輯的問題 – mystique

2

當數組在迭代,你需要使用$file進行連結,不$filenames

echo '<option value="' . $file . '">' . $file . '</option>'; 

如果inputfiles出現在同一目錄下,你應該使用的路徑:inputfiles/