PHP如何更好更有效的实现---用户注册页面

 更新时间:2016年11月25日 17:35  点击:1657

当程序员的人应该都去过论坛,都在应该注册过论坛的用户吧.论坛上用户注册的步骤分为几部:
第一步 协议页面, 只有同意这个协议才可以进入下一步注册
第二步 表单输入页面, 输入用户的注册信息
第三步 注册结果页面,提示注册成功


在实际工作中,假如我们要开发实现这种注册页面,要注重很多的问题:

1用户跳过"第一步",没有阅读协议页面,直接通过第二步的url直接访问表单输入页面.
2用户在完成"第三步"的时候,不停的刷新页面,这个用户输入的信息就在每刷新一次的时候被重新保存一次
3用户在完成"第三步"的时候,点击后退,修改某个信息后,再次提交.


类似这种得表单在web开发的过程中会经常碰到, 对于第3点, 几乎目前所有的论坛中都有这个问题存在,;第2点在一些留言板中经常碰到, 但是怎么作才可以避免上述的问题呢?


今天老板让我帮别人做个文件上传的东西, 答应任何人来上传符合要求文件, 页面模板已经设计好了, 就是和用户注册的步骤是一样的, 分三步骤. 以前做过类似的东西, 但是防刷新机制设计的不是很好. 反正今天没事做, 就稍微研究一下, 看看如何实现代码可以避免上述的问题.
-----------------------------------------------
-----------------------------------------------
下面是个人设计的实现代码,可以避免上述的问题. 通过浏览器访问register.php,在输入"用户名"和"地址"的时候, 两个都不能为空,为空的时候,会提示错误信息; 当两个输入框都不为空的时候, 可以提交成功,提交成功以后,你再进行刷新和后退,看看是不是达到了效果了.


文件一: config.inc.php

<?php

//开始session
session_start();

//设置不进行本地缓存
header('Expires: '.date('D,d M Y H:i:s',mktime(0,0,0,1,1,2000)).' GMT');
header('Last-Modified:'.gmdate('D,d M Y H:i:s').' GMT');
header('Cache-control: private, no-cache,must-revalidate');
header('Pragma: no-cache');

?>


文件二: register.php

<?php

require_once "config.inc.php";

if(isset($_SESSION[step2]) && isset($_POST[step2])) {
//注册的最后一步
$errorStr = formStep3();
if($errorStr!=null){
require_once('step2.html');
}else{
require_once('step3.html');
unset($_SESSION[step2], $_SESSION[step1]);
}

} else if(isset($_SESSION[step1]) && isset($_GET[step1])) {
//注册的第二步
require_once('step2.html');
$_SESSION[step2] = 1;

} else {

单张的图片上传是不复杂的,这里涉及到多张图片上传和对图片格式的校验,保证上传的一定是图片,防止上传其他文件到服务器。

基本实现算法是使用数组的形式,把所有的图片提交个一个数组,对数组的元素进行一个个的处理。

<?php
/*********************************************
* 文件:uploadimg.php
* 用途:图片上传程序
*********************************************/

// 图片目录
$img_dir = "../upload/";
// …… html 显示上传界面

/* 图片上传处理 */
// 把图片传到服务器
// 初始化变量

$uploaded = 0;
$unuploaded = 0;

//只答应五张图片上传

for ($i=0; $i<=5; $i )
{
//获取当前图片的信息
$is_file = $_FILES['imgfile']['name'][$i];
//假如当前图片不为空
if (!empty($is_file))
{
//把当前图片的信息存储到变量里
$result[$i] = "
<tr class=td2 align=center>
<td>". $_FILES['imgfile']['name'][$i] ."</td>
<td>". round($_FILES['imgfile']['size'][$i]/1024, 2) ."K</td>
<td>". $_FILES['imgfile']['type'][$i] ."</td>
<td>";

// 判定上传的图片的类型是不是jpg,gif,png,bmp中的一种,同时判定是否上传成功
if (

$_FILES['imgfile']['type'][$i] == "image/pjpeg" ||
$_FILES['imgfile']['type'][$i] == "image/gif" ||
$_FILES['imgfile']['type'][$i] == "image/x-png" ||
$_FILES['imgfile']['type'][$i] == "image/bmp"
)
{
//假如上传的文件没有在服务器上存在
if (!file_exists($img_dir . $_FILES['imgfile']['name'][$i]))
{
//把图片文件从临时文件夹中转移到我们指定上传的目录中
move_uploaded_file($_FILES['imgfile']['tmp_name'][$i],

假如你学过Asp.net,你一定知道它里面有一个叫datalist之类自带的分页功能十分强大,这里的这个类就模拟了一部份这个功能,我敢用“强大”来定义它,是因为作为一个通用的页类,这个类真正做到了“通用”。
废话少说,马上介绍一下是如何使用的。
1、先新建一个用于测试的表
CREATE TABLE `test` (
`aa` INT NOT NULL AUTO_INCREMENT PRIMARY KEY,
`bb` VARCHAR(50) NOT NULL,
`cc` VARCHAR(50) NOT NULL,
`tt` INT DEFAULT '0' NOT NULL
);
2、制作一个模板文件,保存为:test.htm
{dede:page pagesize=15/}
<table width='100%' border='0' cellpadding='1' cellspacing='1' bgcolor='#CCCCCC'>
<tr bgcolor='#F8FFEE' align='center'>
<td width='10%'>aa</td>
<td width='30%'>bb</td>
<td width='30%'>cc</td>
<td width='30%'>tt</td>
</tr>
{dede:datalist}
<tr bgcolor='#FFFFFF' align='center'>
<td>[field:aa/]</td>
<td>[field:bb/]</td>
<td>[field:cc/]</td>
<td>[field:tt function='date("Y-m-d H-i-s","@me")'/]</td>
</tr>
{/dede}
<tr bgcolor='#F8FFEE'>
<td colspan='4'>
{dede:pagelist listsize=3/}
</td>
</tr>
</table>
3、编写调用这个类的代码
数据库的连接信息均在config_base.php这个文件是设定
showtable.php
<?
require("inc_datalist.php");
$dlist = new DataList();
$dlist->Init();
$dlist->SetTemplet("./test.htm");
$dlist->SetSource("select * from ttt");
$liststring = $dlist->Display();

一般的计数器程序用的执行外部程序函数 exec(),但很多主机空间(包括收费的)拒绝这个危险操作。
我们只好用fread(),fwrite()等文件读写函数,要害在于采用哪种方式fopen()打开文件。试了N次后,证实以下程序是可行,在收费空间上获得验证。

count目录
|---count.php
|---counter.txt
|---0~9的数字GIF图片(0.gif,...,9.gif)
<?
/* 本文件为countconut.php */

$countfile = "count/counter.txt";

if (!file_exists("$countfile")){
$fp=fopen("$countfile","w");
$num=1;
fputs($fp,$num,8);
fclose($fp);
}
else{
$fp=fopen("$countfile","rw ");
$num=fread($fp,8);
$num ;
rewind($fp);
fputs($fp,$num,8);
fclose($fp);
}

/*假如不用图片显示数字,请将以下直到 ?> 之前的部分,改为 echo "<font color=red>".$num."</font>";之类*/
$len_str = strlen($num);
for($i=0;$i<$len_str;$i ){
$numbers_exploded = substr($num,$i,1);
$output_str = $output_str . "<img src="count/$numbers_exploded.gif">";
}
echo $output_str;
?>
使用方法:
例如,在count文件夹外面新建一个test.php。其它位置请修改 $countfile路径。
在test.php要显示的地方直接require一下count.php文件(注重路径)。
<br>
<?php
echo "您是第";
require("count/count.php");
echo "位访客";
?>
<br>

强调最后一个问题,请设置counter.txt文件可读写,Windows下文件权限为everyone,Linux下至少为444。网上的文件或Linux下的文件权限设置要使用FTP软件。

来自 http://cn.php.net/urldecode 评论中的例子,但是中文经escape处理后的字符串再执行此函数,返回的是中文的utf-8编码.

function unicode_urldecode($url)
{
preg_match_all('/%u([[:alnum:]]{4})/', $url, $a);

foreach ($a[1] as $uniord)
{
$dec = hexdec($uniord);
$utf = '';

if ($dec < 128)
{
$utf = chr($dec);
}
else if ($dec < 2048)
{
$utf = chr(192 (($dec - ($dec % 64)) / 64));
$utf .= chr(128 ($dec % 64));
}
else
{
$utf = chr(224 (($dec - ($dec % 4096)) / 4096));
$utf .= chr(128 ((($dec % 4096) - ($dec % 64)) / 64));
$utf .= chr(128 ($dec % 64));
}

$url = str_replace('%u'.$uniord, $utf, $url);
}

return urldecode($url);
}

[!--infotagslink--]

相关文章

  • php 获取用户IP与IE信息程序

    php 获取用户IP与IE信息程序 function onlineip() { global $_SERVER; if(getenv('HTTP_CLIENT_IP')) { $onlineip = getenv('HTTP_CLIENT_IP');...2016-11-25
  • php语言实现redis的客户端

    php语言实现redis的客户端与服务端有一些区别了因为前面介绍过服务端了这里我们来介绍客户端吧,希望文章对各位有帮助。 为了更好的了解redis协议,我们用php来实现...2016-11-25
  • jQuery+jRange实现滑动选取数值范围特效

    有时我们在页面上需要选择数值范围,如购物时选取价格区间,购买主机时自主选取CPU,内存大小配置等,使用直观的滑块条直接选取想要的数值大小即可,无需手动输入数值,操作简单又方便。HTML首先载入jQuery库文件以及jRange相关...2015-03-15
  • JS实现的简洁纵向滑动菜单(滑动门)效果

    本文实例讲述了JS实现的简洁纵向滑动菜单(滑动门)效果。分享给大家供大家参考,具体如下:这是一款纵向布局的CSS+JavaScript滑动门代码,相当简洁的手法来实现,如果对颜色不满意,你可以试着自己修改CSS代码,这个滑动门将每一...2015-10-21
  • php简单用户登陆程序代码

    php简单用户登陆程序代码 这些教程很对初学者来讲是很有用的哦,这款就下面这一点点代码了哦。 <center> <p>&nbsp;</p> <p>&nbsp;</p> <form name="form1...2016-11-25
  • jQuery+slidereveal实现的面板滑动侧边展出效果

    我们借助一款jQuery插件:slidereveal.js,可以使用它控制面板左右侧滑出与隐藏等效果,项目地址:https://github.com/nnattawat/slideReveal。如何使用首先在页面中加载jquery库文件和slidereveal.js插件。复制代码 代码如...2015-03-15
  • PHP+jQuery翻板抽奖功能实现

    翻板抽奖的实现流程:前端页面提供6个方块,用数字1-6依次表示6个不同的方块,当抽奖者点击6个方块中的某一块时,方块翻转到背面,显示抽奖中奖信息。看似简单的一个操作过程,却包含着WEB技术的很多知识面,所以本文的读者应该熟...2015-10-21
  • SQLMAP结合Meterpreter实现注入渗透返回shell

    sqlmap 是一个自动SQL 射入工具。它是可胜任执行一个广泛的数据库管理系统后端指印, 检索遥远的DBMS 数据库等,下面我们来看一个学习例子。 自己搭建一个PHP+MYSQ...2016-11-25
  • php根据用户语言跳转相应网页

    当来访者浏览器语言是中文就进入中文版面,国外的用户默认浏览器不是中文的就跳转英文页面。 <&#63;php $lan = substr(&#8194;$HTTP_ACCEPT_LANGUAGE,0,5); if ($lan == "zh-cn") print("<meta http-equiv='refresh' c...2015-11-08
  • js检测用户输入密码强度

    一个用Javascript检测用户输入密码强度的效果代码,以下代码主要是从以下四个方面检测用户输入的密码的强度的,有兴趣的朋友可以自己添加或修改成自己想要的形式! 1. 如果输入的密码位数少于5位,那么就判定为弱。 2. 如果...2015-10-23
  • php有效防止同一用户多次登录

    【问题描述】:同一用户在同一时间多次登录如果不能检测出来,是危险的。因为,你无法知道是否有其他用户在登录你的账户。如何禁止同一用户多次登录呢? 【解决方案】 (1) 每次登录,身份认证成功后,重新产生一个session_id。 s...2015-11-24
  • PHP实现今天是星期几的几种写法

    复制代码 代码如下: // 第一种写法 $da = date("w"); if( $da == "1" ){ echo "今天是星期一"; }else if( $da == "2" ){ echo "今天是星期二"; }else if( $da == "3" ){ echo "今天是星期三"; }else if( $da == "4"...2013-10-04
  • php ajax注册验证用户名是否存在代码

    这是注册程序是一款当用户输入完用户名是,就会自动去数据库中查询用户要注册的用户名是否己经被注册了,如果是返回提示否则提示可以注册。 conn.php文件 代...2016-11-25
  • 原生js实现fadein 和 fadeout淡入淡出效果

    js里面设置DOM节点透明度的函数属性:filter= "alpha(opacity=" + value+ ")"(兼容ie)和opacity=value/100(兼容FF和GG)。 先来看看设置透明度的兼容性代码: 复制代码 代码如下: function setOpacity(ele, opacity) { if (...2014-06-07
  • Android中用HttpClient实现Http请求通信

    本文我们需要解决的问题是如何实现Http请求来实现通信,解决Android 2.3 版本以后无法使用Http请求问题,下面请看正文。 Android开发中使用HttpClient来开发Http程序...2016-09-20
  • 微信小程序用户授权最佳实践指南

    这篇文章主要给大家介绍了关于微信小程序用户授权最佳实践的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧...2021-05-08
  • 微信小程序 教程之注册页面

    这篇文章主要介绍了微信小程序 注册页面的相关资料,需要的朋友可以参考下...2016-10-20
  • mysql存储过程实现split示例

    复制代码 代码如下:call PROCEDURE_split('分享,代码,片段',',');select * from splittable;复制代码 代码如下:drop PROCEDURE if exists procedure_split;CREATE PROCEDURE `procedure_split`( inputstring varc...2014-05-31
  • 简单php cookie用户登录实例

    cookie 的用途之一是存储用户在特定网站上的密码和 id。另外,也用于存储起始页的首选项。在提供个人化查看的网站上,将要求阁下的网络浏览器利用阁下计算机硬驱上的少量...2016-11-25
  • 超详细的php用户注册页面填写信息完整实例(附源码)

    注册页面是大多数网站必备的页面,所以很有必要对自己的注册页面做些精心的设计。下面三张图,第一张是注册的展示页面,第二张思维导图就一个简单的逻辑,第三张是通过firebug查看调用的JS文件。 一、给每个输入框写下说明在...2015-11-24