PHP Неопределенная ошибка индекса $_FILES?

Я новичок в PHP и следую инструкциям на YouTube. У меня есть все, что работает в этом файле, за исключением загрузки файла, любая помощь будет оценена. Вот ошибка, которую я получаю:

* ПРИМЕЧАНИЕ: я искал это много раз, но не смог найти неопределенную ошибку индекса, относящуюся к $_FILES...

Примечание: неопределенный индекс: аватар в /Applications/xxx в строке 95

Примечание: неопределенный индекс: аватар в /Applications/xxx в строке 96

Примечание: неопределенный индекс: аватар в /Applications/xxx в строке 97

Примечание: неопределенный индекс: аватар в /Applications/xxx в строке 98

Извините за это, если это простое исправление...

            <?php $title = "Register";?>
        <?php require ("styles/top.php") ; ?>           
        <?php //de-bugging remove this after script works as desired>
        error_reporting(E_ALL);
         ini_set("display_errors", 1); 
        //end de-bugging//

        $form = "<form action='register.php' method='post'>
        <table cellspacing='5px'>
            <tr>
                <td></td>
                <td><font color='red'>*</font> are required fields.</td>
            </tr>
            <tr>
                <td>First Name:</td>
                <td><input type='text' name='firstname' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Last Name:</td>
                <td><input type='text' name='lastname' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Username:</td>
                <td><input type='text' name='username' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Email:</td>
                <td><input type='text' name='email' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Password:</td>
                <td><input type='password' name='password' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Confirm Password:</td>
                <td><input type='password' name='repassword' class='textbox'><font color='red'> *</font></td>
            </tr>
            <tr>
                <td>Profile Picture:</td>
                <td><input name='avatar' type='file' ></td>
            </tr>
            <tr>
                <td>Profile Message:</td>
                <td><textarea name='bio' cols='35' rows='5' class='textbox'></textarea></td>
            </tr>
            <tr>
                <td></td>
                <td><input type='submit' name='submitbtn' value='Submit' class='button'></td>

            </tr>
        </table>
        </form>";


        if ($_POST['submitbtn']) {

            $firstname = strip_tags($_POST['firstname']);
            $lastname = strip_tags($_POST['lastname']);
            $username = strip_tags($_POST['username']);
            $email = strip_tags($_POST['email']);
            $class = ($_POST['class']);
            $password = strip_tags($_POST['password']);
            $repassword = strip_tags($_POST['repassword']);
            $bio = strip_tags($_POST['bio']);
            //AVATAR UPLOAD
            $name = $_FILES['avatar'] ['name'];
            $type = $_FILES['avatar'] ['type'];
            $size = $_FILES['avatar'] ['size'];
            $tmpname = $_FILES['avatar'] ['tmpname'];
            $ext = substr($name, strrpos($name, '.'));



            if ($firstname && $lastname && $username && $email && $password && $repassword) {
                if ($password == $repassword) {
                    if (strstr($email, "@") && strstr($email, ".") && strlen($email) >= 6) {

                        require("scripts/connect.php");

                        $query = mysql_query("SELECT * FROM users WHERE username ='$username'");
                        $numrows = mysql_num_rows($query);
                        if ($numrows == 0) {

                            $query = mysql_query("SELECT * FROM users WHERE email ='$email'");
                            $numrows = mysql_num_rows($query);
                            if ($numrows == 0) {

                                $pass = (md5(md5($password)));
                                $date = date("F j, Y");

                                if($name){
                                        move_uploaded_file($tmpname, "avatars/$username.$ext");
                                        $avatar = "$username.$ext";
                                        }
                                        else
                                            $avatar = "default_avatar.png";

                                    $code = substr(md5(rand(111111111111, 99999999999999999)), 2, 25);  


                                mysql_query("INSERT INTO users VALUES ('', '$firstname', '$lastname', '$username', '$email', '$pass', '$avatar', '$bio', '', '', '$code', '', '$date')"); 

                                    $webmaster = "xxxx";
                                    $subject = "xxxx";
                                    $headers = "From:xxx<$webmaster>";
                                    $message = "xxx";

                                    mail($email, $subject, $message, $headers);

                                    echo "xxx";

                            }
                            else
                                echo "That email is already taken. $form";
                        }
                        else
                            echo "That username is already taken. $form";

                    }
                    else
                        echo "You did not enter a valid email. $form";

                }
                else
                    echo "Your passwords did not match. $form";
            }
            else
                echo "You did not fill in all of the required fields. $form";

            }
            else
                echo "$form";

            ?>

            </div>
            <?php require ("styles/bottom.php") ; ?>

4 ответа

Решение

Во -первых: попробуйте строго программировать

error_reporting(E_ALL | E_STRICT);

также вы должны использовать isset для проверки, индекс для массива доступен или нет

if (isset($_POST['submitbtn']) && isset($_FILES['avatar'])) {
     // ...
}

также проверьте конфигурацию php

file_uploads    "1"
upload_max_filesize     "2M"
post_max_size   "8M"
max_file_uploads    20

максимальный размер сообщения должен быть больше, чем максимальный размер файла для загрузки.

также, как сказали ребята, проверьте форму enctype

Для загрузки файлов вы должны использовать enctype в теге формы.

<form enctype="multipart/form-data" action='register.php' method='post'>

Вы должны добавить атрибут формы enctype="multipart/form-data" загружать файлы

Это сообщение 1 года назад, но вы можете по-прежнему интересоваться. Проверьте эту опцию в PHP.ini: enable_post_data_reading=off Должно быть: включено, иначе $_FILES будет пустым навсегда. Будет ли PHP читать данные POST. дефолт. Скорее всего, вы не захотите отключать эту опцию глобально. Это приводит к тому, что $_POST и $_FILES всегда будут пустыми.

Другие вопросы по тегам