Я новичок в PHP и следую руководству YouTube. У меня есть все, что работает в этом файле, за исключением загрузки файлов, любая помощь будет оценена. Вот ошибка, которую я получаю:
* ПРИМЕЧАНИЕ. Я искал это много раз, но не смог найти неопределенную ошибку индекса, относящуюся к $ _FILES …
Примечание: Неопределенный индекс: аватар в / Приложения / xxx в строке 95
Примечание. Неопределенный индекс: аватар в / Приложения / xxx в строке 96
Примечание. Неопределенный индекс: аватар в / Приложения / xxx в строке 97
Примечание. Неопределенный индекс: аватар в / Приложения / 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") ; ?>
сначала: попробуйте строгое программирование
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 всегда быть пустым.