Запрос пользователю на указание пути к папке

Всем доброго времени суток, пишу приложение для диплома, имеется следующая страница для создания отчетов по кабинетам. введите сюда описание изображения

Блок имеет следующий код

<div class="report">
        <div class="directory">
            <form action="/php/report.php" method="post" class="dir_form">
                <input type="text" placeholder="Введите путь к папке в которую хотите сохранить отчет" name="dir" id="dir">
                <input type="submit" value="Применить" name="dir_but" id="dir_but">
            </form>
        </div>
        <div class="adm_tit">1 этаж</div><hr>
        <form action="/php/report.php" method="post" class="rep11kab" id="report_form">
            <input type="hidden" name="nom_kab" value="11">
            <input type="submit" name="11kab" value="Создать отчет по 11 кабинету">
        </form>
        <form action="/php/report.php" method="post" class="rep15kab" id="report_form">
            <input type="hidden" name="nom_kab" value="15">
            <input type="submit" name="15kab" value="Создать отчет по 15 кабинету">
        </form>
        <div class="adm_tit">2 этаж</div><hr>
        <form action="/php/report.php" method="post" class="rep21kab" id="report_form">
            <input type="hidden" name="nom_kab" value="21">
            <input type="submit" name="21kab" value="Создать отчет по 21 кабинету">
        </form>
        <form action="/php/report.php" method="post" class="rep28kab" id="report_form">
            <input type="hidden" name="nom_kab" value="28">
            <input type="submit" name="28kab" value="Создать отчет по 28 кабинету">
        </form>
        <div class="adm_tit">3 этаж</div><hr>
        <form action="/php/report.php" method="post" class="rep36kab" id="report_form">
            <input type="hidden" name="nom_kab" value="36">
            <input type="submit" name="36kab" value="Создать отчет по 36 кабинету">
        </form>
        <form action="/php/report.php" method="post" class="rep37kab" id="report_form">
            <input type="hidden" name="nom_kab" value="37">
            <input type="submit" value="Создать отчет по 37 кабинету" name="37kab">
        </form>
        <div class="adm_tit">4 этаж</div><hr>
        <form action="/php/report.php" method="post" class="rep46kab" id="report_form">
            <input type="hidden" name="nom_kab" value="46">
            <input type="submit" value="Создать отчет по 46 кабинету" name="46kab">
        </form>
        <form action="/php/report.php" method="post" class="rep47kab" id="report_form">
            <input type="hidden" name="nom_kab" value="47">
            <input type="submit" value="Создать отчет по 47 кабинету" name="47kab">
        </form>
 
        <div class="adm_tit">Полный</div><hr>
        <form action="/php/report.php" method="post" class="rep47kab" id="report_form_all">
            <input type="hidden" name="all_rep_name" value="Общий отчет по всем кабинетам">
            <input type="submit" value="Создать полный отчет по всем кабинетам" name="all_report">
        </form>
    </div>

Для создания отчета использую PhpWord, данные заполняются из БД с помощью следующего php кода

mysqli_report(MYSQLI_REPORT_ALL ^ MYSQLI_REPORT_INDEX);
require "./vendor/autoload.php";
include "connect.php";
 
$numb = filter_var(trim($_POST['nom_kab']),
FILTER_SANITIZE_STRING);
 
$date = date('d.m');
$year = date('Y');
 
$dir = filter_var(trim($_POST['dir']),
FILTER_SANITIZE_STRING);
$kab11 = isset($_POST['11kab']);
$kab15 = isset($_POST['15kab']);
$kab21 = isset($_POST['21kab']);
$kab28 = isset($_POST['28kab']);
$kab36 = isset($_POST['36kab']);
$kab37 = isset($_POST['37kab']);
$kab46 = isset($_POST['46kab']);
$kab47 = isset($_POST['47kab']);
$all = isset($_POST['all_report']);
 
if ($kab11 || $kab15 || $kab21 || $kab28 || $kab36 || $kab37 || $kab46) { 
    $report_select="SELECT `name_computer`, `computer`, `motherboard`, `display`, `multimedia`,
        `data_storage`, `input`, `network`, `peripherals`, `bios` FROM `mat-tehn` WHERE `kab`='$numb'";
    $report=mysqli_query($mysqli, $report_select);
    $report_info = mysqli_fetch_assoc($report);
    // file variables
    $document = new \PhpOffice\PhpWord\TemplateProcessor('./report-template.docx');
    $filename = $dir.'\Отчет-о-кабинете-'.$numb.'. Дата и время-'. date('Y-m-d H-i-s') . '.docx';
    // recording data to variable
    $name_computer = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['name_computer']);
    $computer = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['computer']);
    $motherboard = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['motherboard']);
    $display = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['display']);
    $multimedia = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['multimedia']);
    $data_storage = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['data_storage']);
    $input = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['input']);
    $network = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['network']);
    $peripherals = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['peripherals']);
    $bios = str_replace("\r\n", '</w:t><w:br/><w:t xml:space="preserve">', $report_info['bios']);
 
    // recording data to a file
    $document -> setValue('numb', $numb);
    $document -> setValue('name_computer', $name_computer); 
    $document -> setValue('computer', $computer); 
    $document -> setValue('motherboard',$motherboard);
    $document -> setValue('display', $display); 
    $document -> setValue('multimedia', $multimedia);
    $document -> setValue('data_storage', $data_storage);
    $document -> setValue('input', $input);
    $document -> setValue('network', $network);
    $document -> setValue('peripherals', $peripherals);
    $document -> setValue('bios', $bios);
    $document -> setValue('date', $date);
    $document -> setValue('year', $year);
 
    
    // file saving
    $document->saveAs($filename);

И вот сам вопрос:

Нужно как-то реализовать возможность чтобы пользователь мог выбрать куда сохранять отчет. В данном случае я вижу два варианта:

  1. Через текстовый input, который уже есть на странице, предоставлять пользователю возможность выбрать папку, но не обычным набором через клавиатуру, а вывести окно windows, которое можно увидеть при скачивание файл из браузера.
  2. И, наверное немного облегченный вариант, чтобы при нажатие на кнопку с видом отчета пользователю выводилось то же самое окно windows с выбором папки из первого варианта.

(Возможно есть способ реализовать это с помощью js, поэтому он указан в метках).

Готов к любым иным идеям и предложениям, кроме указания абсолютного пути.

Заранее благодарен за помощь.


Ответы (2 шт):

Автор решения: highpassion

Если после создания отчета перезагружается страница на клиенте, то запишите ссылку на документ в href ссылки с атрибутом download

<a href="/path/to/document.docx" download>

→ Ссылка
Автор решения: Andrew

почему тебя не устраивает обычное окно windows ? Не нужно ничего иное создавать, пользователи привыкли к этому и им будет привычно будет проводник Windows 7/10. Пользуйся что есть

Можете попробовать добавить:

$filename = 'nameOfFile.docx';
$document->save($filename);
header('Content-Description: File Transfer');
header('Content-type: application/force-download');
header('Content-Disposition: attachment; filename='.basename($filename));
header('Content-Transfer-Encoding: binary');
header('Content-Length: '.filesize($filename));
readfile($filename);
→ Ссылка