-2
Попытка разрешить загрузку файла вместе с формой, которая в противном случае работает. Я вырезал соответствующие правила формы/ввода/обработки. Надеюсь, кто-то, кто больше, чем лодыжку в PHP (как я), может указать мне в правильном направлении?PHP Form - загрузка файла не работает
<form name="form-quote" id="form-quote" enctype="multipart/form-data" action="<?php echo $_SERVER['../WPTheme/REQUEST_URI' . '#form-quote'] ?>" method="POST">
<div class="form_labels">
<p><label for="fileupload">Upload File (optional):</label></p>
</div>
<div class="form_inputs">
<input type="hidden" name="MAX_FILE_SIZE" value="5242880" />
<p><input type="file" name="fileupload" id="fileupload" accept=".pdf, .txt, .rtf, .doc, .docx, .xls, .xlsx" style="margin-bottom:2px;"/>
<span style="color:#777;">(pdf, txt, rtf, doc, docx, xls, xlsx, <5MB)</span></p>
</div>
<input type="hidden" name="formtype" id="formtype-quote" value="quote">
<div class="form_labels submit">
<p> </p>
</div>
<div class="form_inputs">
<a href="javascript:void(0);"><input type="submit" value="Submit" name="action" class="btn-red" ></a>
</div>
</form>
<?php
//$formerrors is set to false unless one of the validation rules for the OTHER fields fails - no validation on the file upload, although I would like to trim & sanitize it if possible.
if (!($formerrors) && isset($_POST['fileupload'])):
$tmp_name = $_FILES["fileupload"]["temp_name"];
$uploadfilename = $_FILES["fileupload"]["name"];
$savedate = date("mdy-Hms");
$newfilename = "/wp-content/uploads_forms/" . $savedate . "_" . $uploadfilename;
$uploadurl = 'http://' . $_SERVER['SERVER_NAME'] . $newfilename;
if (move_uploaded_file($tmp_name, $newfilename)):
$msg = "File uploaded.";
else:
$msg = "Sorry, your file could not be uploaded." . $_FILES['file']['error'];
$formerrors = true;
endif; //move uploaded file
endif;
?>
Благодаря ответ Александра ниже, я был в состоянии изменить свой валидатор для работы и для достижения моих первоначальных целей (проверки на нуль, и дать файлы уникальных имен перед загрузкой). Вот мой «окончательный проект», который сейчас работает.
//Check form errors, check file name not null, rename file with unique identifier to avoid overwriting existing files with same name
if (!($formerrors)) {
$tmp_file = $_FILES["fileupload"]["tmp_name"];
if ($tmp_file != "") {
$savedate = date("mdy-Hms");
$target_dir = "wp-content/uploads/";
$target_file = $target_dir . $savedate . '_' . $_FILES["fileupload"]["name"];
if (move_uploaded_file($tmp_file, $target_file)) {
$msg = "File uploaded.";
} else {
$msg = "Sorry, your file could not be uploaded.";
$formerrors = true;
}//move successful
}//end null check
}//end form errors check
PHP не JS. Похоже, что вам нужен подход AJAX. ' php' или' '(если включены короткие теги), начинается блок PHP, а не'
Код, который вы отправили, является большим беспорядком!
Давайте попробуем уточнить некоторые основные моменты ...
механизм файловом загрузки
Для файлов загрузки на работу вы должны иметь
<form>
сaction
атрибут в решении сценарий, где вы будете проверять и использовать загруженный файл.Этот сценарий может быть таким же, как тот, где генерируется
<form>
, предполагая, что вы позаботитесь о подводных камнях, которые приходят с этой ситуацией.При первом общем взгляде ваш текущий код, по-видимому, соответствует последнему случаю.
Но ваша форма
action
выглядит странно:В качестве первого намерения, если вы хотите, чтобы обратиться к той же странице, где вы уже находитесь, вы можете просто опустить
action
атрибут.Здесь, кажется, явно попробовать то же самое, добавив точность
#form-quote
, но:#form-quote
не имеет никакого эффекта здесь, поскольку такое хэш делается таргетинг<a>
, в то время как в настоящее время влияет на ваш<form>
,REQUEST_URI
(которое является именем одного из членов$_SERVER
) с жестким выражением пути в вашем контексте.$_SERVER[...something which is not a known $_SERVER member...]
, поэтому он фактически возвращаетNULL
, и, как это ни парадоксально, он имеет такой же эффект, как если бы вы не указалиaction
вообще!PHP в SO фрагмент
Так НУ поставить свой код в сниппет, но SO сниппеты работать только с HTML, CSS и Javascript, поэтому вы не можете ожидать, что она позволяет показать, как ваш код работает или нет.
Обратите внимание, что на этом этапе, несмотря на ошибки, упомянутые выше, мы не указали что-то, что приведет к сбою вашего кода.
И в вашем вопросе вы не упомянули, как это терпит неудачу!
загруженное обработка файлов
Так, глядя на ваш PHP код, то я первый отметить это заявление:
где вы ищете
temp_name
, в то время как истинный вовлечен ключtmp_name
, Одного этого достаточно, чтобы ваш код вышел из строя.Кроме того, глядя на этих двух утверждений:
В 1-ый вы используете
$newfilename
в качестве дополнения к URL, который вы строите, так что, очевидно$newfilename
не может предназначаться для абсолютный физический путь.Это означает, что во 2-м вы попробуете
move_uploaded_file()
в неправильном месте!Последнее, что вы не можете позаботиться о возможных ошибках, прежде чем пытаться использовать загруженный файл.
Вы должны завершить начальное состояние, как это:
И если вы эффективно получить некоторые ошибки и имеют проблемы, чтобы понять, почему, вы также должны смотреть на this interesting PHP manual page.
источник
2016-03-11 21:25:23 cFreed
Извините за то, что вы не публикуете всю форму - она длинная и сложная. (Из учебника Lynda.com, поэтому методы не мои ... У меня пока нет методов!) Я подумал, что лучше всего сосредоточиться на соответствующих частях, и, увидев код Александра, я помог мне направить корабль. * YOU ARE RIGHT *, что у меня есть пара опечаток в моем исходном коде, который, возможно, был основной причиной, по которой он не работал. Я использовал «temp_name» вместо «tmp_name», и у меня также была ведущая косая черта в моем целевом каталоге, которого не должно было быть. Спасибо за ваш отзыв и ввод. Мне нужно многому научиться, и я ценю всю помощь на этом форуме. – supernaut