站点在进行新用户注冊时,都会将用户的注冊信息存入数据库中,须要的时候再进行提取。今天写了一个简单的实例。
主要完毕下面几点功能:
(1)用户进行注冊,实现password反复确认,验证码校对功能。
(2)注冊成功后,将用户进行插入数据库中进行保存。
(3)将数据库表中数据进行提取,并打印。
在曾经的几篇博客中,分享过注冊及登录表单的代码。这次的代码,大致同样,仅仅是略有变化。仅作为实例探讨
表单页面实在没什么可讲的,除了格式对齐上加几个 (空格)。
<html> <head> <title>注冊页面</title> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> </head> <body> <h1>新用户注冊</h1> <hr> <form method="post" action="regsubmit.php"> <table> <tr> <td>请输入用户名:<input type="text" name="username"></td> </tr> <tr> <td>请输入密码: <input type="password" name="password"></td> </tr> <tr> <td>请确认密码: <input type="password" name="repassword"></td> </tr> <tr> <td>请输入验证码:<input type="text" name="vcode"><img src="regauth.php"></td> </tr> <tr> <td><input type="submit" value="注冊"> <input type="reset" value="重置"></td> </tr> </table> </form> </body> </html>
效果图:
<strong><span style="font-family:KaiTi_GB2312;font-size:18px;"><?php header("content-type:text/html charset=utf-8"); //开启session session_start(); //准备画布 $im=imagecreatetruecolor(50,25); //准备颜料 $black=imagecolorallocate($im,0,0,0); $gray=imagecolorallocate($im,200,200,200); //背景填充 imagefill($im,0,0,$gray); //文字居中 $x=(50-10*4)/2; $y=(25-5)/2+5; //加入�干扰素 for($i=0;$i<50;$i++){ imagesetpixel($im,mt_rand(0,50),mt_rand(0,25),$black); } //准备文字 $arr=array_merge(range(0,9),range('a','z'),range('A','Z')); shuffle($arr); $str=implode(array_slice($arr,0,4)); //把$str放入session中,方便全部页面中调用 $_SESSION['vstr']=$str; $file="../fonts/simsun.ttc"; imagettftext($im,15,0,$x,$y,$black,$file,$str); //输出到浏览器上或保存起来 header("content-type:image/png"); imagepng($im); //关闭画布 imagedestory($im); ?></span></strong>
对于验证码功能,在曾经的一篇博客中,曾进行具体的解说过。这次代码也基本直接拿过来用了,唯一升级了一点就是加入�了干扰素,使得验证码没有干巴巴的四个字符在哪里。用到了imagesetpixel()函数,用于制造一些干扰点。具体用法请查看php手冊。
<?php header("content-type:text/html;charset=utf-8"); //开启session session_start(); //将验证码与输入框中字符串都转为小写 $code=strtolower($_POST['vcode']); $str=strtolower($_SESSION['vstr']); //接收表单传递的username与password $name=$_POST['username']; $pwd=$_POST['password']; $repwd=$_POST['repassword']; //推断密码是否一致 if($pwd!=$repwd){ echo"<script>alert('两次密码输入不一致,请又一次输入');</script>"; echo"<script>location='regform.html'</script>"; }else{ //推断验证码是否正确 if($code!=$str){ echo "<script>alert('验证码输入错误,请又一次输入');</script>"; echo"<script>location='regform.html'</script>"; }else{ //通过php连接到mysql数据库 $conn=mysql_connect("localhost","",""); //选择数据库 mysql_select_db("test"); //设置client和连接字符集 mysql_query("set names utf8"); //通过php进行insert操作 $sqlinsert="insert into t1(username,password) values('{$name}','{$pwd}')"; //通过php进行select操作 $sqlselect="select * from t1 order by id"; //加入�用户信息到数据库 mysql_query($sqlinsert); //返回用户信息字符集 $result=mysql_query($sqlselect); echo "<h1>USER INFORMATION</h1>"; echo "<hr>"; echo "<table width='700px' border='1px'>"; //从结果中拿出一行 echo "<tr>"; echo "<th>ID</th><th>USERNAME</th><th>PASSWORD</th>"; echo "</tr>"; while($row=mysql_fetch_assoc($result)){ echo "<tr>"; //打印出$row这一行 echo "<td>{$row['id']}</td><td>{$row['username']}</td><td>{$row['password']}</td>"; echo "</tr>"; } echo "</table>"; //释放连接资源 mysql_close($conn); } } ?>
<2>数据插入数据库时
$sqlinsert="insert into t1(username,password) values('{$name}','{$pwd}')";values('','')一定要加单引號(外层加了双引號,里面仅仅能用单引號),由于本身数据就是字符串,不能直接写个变量就完事了。假设不加单引號,$name和$pwd变量解析以后变成几个字符,不在引號内,谁认识谁呀。必定会报错。
<3>打印提取数据时,用到了while循环。里面的mysql_fetch_assoc()函数提取后返回的数组,下标就是数据所属字段名。相似功能的函数还有mysql_fetch_array(),mysql_fetch_row(),mysql_fetch_field()。详细使用请看需求,一般来说mysql_fetch_assoc()比較的经常使用。
效果图: