Получение значения текстового поля и использование его в качестве имени файла в PHP

Я пытаюсь получить значение текстового поля и использовать его в качестве имени файла для файла, который будет загружен. Но я не знаю, как это сделать.

Пока мой код загружается, но я не могу использовать значение текстового поля в качестве имени файла. Итак, вот мой код, и что я должен добавить, чтобы иметь возможность получить значение из текстового поля и использовать его в качестве имени файла загруженного файла?

Вот сторона HTML:

//HTML Code:
<form method="post" action = "/downloads.php">
    <table width="100%" border="0">
        <tr>
            <td width="49%" height="47"> <span class="new">  &nbsp; Reference Number: </span> </td>
            <td width="51%" height="47"> <span class="nbox"> &nbsp; <input type="text" name="refOff" id="refOff"/></td>
        </tr>
        <tr>
            <td height="47" colspan="2">&nbsp;<input type="submit" value="Download" style="width:80px; height:30px"></td>
        </tr>
    </table>
</form>

А вот и PHP

//PHP Code: 
//note: "C:\wamp\www\dl" contains the PDF file

<?php

$refOff = $_POST['refOff'];
$file   = $refOff . '.pdf';


if (file_exists($file)) {
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));
readfile($file);
exit;
}
?>

Загружаемый файл - "Form2.pdf".

Например, ссылочный номер abcd123, как его можно загрузить как "abcd123.pdf"? Спасибо за то, что вы хороший ^_^

3 ответа

Вам нужно получить имя файла, заданное в форме, а затем установить его.

Просто обновите свой php-код так:

$file   = 'C:\wamp\www\dl\Form2.pdf';
$filename = (isset($_POST['refOff'])) ? $_POST['refOff'].'.pdf' : 'form2.pdf'; //Get filename set in form

if (file_exists($file)) {
  header('Content-Description: File Transfer');
  header('Content-Type: application/octet-stream');
  header('Content-Disposition: attachment; filename='.$filename); //Set the filename
  header('Expires: 0');
  header('Cache-Control: must-revalidate');
  header('Pragma: public');
  header('Content-Length: ' . filesize($file));
  readfile($file);
  exit;
}
?>

Вы можете получить доступ к переменным формы по их соответствующим супервариантам ($_GET и $_POST). Итак, сначала вы должны определить метод в вашей форме

<form method="GET">

Затем вы можете получить доступ к переменной этой формы следующим образом:

$_GET['name']

Замените name на имя атрибута нужного вам ввода; в твоем случае

$_GET['refOff']

То же самое верно для метода POST.


Кроме того, путь, указанный другим пользователем, не является неправильным. Но избегайте определения метода формы. И избегайте полагаться на $_REQUEST, это может привести ко многим проблемам безопасности, если используется без опыта.

Замещать

header('Content-Disposition: attachment; filename='.basename($file));

от

header('Content-Disposition: attachment; filename='.basename($_REQUEST['refOff']));
Другие вопросы по тегам