IT俱乐部 PHP SQL+HTML+PHP 一个简单论坛网站的综合开发案例(注册、登录、注销、修改信息、留言等)

SQL+HTML+PHP 一个简单论坛网站的综合开发案例(注册、登录、注销、修改信息、留言等)

1 实验环境

(1)服务端:本实验基于虚拟机win2008系统的WAMP环境进行,该环境相关配置过程参考文章《【语言环境】WAMP环境部署及优化—以win2008R2SP1为操作系统》。
(2)客户端:使用浏览器访问与控制。
(3)服务端与客户端处于同一个局域网下,开启服务端的phpstudy并确保能从客户端浏览器访问。

2 网站页面功能规划

写一个网站,在首页能看用户的留言,同时能实现包括用户注册、登录、注销、上传头像、修改个性签名等。其中网站的所有代码文件均放在默认站点位置下的文件夹jrltbbs中。

2.1 论坛首页

论坛首页文件为index.php,并具有如下功能

显示论坛标题;根据用户是否登录分支显示:已登录则显示“欢迎来到论坛首页”字样,同时显示个人中心、注销、新增留言等按钮;未登录则显示注册和登录按钮,未登录仅能看留言。网页主体用于显示留言(后续实验完善留言功能) 2.2 个人中心

个人中心相关的代码文件均放入个人中心文件夹为member中 ,个人中心相关的代码文件包含:

(1)个人中心的首页./member/index.php。具有如下功能:

个人中心页面标题显示个人中心;根据用户是否登录分支显示:已登录则显示欢迎“欢迎来到个人中心”字样、显示个人账号、头像及个性签名信息、同时显示信息修改和注销按钮;未登录则显示注册和登录按钮。

(2)注册页面./member/register.php。用于实现注册功能,具体功能如下:

设置表单用于首次收集用户信息(包括输入的账号及两次输入的密码),设置提交按钮用于提交表单数据。后台完成账号密码的验证:①账号或密码为空,则返回注册页面“提示账号密码不能为空,请重新输入”;②若两次密码不一致,则返回注册页面并提示“两次密码输入不一致”;③若账号已在数据库中存在,则返回注册页面并提示“账号已存在,请重新注册”;④账号密码没问题则存入数据库中,并返回COOKIE。

(3)接收来自注册页面的表单数据并完成账号密码验证./member/addUser.php 。具体功能如下:

接收来自注册页面的表单数据完成账号密码的验证,没问题后将表单数据写入数据库
①账号或密码为空,则返回注册页面“提示账号密码不能为空,请重新输入”;
② 若两次密码不一致,则返回注册页面并提示“两次密码输入不一致”;
③若账号已在数据库中存在,则返回注册页面并提示“账号已存在,请重新注册”;
④账号密码没问题则存入数据库中,并返回COOKIE。

(5)登录页面./member/login.php。用于用户登录,具体功能如下:

设置表单用于收集用户输入账号及密码,设置提交按钮用于提交表单数据。后台完成账号密码与数据库数据验证,账号密码正确则返回COOKIE、显示欢迎字样、并提供返回首页与个人中心按钮;账号密码错误则重定向到登录页面重新输入。暂时不考虑设置验证码的功能。

(6)注销页面./member/logout.php。用于用户注销,具体功能如下:

删除COOKIE;并根据是否注销成功分支显示:成功则提示成功并显示返回首页按钮,失败则显示注销失败。

(7)头像上传及更新页面./member/updatePhoto.php。主要用于更新头像。

头像修改页面,显示按钮让用户选择新头像,修改成功后页面显示修改成功,提供返回个人中心和返回首页等按钮。

(8)生成验证码页面./member/vcode.php。用于生成随机字符串的验证码。

2.3 实现留言功能

(1)显示留言内容页面./showmessage.php

读者点击网站首页留言标题时,跳转到此页面,用于展示该留言内容。

(2) 新增留言页面./addMessage.php。用于已登录的用户新增留言。

2.4 数据库及连接数据库

(1)数据库名称为jrlt,数据库中新建两个数据表,分别为:

users表:保存用户注册与修改的数据。该表共有5个字段,分别是id、name、password、photo、money。messages表:保存首页用户留言数据。该表共有4个字段,分别是id、uname、title、content。

(2) 与mysql数据库建立连接./inc/dblink.inc.php。具体功能如下:

用于实现PHP与mysql数据库建立连接,当其他PHP脚本需要与mysql数据库建立连接时,使用include引入。 3 实验阶段一:实现注册、登录、注销和更新头像等功能 3.1 数据库

数据库的创建以及与PHP之间的连接可具体参考《【PHP基础-10】实现PHP与SQL数据库之间的交互》,在本综合案例中,创建数据库及其相应的数据表步骤如下:
(1)先在数据库中创建一个jrlt的数据库。

(2)在该数据库下创建两个表,一个是users,一个是messages,所含字段分别如下:


3.2 论坛首页./index.php

首页位于默认站点位置下的位置为PHPjrltbbsindex.php。

代码如下。


      首页----今日论坛

今日论坛BBS

<?php if(isset($_COOKIE['name'])){ echo "欢迎来到今日论坛BBS,".$_COOKIE['name']."
"; echo "个人中心 "; echo "注销"; }else{ echo " 注册 "; echo "登录 "; } ?>

留言板

3.3 个人中心注册页面./member/register.php

设置表单用于收集用户输入的账号及两次输入的密码,设置提交按钮用于提交表单数据。
代码如下:


      注册----今日论坛

今日论坛BBS

用户名:
密码:
确认密码:


3.4 接收来自注册页面的表单数据./member/addUser.php

接收来自注册页面的表单数据,并完成账号密码的验证:①账号或密码为空,则返回注册页面“提示账号密码不能为空,请重新输入”;②若两次密码不一致,则返回注册页面并提示“两次密码输入不一致”;③若账号已在数据库中存在,则返回注册页面并提示“账号已存在,请重新注册”;④账号密码没问题则存入数据库中,并返回COOKIE。
代码:

<?php //var_dump($_POST);
if(isset($_POST['userSubmit'])){
    $userName=$_POST['userName'];
    $userPass1=$_POST['userPass1'];
    $userPass2=$_POST['userPass2'];
    if((bool)($userName) && (bool)($userPass1) && (bool)($userPass2)){
        // 查询数据库中是否有此用户,若无则新增,若有则要求重新输入
        $sql1="select * from users where name='".$userName."'";
        if(!$results1=mysqli_query($link,$sql1)){
            die("SQL语句有误");
        }else{
            if(!mysqli_num_rows($results1)){//非空往数据库中增加
                if($userPass1===$userPass2){
                    $sql2="insert into users(name, password) values('".$userName."', md5($userPass1))";
                    if(!$results2=mysqli_query($link,$sql2)){
                        die("SQL语句有误");
                    }else{
                        echo "注册成功,请登录";
                    }
                }else{
                    echo "两次密码输入不一致,请重新注册";
                }
            }else{
                echo "用户名已存在,请重新注册";
            }
        }
        $results1=mysqli_query($link,$sql1);
    }else{
        echo "账号或密码不能为空, 请重新注册";
    }
}else{
    header("Location:./register.php");
}
//var_dump((bool)($userName));
//var_dump((bool)($userPass1));
//var_dump((bool)($userPass2));
?>

tips:
注意:isset() 函数用于检测变量是否已设置并且非 NULL,如果已经使用 unset() 释放了一个变量之后,再通过 isset() 判断将返回 FALSE。若使用 isset() 测试一个被设置成 NULL 的变量,将返回 FALSE。同时要注意的是 null 字符(“”)并不等同于 PHP 的 NULL 常量。

3.5 与mysql数据库建立连接./inc/dblink.inc.php

为其他需要连接数据库的网页提供连接,避免重复定义。


3.6 个人中心的首页./member/index.php

利用COOKIE信息中的name值是否存在来判断是否已登录,如果未登录,则需要先登录;如果已经登录,可以利用COOKIE信息中的name字段,将用户输入的信息与数据库中的信息进行对比,只有数据库中已有的用户才能登录。
代码如下

今日论坛--个人中心

今日论坛--个人中心

0){ $result=mysqli_fetch_assoc($results); echo "
"; echo "欢迎来到您的个人中心,".$_COOKIE['name'] ."! 返回首页 "; echo "注销
"; echo "
"; echo "

个人信息

"; echo "帐号名:".$_COOKIE['name'] ."
"; echo "您的头像是 "; echo "修改头像
"; echo "帐户余额:".$result['money']." 请联系管理员"; }else{ die("该用户不存在"); } }else{ die("sql语句有误"); } }else{ echo "请登录"; } ?>

3.7 登录页面 ./member/login.php

$_POST['userSubmit']具有数据时,则判断将用户输入的信息与数据库信息进行对比,正确则可以成功登录;若$_POST['userSubmit']无数据时,则设置表单用于收集用户输入账号及密码,设置登录按钮用于提交表单数据(表单数据提交到当前页面)。
setcookie设置路径:设置成 ‘/’ 时,为网站默认路径,Cookie 对整个域名 domain 有效。 如果设置成 ‘/PHP/’, Cookie 仅仅对 domain 中 /PHP/ 目录及其子目录有效。 设置 Cookie 时的默认值为代码文件所在的当前目录。因此,为了让网站首页也能获取到cookie,需要设置路径为/PHP/jrltbbs
代码:

  登录----今日论坛

今日论坛BBS

0){ setcookie('name',$userName,time()+3600*24, "/PHP/jrltbbs"); //注意cookie的路径,不同路径的cookie认为是两条cookie echo "登录成功,返回首页个人中心"; }else{ echo "用户名或密码错误,请重新登录"; } }else{ die("sql语句有误"); } }else{ echo "验证码错误,请重新登录"; } }else{ $html= 用户名:
密码:
验证码:
HTML; echo $html; } ?>

3.8 注销页面./member/logout.php

使COOKIE过期;
代码:

<?php if(setcookie('name',$_COOKIE['name'],time()-3600,"/PHP/jrltbbs")){
    //注意cookie的路径,不同路径的cookie认为是两条cookie
    echo "注销成功,返回首页";
}else{
    die("error");
}
?>

3.9 更新头像./member/updatePhoto.php

用于上传或更新头像。
代码:

3.10 生成验证码./member/vcode.php

用于简单生成随机的字符串验证码。

<?php $str="";
for($i=0;$i<5;$i++){
    $str.=chr(rand(97,122));
    setcookie("vcode",$str);
}
    echo "
$str

“;
?>

上一篇
下一篇
联系我们

联系我们

在线咨询: QQ交谈

邮箱: 1120393934@qq.com

工作时间:周一至周五,9:00-17:30,节假日休息

关注微信
微信扫一扫关注我们

微信扫一扫关注我们

返回顶部