PHP未定义索引错误$\u文件?
我是PHP新手,正在关注YouTube上的教程。我在这个文件中的一切工作,除了文件上传,任何帮助将不胜感激。以下是我得到的错误: *注意:我已经找了很多次了,但是找不到与$\u文件相关的未定义索引错误 注意:未定义索引:第95行/Applications/xxx中的化身 注意:未定义索引:第96行/Applications/xxx中的化身 注意:未定义索引:第97行/Applications/xxx中的化身 注意:未定义索引:第98行/Applications/xxx中的化身 很抱歉,如果这是一个简单的修复PHP未定义索引错误$\u文件?,php,file,upload,error-handling,undefined,Php,File,Upload,Error Handling,Undefined,我是PHP新手,正在关注YouTube上的教程。我在这个文件中的一切工作,除了文件上传,任何帮助将不胜感激。以下是我得到的错误: *注意:我已经找了很多次了,但是找不到与$\u文件相关的未定义索引错误 注意:未定义索引:第95行/Applications/xxx中的化身 注意:未定义索引:第96行/Applications/xxx中的化身 注意:未定义索引:第97行/Applications/xxx中的化身 注意:未定义索引:第98行/Applications/xxx中的化身 很抱歉,如果这是一
<?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") ; ?>
要上载文件,必须使用enctype in form标记
<form enctype="multipart/form-data" action='register.php' method='post'>
首先:尝试严格编程
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
post max size必须大于upload max file size
正如大家所说,检查表单enctype你应该添加表单属性enctype=“multipart/form data”
来上传文件这是一年前的帖子,但你可能仍然感兴趣。。
在PHP.ini中选中此选项:
启用\u post\u数据\u读取=关闭
它应该是:打开,否则$\u文件将永远为空
PHP是否将读取POST数据默认情况下启用此选项。
很可能,您不希望全局禁用此选项。它会导致$u POST
和$\u文件始终为空。var\u dump($\u文件)代码>并始终使用var_dump()
要查看变量内部的内容,我发现将所有数据检查封装在一个递归if
语句中有点奇怪。如果用户名已被使用,并且用户输入了无效的电子邮件,会发生什么情况?让他们一次知道所有的错误,这样他们就不必一次修复一个错误,这不是很好吗?就我个人而言,我将所有错误添加到一个数组中,比如$err[]='username empty'
,然后只需进一步检查$err是否设置了
,并在其中循环显示所有错误。@Mike感谢您的建议。现在,我还不够高级,但我将来会尝试这样做。if(isset($\u POST['submitbtn'])和&isset($\u FILES['avatar']){//…}
可以工作,但是我在/Applications/xxx中得到未定义的索引:tmpname我应该在哪里添加file\u上传“1”上传最大文件大小“2M”POST\u最大大小“8M”max_文件上传20次
?感谢您的帮助和快速回复。如果您使用apache,您可以使用。。。或php.ini。。。重启apache(或phpcgi)后,请检查phpinfo()以确认。然后检查您正在上载的文件大小是否大于php.ini中定义的限制。如果你不知道怎么做,试着问一个小图片(几kB)的愚蠢问题,但是你在再次提交页面以测试它是否有效之前是否刷新了页面?不,我没有,但我自己也犯过这个错误,所以请确保你没有。