411 12
发新话题
打印

PHPLib简明教程

纲要:
    这里需要做的是一个注册程序,它的功能要求是:能够自动注册一个合法用户,并且
将自动为用户生成一个8位的密码并发送到用户的邮箱。其中标识用户的是唯一的用户名字
和唯一且真实的电子邮箱。
正文:
十.使用phplib编程具体例子(三)  
作者:hzqbbc(黑仔强)(中山大学GNU/Linux协会)

(5).开始具体编写

编写Header.inc,Footer.inc(略)
编写具体函数和相关接口

(6).解决关键的技术问题

a.如何编写query()呢?

这个函数需要的功能就是查询发送过来的用户名和邮箱是否已经给注册,如果其中之一或
者全部都给注册了后就返回错误信息,否则进入confim_reg()函数。

设计思路:先向数据库查询发送过来的$username和$email看是否返回空值。然后判断两个
字段的查询值是否==""。这就完成了基本的查询功能了。

以下是query();的完整代码:

function query($username,$email)
{
$sl_q = new userDB;
$sl_q->query("SELECT username,email FROM user WHERE username='$username' or em
ail='$email'");
$sl_q->next_record(); $tusername = $sl_q->Record["username"];
$temail = $sl_q->Record["email"];
if ($username==$tusername && $tusername!="") error_msg("user_exist");
elseif ($email==$temail && $temail!="") error_msg("mail_exist");
elseif ($tusername=="" && $tmail=="" && $username!="" && $email!="")
confirm_reg($username,$email);
else error_msg("unknown");
}

b.如何编写make_passwd()呢?

此函数负责生成随机的8位密码。

设计思路:可以利用unix系统的random守护进程产生的随机因子,也可以利用php的随机函
数rand同时为了获得指定的8为密码必须采用一个能够从字符串中切取到给定长度字符串的
函数。这里我们采用substr。

以下是make_passwd();基本代码

function make_passwd()
{
$ran = rand();
$passwd = substr($ran,0,8);
return $passwd;
}

c.如何编写confim_reg()?

要达到能够提示你确认这个功能并不容易。因为必须两次调用dsp_query()而两次dsp_que
ry()却需要完成不同的功能。因此必须让confim_reg()传送若干参数给dsp_query()让它知
道应该如何操作。

设计思路:让confim_reg()传一个$msg给dsp_query(),让它知道这是确认的信息以转换功
能。

以下是confim_reg()完整代码:

function confirm_reg($un,$em)
{$time = current_time();
$msg ="<center>恭喜你!在<font color=red>$time</font>这一刻你的用户名和邮箱还没
有给注册!<br>
如果你确实想成为本站会员,请按<font color=red><b>注册</b></font>按钮。
<p></center>";
dsp_query($un,$em,"我要注册","$msg");
}

d.如何编写dsp_query()呢?

该函数功能稍微要复杂点,就是需要根据$msg来决定它自己要实现什么任务。

设计思路:由于查询和确认注册两者是不同的,因此查询按钮应该自动换成注册按钮。这
个利用参数$botton实现。判断到底是处于查询还是确认,可以利用$msg是否空来判断(因
为确认函数会发一个$msg过来)。另外要区分两者的话,必须在发标单的时候自动选择$o
p=?因此也可以通过$msg是否空来给$op赋值。查询是:check,确认是insert。

以下是dsp_query()的基本代码:

function dsp_query($un,$em,$botton,$msg)
{
$head = "<tr>";
if ($botton == "" ) $botton="查询";
if ($msg !="") $action="insert";//如果有确认信息就insert
else $action="check";//否则就只是一般查询
$cation = "欢迎到本站注册。一旦帐号生效你就可以享受到本站提供给会员第一流的服务
";

$post ="<td align=left width=40%><form method=\"POST\" action=\"$PHP_SELF\">
<input type=\"hidden\" name=op value=$action>
<p>用户名:<input type=text name=\"un\" size=20 value=$un></p>
<p>信箱名:<p><input type=text name=\"em\" size=20 value=$em></p>
<p> <input type=submit value=\"$botton\" name=submit>
<input type=reset value=\"复原\"></p>
</form></td>";

$foot = "</tr>";
if ($msg =="") fancybox("100%","查询",$head.$post."
<td width=60%>". $cation ."</td>".$foot,"r");
else {
fancybox("100%","确认",$head.$post."<td width=60%>".$msg."</td>".$foot,"r");
}
}

e.最后的判断语句:

判断程序的操作流程和函数调用。这里仅仅给出代码(非常简单的代码):

switch ($op) {
case "check":
query($un,$em);
break;
case "insert":
reg($un,$em);
case "null":
break;
default:
dsp_query();
}
努力为phpres做贡献
时刻准备着,当机会来临时你就成功了
打好基础,增加社会经验
资深技术工程师是我的梦想
承接各种团体网站外包服务和各种it技术培训
准备申请AJAX版大,希望大家支持~~

TOP

 411 12
发新话题