[Solved] PHP Undefined index error $_FILES?

I am new to PHP and am following a tutorial on YouTube. I have everything working in this file, except for the file uploading, any help would be appreciated. Here is the error i am getting:

*NOTE: I have looked for this many times, but could not find undefined index error relevant to $_FILES…

Notice: Undefined index: avatar in /Applications/xxx on line 95

Notice: Undefined index: avatar in /Applications/xxx on line 96

Notice: Undefined index: avatar in /Applications/xxx on line 97

Notice: Undefined index: avatar in /Applications/xxx on line 98

Sorry for this if it is a simple fix…

            <?php $title = "Register";?>
        <?php require ("styles/top.php") ; ?>           
        <?php //de-bugging remove this after script works as desired>
         ini_set("display_errors", 1); 
        //end de-bugging//
        $form = "<form action='register.php' method='post'>
        <table cellspacing='5px'>
                <td><font color="red">*</font> are required fields.</td>
                <td>First Name:</td>
                <td><input type="text" name="firstname" class="textbox"><font color="red"> *</font></td>
                <td>Last Name:</td>
                <td><input type="text" name="lastname" class="textbox"><font color="red"> *</font></td>
                <td><input type="text" name="username" class="textbox"><font color="red"> *</font></td>
                <td><input type="text" name="email" class="textbox"><font color="red"> *</font></td>
                <td><input type="password" name="password" class="textbox"><font color="red"> *</font></td>
                <td>Confirm Password:</td>
                <td><input type="password" name="repassword" class="textbox"><font color="red"> *</font></td>
                <td>Profile Picture:</td>
                <td><input name="avatar" type="file" ></td>
                <td>Profile Message:</td>
                <td><textarea name="bio" cols="35" rows="5" class="textbox"></textarea></td>
                <td><input type="submit" name="submitbtn" value="Submit" class="button"></td>
        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) {
                        $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");

                                        move_uploaded_file($tmpname, "avatars/$username.$ext");
                                        $avatar = "$username.$ext";
                                            $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";
                                echo "That email is already taken. $form";
                            echo "That username is already taken. $form";
                        echo "You did not enter a valid email. $form";
                    echo "Your passwords did not match. $form";
                echo "You did not fill in all of the required fields. $form";
                echo "$form";
            <?php require ("styles/bottom.php") ; ?>
Enquirer: mais-oui


Solution #1:

first: try to strict programming

error_reporting(E_ALL | E_STRICT);

also you must use isset for check is index for array available or not

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

also check php configuraion

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

post max size must be larger than upload max file size.

also as guys said check form enctype

Respondent: sweb

Solution #2:

For uploading files, you must use the enctype in form tag.

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

Solution #3:

You should add form attribute enctype="multipart/form-data" to upload files

Respondent: Miqdad Ali

Solution #4:

this is a 1 year ago Post but you may still interested ..
Check this option in PHP.ini :
It should be : on otherwise the $_FILES will be empty forever
Whether PHP will read the POST data This option is enabled by default.
Most likely, you won’t want to disable this option globally. It causes $_POST
and $_FILES to always be empty.

Respondent: Marvin Mustafa

The answers/resolutions are collected from stackoverflow, are licensed under cc by-sa 2.5 , cc by-sa 3.0 and cc by-sa 4.0 .

Most Popular

To Top
India and Pakistan’s steroid-soaked rhetoric over Kashmir will come back to haunt them both clenbuterol australia bossier man pleads guilty for leadership role in anabolic steriod distribution conspiracy