В настоящее время я пытаюсь создать раскрывающийся список PHP, который загружает файл из папки на сервере при нажатии. Я использую IIS и используя joomla plugin sourcerer, который позволяет скриптам PHP работать на веб-страницах joomla.
В настоящее время я использую этот образец кода (из сообщения обмена стеками, которое не создано мной), и я отредактировал его для работы в моей собственной среде.
<p>
<select name="s1">
<option value="" selected="selected">Select Document</option>
<?php
foreach(glob(dirname(path-to-root-dir) . '\path-to-sub-folder\*') as $filename){
$filename = basename($filename);
echo "<option value='" . $filename . "'>".$filename."</option>";
}
?>
</select>
</p>
но я не понял способ сделать так, чтобы, когда пользователь щелкает, например, test.txt из выпадающего списка, браузер запрашивает их для загрузки выбранного файла. Я видел это в.asp, но я новичок в PHP, поэтому я не уверен, что это возможно?
Это будет иметь меньше общего с PHP и больше связано с JavaScript. Событие выбора элемента в элементе select
обрабатывается JavaScript.
Например, если вы однозначно идентифицируете элемент с id
:
<select name="s1" id="s1">
Затем вы можете надежно получить элемент в JavaScript:
var selectElement = document.getElementById('s1');
Теперь вы можете связать с ним обработчик событий:
selectElement.addEventListener('change', function () {
// handle the event here
});
Похоже, вы хотите обработать событие, получив значение select
и направляя браузер к этому значению в качестве URL-адреса. Что-то вроде этого должно начать вас:
selectElement.addEventListener('change', function () {
var fileUrl = selectElement.options[selectElement.selectedIndex].value;
window.location.href = fileUrl;
});
Это предполагает, что значение на самом деле является правильным URL-адресом для файла. Если это не так, вам нужно обратиться к этому, конечно. Но дело в том, что реакция на это событие и направление браузера на "загрузку файла" - это клиентская операция в JavaScript.
я бы, вероятно, использовал Mysql/PHPMYADMIN для хранения местоположения файла и его имени, чтобы затем использовать jquery для загрузки
PHPScript {
$con = mysql_connect("$host","$username","$password") or die("Unable to connect to Local DB");
$db_selected = mysql_select_db("$db_name", $con)or die("Unable to select DB");
// retrive data which you want to export
$query = "SELECT * FROM File_List";
$Options = '<option value="" selected> Please select a file. </option>';
while($Row=mysql_fetch_array($query)){
$Options .= '<option value="'.$Row['FileID'].'">'.$Row['FileName'].'</option>
';}
echo ' <select id="FileList">'.$Options.'</select> <p id="FileGrab"></p>
<script>
var from = $("#FileList").val();
$("#FileGrab").load("Grab_File.php?Name=" + from);
</script>
';
}
Grab_File.php {
$ID = $_GET['Name'];
$con = mysql_connect("$host","$username","$password") or die("Unable to connect to Local DB");
$db_selected = mysql_select_db("$db_name", $con)or die("Unable to select DB");
// retrive data which you want to export
$query = "SELECT * FROM File_List WHERE id='$ID'";
while($Row=mysql_fetch_array($query)){
$Location = $Row['Location'];
$Name = $Row['Name'];
$file = ''.$Location.''.$Name.'';
header('Content-Description: File Transfer');
header('Content-Type: application/octet-stream');
header('Content-Disposition: attachment; filename='.basename($file));
header('Expires: 0');
header('Cache-Control: must-revalidate');
header('Pragma: public');
header('Content-Length: ' . filesize($file));
}
Попробуй это
foreach (new DirectoryIterator('/path-to-sub-folder') as $file)
{
if($file->isDot()) continue;
if($file->isFile())
{
$filename = basename($file);
echo "<option value='" . $filename . "'>".$filename."</option>";
}
}