Загрузка нескольких файлов с PHP и сохранение формы в CSS - PullRequest
1 голос
/ 17 марта 2020

У меня есть форма для сбора информации о студентах, простая версия которой здесь:

<form method="post" name="submit" action="submit" autocomplete="off"> <br>
<input type="name" id="forename" name="forename" placeholder="Forename" required> <br>
<input type="name" id="middlename" name="middlename" placeholder="Middle Name/s" required> <br>
<input type="name" id="surname" name="surname" placeholder="Surname" required> <br>
<input type="tel" id="mobile" name="mobile" placeholder="Mobile Number (+44)" required> <br>
<input type="email" id="email" name="email" placeholder="Email" required> <br>
<input type="message" id="course" name="course" placeholder="Course You're Studying" required> <br>
<input type="message" id="code" name="code" placeholder="Course Code" required> <br>
<input type="message" id="campus" name="campus" placeholder="Campus" required> <br>
<input type="message" id="message" name="message" placeholder="Comments"> <br>
<br>
<input type="file" title="Attach your ID" id="studentidentification" name="studentidentification" required> <br>
<input type="file" title="Attach personal ID" id="personalidentification" name="personaldentification" required> <br>
<br>
<input type="submit" name="submit" id="submit" value="Submit" required="">

Эта форма затем отправляется, например, на submit.php. (страница имеет случайный URL-адрес и затем отправляет пользователя на новую страницу)

Последующая PHP получает все входные данные пользователя и записывает их в CSV-файл, который включает имена файлов студента и личные данные для перекрестных ссылок. PHP также должен загружать каждый файл в папки в папке responses. Так csv, student и personal.

<?php
// DECLARE
    $forename = $_POST['forename'];
        $middlename = $_POST['middlename'];
        $surname = $_POST['surname'];
        $mobile = $_POST['mobile'];
        $email = $_POST['email'];
        
        $course = $_POST['course'];
        $code = $_POST['code'];
        $campus = $_POST['campus'];
        $comments = $_POST['comments'];
        
        $studentidentification = basename($_FILES["studentidentification"]["name"]);
        $personalidentification = basename($_FILES["personalidentification"]["name"]);
        
        $timestamp =date('l jS \of F Y h:i:s A');
//WRITE
     $text = "".$forename.",".$middlename.",".$surname.",".$mobile.",".$email.",".$course.",".$ucas.",".$campus.",".$conditions.",".$studentidentification.",".$personalidentification.",".$timestamp." \n";
        $file = fopen("/responses/csv/results.csv","a+ \n");
        fwrite($file, $text);
        fclose($file);

// STUDENT'S ID
$target_dir = "/responses/student/";
$target_file = $target_dir . basename($_FILES["studentidentification"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

if (file_exists($target_file)) {
    echo "Sorry $forename, there is already a file with this name on the server. Please try renaming it or adding a version number then try again.";
    $uploadOk = 0;
}

if ($uploadOk == 0) {
    echo " Your file was not uploaded.";
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["studentidentification"]["tmp_name"], $target_file)) {
        echo "Thank you, $forename. Your file ". basename( $_FILES["studentidentification"]["name"]). " has been uploaded.";
    } else {
        echo " Sorry $forename, there was an unknown error encountered while uploading your file. Please try again.";
    }
}

// PERSONAL ID
$target_dir1 = "/responses/personal/";
$target_file1 = $target_dir1 . basename($_FILES["personalidentification"]["name"]);
$uploadOk = 1;
$imageFileType = strtolower(pathinfo($target_file,PATHINFO_EXTENSION));

// Check if file already exists
if (file_exists($target_file1)) {
    echo "Sorry $forename, there is already a file with this name on the server. Please try renaming it or adding a version number then try again.";
    $uploadOk = 0;
}

// Check if $uploadOk is set to 0 by an error
if ($uploadOk == 0) {
    echo " Your file was not uploaded."; // Sorry $forename, your file was not uploaded, please try again
// if everything is ok, try to upload file
} else {
    if (move_uploaded_file($_FILES["personalidentification"]["tmp_name"], $target_file1)) {
        echo "Thank you, $forename. Your file ". basename( $_FILES["personalidentification"]["name"]). " has been uploaded.";
    } else {
        echo " Sorry $forename, there was an unknown error encountered while uploading your file. Please try again.";
    }
}

 header("Location: /newstudents/welcome");

?>

По какой-то причине выводится неизвестная ошибка, и я чувствую, что это связано с тем, что два файла загружаются в один файл. Два идентификатора должны быть сделаны отдельно и в одной форме. У меня sh мне платили, чтобы выяснить это, но я не знаю, куда go отсюда, потому что даже CSV не пишет, и это основано на коде, который работает.

Apache error_log, который был сгенерирован, выбрасывает Undefined index для большинства из них failed to open stream: No such file or directory, когда каталоги действительно есть. Также есть fwrite() expects parameter 1 to be resource, boolean given и fclose() expects parameter 1 to be resource, boolean. Спрашивать - последнее средство, потому что в теории это должно работать, извините, если по какой-то причине это явная ошибка.

Любая помощь будет оценена. Спасибо:)

1 Ответ

2 голосов
/ 17 марта 2020

Есть 2 проблемы:

  1. Вам нужно использовать ./ вместо / в начале ваших URL, чтобы ваши URL были относительные и не ссылаются на базу вашего сайта. Это исправит ошибку failed to open stream: No such file or directory.

  2. Вам необходимо добавить enctype="multipart/form-data" в форму, если вы хотите отправить файлы:

    <form method="post" name="submit" action="submit" autocomplete="off" enctype="multipart/form-data">
    ...
    </form>
    

    Это исправит ошибку Undefined index: studentidentification in /home/hosting/domains/example.com/public_html/onboarding/forms/collectid/submit.php.

Кроме того, убедитесь, что для file_uploads установлено значение on в вашем php .ini (PHP конфигурации) файле.

...