针对多用户实现头像上传功能PHP代码 适用于登陆页面制作


Posted in PHP onAugust 17, 2016

一个网站,其实说白了就是某几个特定功能的组合,而更换用户头像就在这些功能之中。今天就来做个测试,针对不同的用户,实现头像上传功能。

--------------------------------------------------------------------------------

成品图

针对多用户实现头像上传功能PHP代码 适用于登陆页面制作

思路
 •针对不同的用户上传头像,我们要为每一个已登录的用户创建一个文件夹,文件夹的名称以当前用户的用户名为准。

 •用户上传成功后,跳转到用户登录成功后的页面,并刷新用户头像。

登陆页面

表单制作

<form role="form" action="./forindex.php">
 <div class="form-group">
 <label for="name">用户名</label>
 <input type="text" class="form-control" id="username" name="username"
  placeholder="请输入名称">
 </div>
 <div class="form-group">
 <label for="inputfile">文件输入</label>
 <input type="password" id="inputfile" name="password">
 <p class="help-block">这里是块级帮助文本的实例。</p>
 </div>
 <div class="form-group">
 <label>请输入验证码</label>
 <input type="text" id="checkcode" name="checkcode" />
 <img id="imagecheckcode" src="./store.php?r=<?php echo rand();?>" /><a href="javascript:void(0);" onclick="change()" >看不清</a>
 </div>
 <script>
 function change(){
  document.getElementById("imagecheckcode").src = "./store.php?r="+ Math.random(); 
 }

 </script>
 <button type="submit" class="btn btn-default">提交</button>
</form>

验证码制作

<?php
session_start();// 必须在php的最开始部分声明,来开启session


// 使用gd的imagecreatetruecolor();创建一张背景图
$image = imagecreatetruecolor(100,40);

// 生成填充色
$bgcolor = imagecolorallocate($image,255,255,255);
// 将填充色填充到背景图上
imagefill($image,0,0,$bgcolor);

//////// 生成随机4位字母以及数字混合的验证码
$checkcode='';
for($i=0;$i<4;$i++){
 $fontsize = rand(6,8);
 $fontcolor = imagecolorallocate($image,rand(0,255),rand(0,255),rand(0,255));
 // 为了避免用户难于辨认,去掉了某些有歧义的字母和数字
 $rawstr = 'abcdefghjkmnopqrstuvwxyz23456789';
 $fontcontent = substr($rawstr,rand(0,strlen($rawstr)),1);
 // 拼接即将诞生的验证码
 $checkcode.=$fontcontent;
 // 避免生成的图片重叠
 $x += 20;
 $y = rand(10,20);
 imagestring($image,$fontsize,$x,$y,$fontcontent,$fontcolor); 
}
// 保存到session变量中
$_SESSION['checkcode']=$checkcode;

// 生成一些干扰的点,这里是200个
for($i=0;$i<200;$i++){
 $pointcolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
 imagesetpixel($image,rand(0,100),rand(0,30),$pointcolor);
}
// 生成一些干扰线 这里是4个
for($i=0;$i<4;$i++){
 // 设置为浅色的线,防止喧宾夺主
 $linecolor = imagecolorallocate($image,rand(50,255),rand(50,255),rand(50,255));
 imageline($image,rand(0,99),rand(0,29),rand(0,99),rand(0,29),$linecolor);

}


header('content-type:image/png');

imagepng($image);

// 释放资源,销毁执行对象
imagedestroy($image);

JavaScript刷新验证码

<a href="javascript:void(0);" onclick="change()" >看不清</a>
<script>
 function change(){
  document.getElementById("imagecheckcode").src = "./store.php?r="+ Math.random(); 
 }
</script>

验证页面

由于本次试验最核心的是对用户头像的更换,所以用户名我们暂且不管,以Root为准。

验证逻辑

<?php
 session_start();
 header("Content-Type:text/html;charset=utf-8");

 $username = $_REQUEST['username'];
 $password = $_REQUEST['password'];
 if(strtolower($_REQUEST['checkcode']==$_SESSION['checkcode'])){
 if(!is_dir($username)){
  mkdir($username);
 }
 echo "恭喜您,登陆成功!"."<br />3秒后将自动跳转到个人主页!";
 $_SESSION['username'] = $username;
 header("refresh:3;url=./personalpage.php");


 }else{
 echo "对不起,登陆失败了!";
 header("refresh:3;url=./index.php");
 //echo "<script>window.location.href='./index.php'</script>"; 
 }

页面跳转

在PHP中,要先实现页面的跳转,有很多方式。本文使用了增加header信息的方式,下面介绍几个关于页面跳转的小实例。

header函数

< ?php 
//重定向浏览器
header("Location: http://blog.csdn.net/marksinoberg"); 
//确保重定向后,后续代码不会被执行 
exit;
?>

注意:Location和:之间不能有空格 

Meta标签

<   meta   http-equiv = "refresh"  content = "1;url=http://blog.csdn.net/marksinoberg" >

注意: content可以控制在几秒之内完成跳转。 

JavaScript

< ?php 
$ url = "http://bbs.lampbrother.net" ; 
echo " < script language = 'javascript' 
type = 'text/javascript' > "; 
echo " window.location.href = '$url' "; 
echo " < /script > "; 
?>

注意: 使用JavaScript方式,代码放置的位置可以随意,只要是符合语法要求即可。 

上传页面

个人主页

<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title><?php session_start(); echo $_SESSION['username']."的个人主页"; ?></title>
<style>
 img {
 width:128px;
 height:auto; 
 }
</style>
</head>

<body>

<div>
 <img id="userphoto" src="./root/lover.png" /><br />
 <form action="./uploadphoto.php" method="post" enctype="multipart/form-data">
 <input type="file" name="photo" />
 <input type="submit" onclick="uploadphoto()" value="上传新头像"/>
 </form>
 <script>
 function uploadphoto(){
  document.getElementById("userphoto").src = "./root/<?php echo $_SESSION['username'];?>.png"
 }
 window.onload = function(){
  uploadphoto(); 
 }

 </script>
</div>



</body>
</html>

上传核心

上传的核心还是一个表单,我们把要进行上传的图片上传到服务器,然后php使用move_uploaded_file来实现文件的迁移,实现上传。

<?php
 session_start();
 header("Content-Type:text/html;charset=utf-8");
// 附件的存储位置、附件的名字
$path = "./root/";

$username = $_SESSION['username'];
// 拼接成该文件在服务器上的名称
$server_name = $path.$username.".png";


if($_FILES['photo']['error']>0) {
 die("出错了!".$_FILES['photo']['error']); 
}
if(move_uploaded_file($_FILES['photo']['tmp_name'],$server_name)){
 //echo "<BR>"."Upload Success!";
 echo "恭喜您,上传成功!"."<br />3秒后将自动跳转到个人主页!"; 
 header("refresh:3;url=./personalpage.php");
}else{
 //echo "<BR>"."Upload Failed!".$_FILES['photo']['error']; 
 echo "对不起,上传头像失败了!";
 header("refresh:2;url=./index.php");
}
?>

最终结果

登陆页面

针对多用户实现头像上传功能PHP代码 适用于登陆页面制作

验证结果

针对多用户实现头像上传功能PHP代码 适用于登陆页面制作

个人主页

针对多用户实现头像上传功能PHP代码 适用于登陆页面制作

最新头像

针对多用户实现头像上传功能PHP代码 适用于登陆页面制作

总结

回顾一下,本次试验的收获。
 •session的开启必须在php文件的开头session_start()
 •php可以实现的页面跳转的方式
 •上传文件
 •验证码制作与使用
 •JavaScript:void(0);的使用核心

大致的内容就是这么多,虽然没有增加美化效果,但是麻雀虽小,五脏也算是俱全了。

以上就是本文的全部内容,希望对大家的学习有所帮助,也希望大家多多支持三水点靠木。

PHP 相关文章推荐
PHP中,文件上传
Dec 06 PHP
从手册去理解分析PHP session机制
Jul 17 PHP
解析strtr函数的效率问题
Jun 26 PHP
php接口与接口引用的深入解析
Aug 09 PHP
php实现文件下载简单示例(代码实现文件下载)
Mar 10 PHP
php站内搜索关键词变亮的实现方法
Dec 30 PHP
PHP中字符安全过滤函数使用小结
Feb 25 PHP
PHP Reflection API详解
May 12 PHP
详解WordPress中的头像缓存和代理中的缓存更新方法
Mar 01 PHP
php时间计算相关问题小结
May 09 PHP
php有效防止图片盗用、盗链的两种方法
Nov 01 PHP
Laravel框架Eloquent ORM修改数据操作示例
Dec 03 PHP
总结PHP中数值计算的注意事项
Aug 14 #PHP
示例详解Laravel的注册重构
Aug 14 #PHP
PHP实现路由映射到指定控制器
Aug 13 #PHP
Yii2.0中的COOKIE和SESSION用法
Aug 12 #PHP
PHP Oauth授权和本地加密实现方法
Aug 12 #PHP
PHP 读取大文件并显示的简单实例(推荐)
Aug 12 #PHP
PHPWind9.0手动屏蔽验证码解决后台关闭验证码但是依然显示的问题
Aug 12 #PHP
You might like
全国FM电台频率大全 - 8 黑龙江省
2020/03/11 无线电
php下保存远程图片到本地的办法
2010/08/08 PHP
PHP学习笔记 (1) 环境配置与代码调试
2011/06/19 PHP
使用PHP实现下载CSS文件中的图片
2015/12/06 PHP
PHP的RSA加密解密方法以及开发接口使用
2018/02/11 PHP
IE8 引入跨站数据获取功能说明
2008/07/22 Javascript
csdn 博客中实现运行代码功能实现
2009/08/29 Javascript
ExtJS实现文件下载的方法实例
2013/11/09 Javascript
JS获取URL中参数值(QueryString)的4种方法分享
2014/04/12 Javascript
CSS+JS实现点击文字弹出定时自动关闭DIV层菜单的方法
2015/05/12 Javascript
jQuery EasyUI 菜单与按钮之创建简单的菜单和链接按钮
2015/11/18 Javascript
底部悬浮通栏可以关闭广告位的实现方法
2016/06/01 Javascript
NodeJS使用formidable实现文件上传
2016/10/27 NodeJs
BootStrap Validator 版本差异问题导致的submitHandler失效问题的解决方法
2016/12/01 Javascript
详解node字体压缩插件font-spider的用法
2018/09/28 Javascript
小程序从手动埋点到自动埋点的实现方法
2019/01/24 Javascript
[01:07:41]IG vs VGJ.T 2018国际邀请赛小组赛BO2 第一场 8.18
2018/08/19 DOTA
python3实现UDP协议的服务器和客户端
2017/06/14 Python
python实现淘宝秒杀聚划算抢购自动提醒源码
2020/06/23 Python
TensorFlow 实战之实现卷积神经网络的实例讲解
2018/02/26 Python
Python实现的朴素贝叶斯算法经典示例【测试可用】
2018/06/13 Python
Python基于sklearn库的分类算法简单应用示例
2018/07/09 Python
Python使用Pickle模块进行数据保存和读取的讲解
2019/04/09 Python
python 实现二维字典的键值合并等函数
2019/12/06 Python
tensorflow实现读取模型中保存的值 tf.train.NewCheckpointReader
2020/02/10 Python
python GUI库图形界面开发之PyQt5拖放控件实例详解
2020/02/25 Python
HTML5之tabindex属性全面解析
2016/07/07 HTML / CSS
介绍一下MD5加密算法
2016/11/12 面试题
27个经典Linux面试题及答案,你知道几个?
2014/03/11 面试题
会展中心部门工作职责
2013/11/27 职场文书
珍爱生命演讲稿
2014/05/10 职场文书
优秀求职信
2014/05/29 职场文书
职工擅自离岗检讨书
2014/09/23 职场文书
学生会辞职信
2015/03/02 职场文书
校园之声广播稿
2015/08/18 职场文书
DE1103使用报告
2022/04/05 无线电