У меня были проблемы с этим.Это очень противоречиво.У меня есть форма, где есть заголовок (вход), краткое описание (вход), полное описание (текстовое поле) и загрузки изображений.(Весь соответствующий код приведен ниже).
После нажатия кнопки отправки в форме запускается PHP-скрипт для обработки загрузки файлов.Перед перемещением каждого файла из его временного местоположения он проходит серию операторов if, которые должны быть проверены.Если он не проходит этап проверки, применяется условие else этого условия, и в зависимости от проблемы в сеансе PHP «причина» устанавливается слово.(т. е. $ _SESSION ['reason'] = "invalidfile '). Затем пользователь перенаправляется обратно на страницу формы, где, в зависимости от того, для чего установлена причина, пользователю показывается конкретная ошибка. Первое условие проверки работает(проверьте, все ли поля были заполнены.) Однако ни одно из них не работает после этого. За исключением того факта, что иногда они работают.
Любая помощь по этому вопросу будет принята с благодарностью. Это также может бытьполезно знать, что иногда в Chrome изображения загружаются, но страница никогда не перенаправляется дальше на страницу подтверждения. Это никогда не происходит в Microsoft Edge.
HTML-форма - заголовок, краткое описание, полное описание, файлы изображений
// If there is a file uploaded when you redirect back from the confirm page and 'return' is set in the header.
if(isset($_SESSION['file'])){
// For every image uploaded:
for($i = 0; $i < count($_SESSION['file']['destination']); $i++){
// Delete the image because the user is forced to reupload them anyway.
unlink($_SESSION['file']['destination'][$i]);
}
// Unset the 'file' session now we don't need it anymore
unset($_SESSION['file']);
header("Location: index.php?page=createproject");
}
?>
<h1>Create Project</h1>
<p><a href="index.php?page=admin">Go back</a></p>
<form action="index.php?page=createprojectstorefiles" method="post" enctype="multipart/form-data">
<p>Project Title: <input type="text" name="title" maxlength="35" autocomplete="off"
<?php
if(isset($_SESSION['project_details'])){
echo "value='".$_SESSION['project_details']['title']."'";
}
?>
/></p>
<p>Project Images: <input type="file" name="file[]" accept=".png, .jpg, .jpeg" multiple/></p>
<p><label for="textarea" style="vertical-align: top; margin-right: 5px;">Short Descritption: </label><textarea name="short_description" rows="4" cols="60" maxlength="80" style="resize: none;"><?php
if(isset($_SESSION['project_details'])){
echo $_SESSION['project_details']['short_description'];
}
?></textarea></p>
<p><label for="textarea" style="vertical-align: top; margin-right: 5px;">Full Story: </label><textarea name="long_description" rows="15" cols="125" maxlength="5000" style="resize: none;"><?php
if(isset($_SESSION['project_details'])){
echo $_SESSION['project_details']['long_description'];
}
?></textarea></p>
<?php
// If a reason has been sent for the form not working and the user hasn't been logged out.
if(isset($_SESSION['reason'])){
// If a 'reason' has been sent for not logging in.
if(isset($_SESSION['reason'])){
// Tell the user the reason.
if($_SESSION['reason']=="noinput"){
echo "<p><font color='red'><span class='error'>You can't leave any boxes blank</span></font></p>";
} elseif($_SESSION['reason']=="invalidfile"){
echo "<p><font color='red'><span class='error'>The file must be a '.jpg', '.jpeg' or '.png'</span></font></p>";
} elseif($_SESSION['reason']=="uploaderror"){
echo "<p><font color='red'><span class='error'>There was an error uploading your image!</span></font></p>";
} elseif($_SESSION['reason']=="filetoolarge"){
echo "<p><font color='red'><span class='error'>Your file is too large. The max file size is 500MB</span></font></p>";
} elseif($_SESSION['reason']=="success"){
header("Location: index.php?page=createprojectconfirm");
} else{
echo "<p><font color='red'><span class='error'>Something went wrong in validation, contact a network administrator</span></font></p>";
}
// Once the user has been told, unset the session.
unset($_SESSION['reason']);
// Otherise, presume that it's due to an incorrect username or password.
} else{
echo "<p><font color='red'><span class='error'>Something went wrong in validation, contact a network administrator</span></font></p>";
}
}
?>
<p><button type="reset">Reset Form</button> <button type="submit" name="createproject">Preview Project</button></p>
</form>
PHP Script - проверка и перемещение загруженных файлов из временной папки
// Make sure no reason is set.
if(isset($_SESSION['reason'])){
unset($_SESSION['reason']);
}
if(isset($_SESSION['file'])){
unset($_SESSION['file']);
}
// If the create project form has been submitted:
if(isset($_POST['createproject'])){
// Set all of the variables for the other text boxes in a session called 'project_details'.
$_SESSION['project_details']['title'] = $_POST['title'];
$_SESSION['project_details']['short_description'] = $_POST['short_description'];
$_SESSION['project_details']['long_description'] = $_POST['long_description'];
// If all of the fileds have been filled in:
if(!empty($_POST['title']) && $_FILES['file']['error'][0]=='UPLOAD_ERR_OK' && !empty($_POST['short_description']) && !empty($_POST['long_description'])){
// Count the number of files uploaded.
$fileCount = count($_FILES['file']['name']);
$_SESSION['file']['count'] = $fileCount;
// Do for every uploaded file.
for($i = 0; $i < $fileCount; $i++){
// Set all of the variables for the file upload (file $i).
$file = $_FILES['file'];
$_SESSION['file']['name'] = $_FILES['file']['name'][$i];
$_SESSION['file']['tmpName'] = $_FILES['file']['tmp_name'][$i];
$_SESSION['file']['size'] = $_FILES['file']['size'][$i];
$_SESSION['file']['error'] = $_FILES['file']['error'][$i];
$_SESSION['file']['type'] = $_FILES['file']['type'][$i];
$fileExt = explode(".", $_SESSION['file']['name']);
$_SESSION['file']['actualExt'] = strtolower(end($fileExt));
$allowed = array("jpg", "jpeg", "png");
// If the file type is allowed:
if(in_array($_SESSION['file']['actualExt'], $allowed)){
// If there was no error uploading the file:
if($_SESSION['file']['error'] == 0){
// If the file isn't too large:
if($_SESSION['file']['size'] < 500000){
// Move the file from the temporary location to the new destination and set $_SESSION['reason'] to success so the page redirects to the confirm page. This shouldn't have to be neccesary to make it work but it is. No body on earth knows why.
$fileNameNew = uniqid("", true).".".$_SESSION['file']['actualExt'];
$_SESSION['file']['destination'][$i] = "projects/uploads/".$fileNameNew;
move_uploaded_file($_SESSION['file']['tmpName'], $_SESSION['file']['destination'][$i]);
// Otherwise, inform the user.
} else{
for($i = 0; $i < count($_SESSION['file']['destination']); $i++){
// Delete the image because the user is forced to reupload them anyway.
unlink($_SESSION['file']['destination'][$i]);
}
$_SESSION['reason']="filetoolarge";
header("Location: index.php?page=createproject");
exit();
}
// Otherwise, inform the user.
} else{
for($i = 0; $i < count($_SESSION['file']['destination']); $i++){
// Delete the image because the user is forced to reupload them anyway.
unlink($_SESSION['file']['destination'][$i]);
}
$_SESSION['reason']="uploaderror";
header("Location: index.php?page=createproject");
exit();
}
// Otherwise, inform the user.
} else{
for($i = 0; $i < count($_SESSION['file']['destination']); $i++){
// Delete the image because the user is forced to reupload them anyway.
unlink($_SESSION['file']['destination'][$i]);
}
$_SESSION['reason']="invalidfile";
header("Location: index.php?page=createproject");
exit();
}
}
// After all the files have been uploaded, if the header function doesn't work, use the session method to redirect to the complete page.
if(!header("Location: index.php?page=createprojectconfirm")){
$_SESSION['reason']="success";
exit();
}
// Otherwise, inform the user.
} else{
$_SESSION['reason']="noinput";
header("Location: index.php?page=createproject");
exit();
}
} else{
header("Location: index.php?page=admin");
exit();
}