PHP用户注册时上传照片,使用php完成一个用户注册以及管理的demo(php实现单文件与多文件的上传)...

此篇文章主要讲解如何封装一个php的用于文件上传下载的函数,可以用于本demo中的头像上传功能,顺便讲解一下多文件上传的方式。如果对于文件上传特别熟悉可以跳过此节。

还是使用之前那个界面。

addUser.php:

title>head>

添加管理员H3>用户名称TD>TD>tr>用户密码TD>TD>tr>用户邮箱TD>TD>tr>性别td>男

保密

td>tr>

头像td>td>tr>TD>tr>FORM>body>html>

20150213101445_4188.png

这里是文件目录:

20150213101445_6376.png

在表单提交的doAdminAction.php中,只需要增 加move_uploaded_file($_FILES["face"]["tmp_name"],

"upload/" . $_FILES["face"]["name"]);这一行代码,即可把客户端上传的文件放在服务器中的对应的地方。但是这样的代码有一些问题

(1)如果在admin不存在upload的文件夹,文件上传不上去。

(2)对于上传的文件的类型没有进行检验,如果出现病毒文件会比较危险。

(3)如果上传了与upload文件夹中的文件名称相同的文件,原来的文件就会被替换掉。

(4)对于文件上传可能会出现的一些错误没有进行处理,例如文件大小超过了2M,(php ini 文件中默认规定的上传限制大小为2M)

下面是解决方案:

(1)首先判断upload的文件夹是否存在,如果不存在则建立$path="upload/";

//如果路径不存在就建立的路径上

if(!file_exists($path))

{

mkdir($path,0777,true);

}

(2)使用strtolower(end(explode(“.”, $filename)));获得文件的拓展名

然后判断拓展名是否在所需要的文件类型中。

(3)使用md5(uniqid(microtime(true),true));得到一个唯一的字符串与之前得到的文件拓展名连接在一起,作为上传文件的文件名。

(4)现在开始编写doAdminAction的代码,第四个问题将在代码中讲解。require_once'../include.php';

//print_r($_FILES["face"]);$path="upload/";

//如果路径不存在就建立的路径上if(!file_exists($path))

{

mkdir($path,0777,true);

}

//允许的类型$allowExt=array("gif","jpeg","png","jpg","wbmp");

$filename=$_FILES["face"]["name"];

$ext=getExt($filename);

if(!in_array($ext,$allowExt)){

exit("非法文件类型");

}

//得到了唯一的文件名的文件$filename=getUniName().".".$ext;

if(move_uploaded_file($_FILES["face"]["tmp_name"],

$path.$filename))

{

echo"文件上传成功";

}

else

{

switch($_FILES["face"]['error']){

case1:

$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZEbreak;

case2:

$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZEbreak;

case3:

$mes="文件部分被上传";//UPLOAD_ERR_PARTIALbreak;

case4:

$mes="没有文件被上传";//UPLOAD_ERR_NO_FILEbreak;

case6:

$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIRbreak;

case7:

$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;break;

case8:

$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSIONbreak;

}

echo$mes;

}

?>

如果发生了出现的错误,则这些错误会被打印出来。至此单文件上传的内容讲解完毕,现在将上述的代码封装为函数。functionuploadFile($path="upload/",$allowExt=array("gif","jpeg","png","jpg","wbmp"),$imgFlag=true)

{//如果路径不存在就建立的路径上if(!file_exists($path))

{

mkdir($path,0777,true);

}

//允许的类型$filename=$_FILES["face"]["name"];

$ext=getExt($filename);

if(!in_array($ext,$allowExt)){

exit("非法文件类型");

}

if($imgFlag){

//如何验证图片是否是一个真正的图片类型//getimagesize($filename):验证文件是否是图片类型 正确返回数组错误返回false$info=getimagesize($tmp_name);

//var_dump($info);exit;if(!$info){

exit("不是真正的图片类型");

}

}

//得到了唯一的文件名的文件$filename=getUniName().".".$ext;

if(move_uploaded_file($_FILES["face"]["tmp_name"],

$path.$filename))

{

echo"文件上传成功";

}

else

{

switch($_FILES["face"]['error']){

case1:

$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZEbreak;

case2:

$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZEbreak;

case3:

$mes="文件部分被上传";//UPLOAD_ERR_PARTIALbreak;

case4:

$mes="没有文件被上传";//UPLOAD_ERR_NO_FILEbreak;

case6:

$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIRbreak;

case7:

$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;break;

case8:

$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSIONbreak;

}

echo$mes;

}

}

多文件上传分为两种情况

(1)多个单文件上传

title>head> 请选择上传文件:

请选择上传文件:

请选择上传文件:FORM>body>html>

这种形式相当于上传了多个单文件,在doAction2.php中print_r($_FILES);得到Array

(

[myFile1] => Array

(

[name] => touxiang.jpg

[type] => image/jpeg

[tmp_name] => D:\xampp\tmp\php79E3.tmp

[error] => 0

[size] => 28747

)

[myFile2] => Array

(

[name] => 文章.png

[type] => image/png

[tmp_name] => D:\xampp\tmp\php7A03.tmp

[error] => 0

[size] => 11655

)

[myFile3] => Array

(

[name] => 增加.png

[type] => image/png

[tmp_name] => D:\xampp\tmp\php7A04.tmp

[error] => 0

[size] => 7439

)

)

(2)多文件上传

title>head> 请选择上传文件:

请选择上传文件:

请选择上传文件:FORM>body>html>

同样print_r($_files)一下Array

(

[myFile] => Array

(

[name] => Array

(

[0] => touxiang.jpg

[1] => 文章.png

[2] => 增加.png

)

[type] => Array

(

[0] => image/jpeg

[1] => image/png

[2] => image/png

)

[tmp_name] => Array

(

[0] => D:\xampp\tmp\php1EC.tmp

[1] => D:\xampp\tmp\php1ED.tmp

[2] => D:\xampp\tmp\php1EE.tmp

)

[error] => Array

(

[0] => 0

[1] => 0

[2] => 0

)

[size] => Array

(

[0] => 28747

[1] => 11655

[2] => 7439

)

)

)

发现两种方式得到的数组有很多的不同。

对于第一种的情况(相当于一个文件数组)我们可以foreach ($_FILESas$var)

{

//对于每一个文件进行了文件上传操作$info=uploadFile($var);

echo$info;

}

对于第二种情况我们可以将所示的三维数组转换为第一种情况所示的二维数组即可。foreach($_FILES[myFile][name] as $key=>$var )

{

$files[$key][name]=$_FILES[myFile][name][$key];

$files[$key][type]=$_FILES[myFile][type][$key];

$files[$key][tmp_name]=$_FILES[myFile][tmp_name][$key];

$files[$key][error]=$_FILES[myFile][error][$key];

$files[$key][size]=$_FILES[myFile][size][$key];

}

print_r($files);

结果Array

(

[0] => Array

(

[name] => touxiang.jpg

[type] => image/jpeg

[tmp_name] => D:\xampp\tmp\php3227.tmp

[error] => 0

[size] => 28747

)

[1] => Array

(

[name] => 文章.png

[type] => image/png

[tmp_name] => D:\xampp\tmp\php3228.tmp

[error] => 0

[size] => 11655

)

[2] => Array

(

[name] => 增加.png

[type] => image/png

[tmp_name] => D:\xampp\tmp\php3229.tmp

[error] => 0

[size] => 7439

)

)

成功了,现在我们开始封装一个文件上传函数,这个函数呢既可以处理单文件上传又可以处理多文件上传。然后我们只需要编写数组处理的这部分,然后调用upload()函数即可。require_once"../include.php";

//用于转换数组functionbuildInfo()

{foreach($_FILESas$file)

{

$i=0;

if(is_string($file['name']))

{

$files[$i]=$file;

$i++;

}

else

{

foreach($file[name] as$key=>$var)

{

$files[$key][name]=$file[name][$key];

$files[$key][type]=$file[type][$key];

$files[$key][tmp_name]=$file[tmp_name][$key];

$files[$key][error]=$file[error][$key];

$files[$key][size]=$file[size][$key];

}

}

}

return$files;

}

//用于上传functionuploadFile($path="upload/",$allowExt=array("gif","jpeg","png","jpg","wbmp"))

{//如果路径不存在就建立的路径上if(!file_exists($path))

{

mkdir($path,0777,true);

}

$files=buildInfo();

foreach($filesas$file)

{

//允许的类型$filename=$file["name"];

$ext=getExt($filename);

if(!in_array($ext,$allowExt)){

exit("非法文件类型");

}

//校验是否是一个真正的图片类型if($imgFlag){

if(!getimagesize($file['tmp_name'])){

exit("不是真正的图片类型");

}

}

//得到了唯一的文件名的文件$filename=getUniName().".".$ext;

if(move_uploaded_file($file["tmp_name"],

$path.$filename))

{

echo"文件上传成功";

}

else

{

switch($file['error']){

case1:

$mes="超过了配置文件上传文件的大小";//UPLOAD_ERR_INI_SIZEbreak;

case2:

$mes="超过了表单设置上传文件的大小"; //UPLOAD_ERR_FORM_SIZEbreak;

case3:

$mes="文件部分被上传";//UPLOAD_ERR_PARTIALbreak;

case4:

$mes="没有文件被上传";//UPLOAD_ERR_NO_FILEbreak;

case6:

$mes="没有找到临时目录";//UPLOAD_ERR_NO_TMP_DIRbreak;

case7:

$mes="文件不可写";//UPLOAD_ERR_CANT_WRITE;break;

case8:

$mes="由于PHP的扩展程序中断了文件上传";//UPLOAD_ERR_EXTENSIONbreak;

}

echo$mes;

}

}

}

这段代码中还增加了对于上传图片是否为图片格式的检验,以及对于图片大小的检验,因为有些病毒文件会伪装为图片文件。

以上就介绍了使用php完成一个用户注册以及管理的demo(php实现单文件与多文件的上传),包括了方面的内容,希望对PHP教程有兴趣的朋友有所帮助。

本文原创发布php中文网,转载请注明出处,感谢您的尊重!

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
这是一个简PHP 注册登录系统的 demo,包含了用户注册、登录、注销和个人信息页面。 首先,需要创建一个数据库和用户表。可以使用以下 SQL 语句创建: ``` CREATE DATABASE users; USE users; CREATE TABLE `users` ( `id` int(11) NOT NULL AUTO_INCREMENT, `username` varchar(50) NOT NULL, `password` varchar(255) NOT NULL, PRIMARY KEY (`id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; ``` 然后,创建一个 `config.php` 文件,包含以下代码: ```php <?php $db_host = "localhost"; // 数据库主机 $db_name = "users"; // 数据库名 $db_user = "root"; // 数据库用户名 $db_password = ""; // 数据库密码 // 连接数据库 $conn = mysqli_connect($db_host, $db_user, $db_password, $db_name); // 检查连接 if (!$conn) { die("连接失败:" . mysqli_connect_error()); } ?> ``` 接下来,创建一个 `register.php` 文件,用于用户注册: ```php <?php require_once "config.php"; if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST["username"]; $password = $_POST["password"]; // 检查用户名是否已存在 $sql = "SELECT id FROM users WHERE username = '$username'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { echo "用户名已存在!"; } else { // 插入新用户 $sql = "INSERT INTO users (username, password) VALUES ('$username', '$password')"; if (mysqli_query($conn, $sql)) { echo "注册成功!"; } else { echo "注册失败:" . mysqli_error($conn); } } mysqli_close($conn); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>注册</title> </head> <body> <h2>注册</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="注册"> </form> </body> </html> ``` 然后,创建一个 `login.php` 文件,用于用户登录: ```php <?php require_once "config.php"; if ($_SERVER["REQUEST_METHOD"] == "POST") { $username = $_POST["username"]; $password = $_POST["password"]; // 验证用户名和密码 $sql = "SELECT id FROM users WHERE username = '$username' AND password = '$password'"; $result = mysqli_query($conn, $sql); if (mysqli_num_rows($result) > 0) { session_start(); $_SESSION["username"] = $username; header("location: profile.php"); } else { echo "用户名或密码错误!"; } mysqli_close($conn); } ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>登录</title> </head> <body> <h2>登录</h2> <form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>"> <label>用户名:</label> <input type="text" name="username"><br> <label>密码:</label> <input type="password" name="password"><br> <input type="submit" value="登录"> </form> </body> </html> ``` 接着,创建一个 `profile.php` 文件,用于显示用户个人信息: ```php <?php session_start(); if (!isset($_SESSION["username"])) { header("location: login.php"); exit; } $username = $_SESSION["username"]; ?> <!DOCTYPE html> <html> <head> <meta charset="UTF-8"> <title>个人信息</title> </head> <body> <h2>个人信息</h2> <p>用户名:<?php echo $username; ?></p> <a href="logout.php">注销</a> </body> </html> ``` 最后,创建一个 `logout.php` 文件,用于用户注销: ```php <?php session_start(); session_unset(); session_destroy(); header("location: login.php"); exit; ?> ``` 以上就是一个简PHP 注册登录系统的 demo,可以根据需要进行修改和扩展。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值