0

HTML フォームのドロップダウン リストに現在のディレクトリの内容を入力しようとしています。PHP の scandir() 関数を使用してこれらのファイルを配列として出力し、HTML フォーム内のオプションの値タグに入力しようとしました。

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 .' メニューバーのビデオの代わりに

4

3 に答える 3

2

$fileエコーアウト not で使用する必要があり$filenamesます。このような:

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

詳細については、 PHPforeachを参照してください。

于 2012-12-14T00:16:01.787 に答える
2

$file配列を反復処理するときは、次ではなく連結に使用する必要があります$filenames

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

inputfilesが同じディレクトリにある場合は、次のパスを使用する必要があります。inputfiles/

于 2012-12-14T00:16:21.600 に答える
1

スクリプトに関するいくつかの懸念。

まず、オプション内で正しい変数を出力する必要があります。

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

次に、出力したくない場合があるため、ループ内.およびループ内に検出を追加する必要があります。..ディレクトリも除外することもできます。

第三に、スキャンしようとしているディレクトリを正確に明確にする必要があります。フルファイルパスを使用してみてください。現在実行中のファイルのディレクトリに対して必要な場合は、次のようにすることができます。

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

第4に、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を使用しても(余分なコードを節約するという点で)必ずしも多くの利益が得られるとは限りませんが、ファイルの表示などを開始する必要がある場合は、可能な場合はその使用法を指摘したいと思います。サイズ、ファイルのアクセス許可、ファイルの変更時間など。従来のPHPのファイルシステム関数を使用するよりも、DirectoryIteratorクラス(または再帰が必要な場合はRecursiveDirectoryIteratorクラス)を使用する方がはるかに簡単です。

于 2012-12-14T00:31:08.177 に答える