Asked  7 Months ago    Answers:  5   Viewed   38 times

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>
        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") ; ?>

 Answers

58

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

Wednesday, March 31, 2021
 
Vlad
answered 7 Months ago
10

Look at your php.ini file for these 2 parameters, WAMPServer comes configured with

upload_max_filesize = 2M
post_max_size = 8M

Increase the upload_max_filesize to a little bigger that the largest file you want to allow to be unloaded. Or a lot larger if you intend to upload more than one file at a time.

Then increase post_max_size to a number LARGER that you set upload_max_filesize to so for example

upload_max_filesize = 80M
post_max_size = 85M

post_max_size must be larger that upload_max_filesize as the file is transported in the POST buffer as well as all other fields that may exist on your form

NOTE use the wampmanager icon to get to edit php.ini and that will ensure you edit the correct php.ini there are 2.

wampmanager -> php -> php.ini

Also remember to restart Apache once you have edited and saved php.ini

wampmanager -> Apache -> Service administration 'wampapache' -> Restart Service
Friday, May 28, 2021
 
Saxophlutist
answered 5 Months ago
35

Initialize the value before you use it:

if (!isset($assignedQuantityPerUser[$row["sellerid"]])) {
  $assignedQuantityPerUser[$row["sellerid"]] = 0;
}
$assignedQuantityPerUser[$row["sellerid"]] += $totalUnitsOrdered;
Saturday, May 29, 2021
 
twk
answered 5 Months ago
twk
51

Some providers does not allow you change certain values in running time. Instead of this, try to either change it in the real php.ini file or use an .htaccess (For Apache web servers) where you can add your configuration. You can find more information in the PHP.net article about this subject: How to change configuration settings.

Based on your story, example .htaccess

<IfModule mod_php5.c>
php_value upload_max_filesize 100000000
php_value post_max_size 110000000
php_value memory_limit 120000000
php_value max_input_time 20
</IfModule>
Saturday, May 29, 2021
 
Wookai
answered 5 Months ago
99

The problem was due to having uppercase characters in the table. I switched to all lower case characters in both the table and field names and the problem disappeared.

Tuesday, August 10, 2021
 
Anders Andersen
answered 3 Months ago
Only authorized users can answer the question. Please sign in first, or register a free account.
Not the answer you're looking for? Browse other questions tagged :