PHP初级练习实战之留言板

PHP初级练习实战之留言板
初学者做的东西,有的地方写的不好,哈哈哈!
一.知识重点
1.三目运算 $page= empty($_GET[‘p‘]) ? 1: $_GET[‘p‘];
2.数据库的操作mysqli的方法
3.html css js
4.字符串的拼接
5.制作分页页码
6.完整验证码的制作
7.类的运用
8.session传递验证码的方法

二 .代码
代码分为6个文件,liuyanbook.php为主页

1.liuyanbook.php主界面

<?php
//日期
$weekday = ["日","一","二","三","四","五","六"];
date_default_timezone_set(‘Asia/Shanghai‘);
$now = getdate(time());
$week=$now[‘wday‘];
$date = date("Y年m月d日  星期$weekday[$week]");
//echo $date;

//设置页码变量
//默认首页p=1
$page= empty($_GET[‘p‘]) ? 1: $_GET[‘p‘];
//页码
$showPage = 3;
//计算偏移量
$pageoffset = ($showPage-1)/2;

//连接数据库,取数据
$host = "127.0.0.1";
$dbuser = "root";
$password = "";
$dbname = "php10";
$db = new mysqli($host, $dbuser, $password, $dbname);

if ($db->connect_errno != 0) {
    echo "连接失败:";
    echo $db->connect_error;
    exit;
}

//分页
$db->query("set names utf8");
$limit =  ($page-1) * 5;
$sql = "select * from msg order by id desc limit {$limit},5";

$mysqli_result = $db->query($sql);
if ($mysqli_result == false) {
    echo "SQL错误!";
    exit;
}
//var_dump($mysqli_result);

//总页数
$total_sql = "select count(*) from msg";
$total_result = $db->query($total_sql);
$total_array = mysqli_fetch_array($total_result,MYSQLI_ASSOC);
$total = $total_array["count(*)"];
//echo $total;

//计算页数
$total_pages = ceil($total/5);
//echo $total_pages;
?>

<!DOCTYPE html>
<html>
<head>
    <meta charset="UTF-8"/>
    <title>三态电子商务有限公司</title>
    <link rel="stylesheet" type="text/css" href="style.css"/>
    <script type="text/javascript"></script>
</head>
<body>
<div class="contentout">
    <div class="date"><?php echo $date;?></div>

    <div class="h">
        <h1>三态电子商务有限公司</h1>
        <h2>留言板</h2>
    </div>
    <div class="all">
        <div class="add">
        <form action="liuyan.php" method="post">
            <textarea name="content" class="content" cols="60" rows="8"></textarea><br>
            留言人:<input style="padding:6px 8px"; name="user" class="user" type="text"/>
            <p>验证码图片:<img id="captcha_img" border="1" src="str.php?r=<?php echo rand();?>" width="100px" height="30"</p>
            <a href="javascript:void(0)" onclick="document.getElementById(‘captcha_img‘).src=‘str.php?r=‘+Math.random()">换一个?</a>
             请输入图片中的内容:<input style="padding:6px 8px"; type="text" name="authcode" value="" />
            <input class="btn" type="submit" value="提交留言"/>
        </div>
        </form>

        <!--留言内容-->
        <?php
        while($row = mysqli_fetch_array($mysqli_result,MYSQLI_ASSOC)) {
        ?>

            <div class="msg">
                <div class="info">
                    <span class="user"><?php echo $row["user"];?></span>
                    <span class="num"><?php echo "&nbsp;&nbsp;".$row["id"]."楼";?></span>
                    <span class="time"><?php echo date("Y-m-d H:i:s",$row["intime"]);?></span>
                </div>
                <div class="content">
                    <?php echo $row["content"];?>
                </div>
            </div>
        <?php
        }
        ?>

    </div>

    //页码部分
    <div class="page">
    <?php
        $page_banner = "";
        if ($page > 1) {
            $page_banner = "<a href=‘liuyanbook.php?p=1‘>首页</a>";
            $page_banner.= "&nbsp;&nbsp;"."<a href=‘liuyanbook.php?p=".($page-1)."‘>上一页</a>";
        }

        //初始化前面页码数据
        $start = 1;
        $end = $total_pages;
        if ($total_pages > $showPage) {
            if($page > $pageoffset + 1) {
                $page_banner.="...";
            }
            if ($page > $pageoffset) {
                $start = $page - $pageoffset;
                $end = $total_pages > $page + $pageoffset ? $page + $pageoffset : $total_pages;
            } else {
                $start = 1;
                $end = $total_pages > $showPage ? $showPage : $total_pages;
            }
            if ($page + $pageoffset > $total_pages) {
                $start = $start - ($page + $pageoffset - $total_pages);
            }
        }

        //显示前面的页码
        for($i=$start;$i<$end;$i++) {
            $page_banner.= "&nbsp;&nbsp;"."<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".$i."‘>{$i}</a>";
        }

        //显示尾部省略
        if ($total_pages > $showPage && $total_pages > $page + $pageoffset) {
            $page_banner.="...";
        }

        if ($page < $total_pages) {
            $page_banner.= "&nbsp;&nbsp;"."<a href=‘".$_SERVER[‘PHP_SELF‘]."?p=".($page+1)."‘>下一页</a>";
            $page_banner.= "&nbsp;&nbsp;"."<a href=‘liuyanbook.php?p=".$total_pages."‘>尾页</a>";
        }

        //页码部分字符拼接
        $page_banner.= "&nbsp;&nbsp;"."共".$total_pages."页";
        $page_banner.= "&nbsp;&nbsp;"."共".$total."条留言";
        $page_banner.= "<form action=‘liuyanbook.php‘ method=‘get‘ style= display:inline>";
        $page_banner.= "&nbsp;&nbsp;"."跳转到第<input type=‘text‘ size=‘1‘ name=‘p‘>页";
        $page_banner.= "<input type=‘submit‘ value=‘确定‘>";
        $page_banner.= "</form>";
        echo  $page_banner;
    ?>
    </div>
</div>
</body>
</html>

2.liuyan.php后端验证,插入数据

<?php
include(‘class_input.php‘);
include(‘dbcontent.php‘);
//include(‘str.php‘);

$content = $_POST["content"];
$user = $_POST["user"];
$authcode = $_POST["authcode"];

//不能为空
/*if ($content == "") {
    die("留言内容不能为空!");
}
if ($user == "") {
    die("请输入留言人的姓名!");

}*/

//对输入的内容和留言人进行检测,不能含有李星和王瑶两个名字
$input = new input();

//检测显示的结果

$is = $input->post($content);
if ($is == false) {
    die("留言内容不能为空或者存在禁止关键字!");
}

$is = $input->post($user);
if ($is == false) {
    die("留言人不能为空或者存在禁止关键字!");
}

//检测验证码
$codeinput = new codeinput();

$iscode = $codeinput->check($authcode);
if ($iscode == false) {
    die("请输入正确的验证码!");
}

//var_dump($content,$user);

//将留言内容写入数据库
$time = time();
$sql = "insert into msg (content, user, intime) values (‘{$content}‘,‘{$user}‘,‘{$time}‘)";
//echo $sql;

$is = $db->query($sql);
//var_dump($is);
header("location:liuyanbook.php");//跳回主页
?>

3.class_input.php两个类,验证关键字和验证码的类

<?php
class input {
    function post($word) {
        if ($word == "") {
            return false;
        }
    //定义禁止使用的用户
    $name = ["李星","王瑶"];
    //循环禁止使用的关键字,user一一与它对比
    foreach ($name as $key => $value) {
        if ($word == $value) {
            return false;
        }
    }
            return true;
    }
}

class codeinput {
    function check($code) {
        if ($code == "") {
            return false;
        }

    //判断输入验证码是否正确

    if (isset($code)) {
    session_start();

    if (strtolower($code) == $_SESSION["authcode"]) {
        return true;
    } else {
        return false;
    }
    exit();
}
    }
}

?>

4.dbcontent.php数据库连接

<?php
$host = "127.0.0.1";
$dbuser = "root";
$password = "";
$dbname = "php10";

$db = new mysqli($host, $dbuser, $password, $dbname);
if ($db->connect_errno != 0) {
    die("连接数据库失败!");
}
$db->query("set names UTF8");
?>

5.str.php生成验证码

<?php

session_start();

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

    //生成白色底图
    $image = imagecreatetruecolor(100, 30);
    $bgcolor = imagecolorallocate($image, 255, 255, 255);
    imagefill($image, 0, 0, $bgcolor);

    //在白色底图上生成4个彩色随机字符
    /*1.生成4个数字
    for($i=0;$i<4;$i++) {
        $fontsize = 6;
        $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));
        $fontcontent = rand(0, 9);

        $x = ($i*100/4) + rand(5, 10);
        $y = rand(5, 10);

        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
    }*/

    //2.生成随机字母数字
    $captch_code = "";//将生成的验证码存入该变量中

    for($i=0;$i<4;$i++) {
        $fontsize = 6;
        $fontcolor = imagecolorallocate($image, rand(0, 120), rand(0, 120), rand(0, 120));

        //随机截取字母数字
        $data = "abcdefghijkmnopqrstuvwxyz23456789";
        $fontcontent = substr($data,rand(0,strlen($data)),1);
        $captch_code.= $fontcontent;//追加到验证码存放

        $x = ($i*100/4) + rand(5, 10);
        $y = rand(5, 10);

        imagestring($image, $fontsize, $x, $y, $fontcontent, $fontcolor);
    }

    $_SESSION["authcode"] = $captch_code;//保存到session中

    //在白色底图上生成随机点(干扰元素)
    for($i=0;$i<200;$i++) {
        $pointcolor = imagecolorallocate($image, rand(50, 200), rand(50, 200), rand(50, 200));
        imagesetpixel($image, rand(1, 29), rand(1, 29), $pointcolor);
    }
    //在白色底图上生成随机线(干扰元素)
    for($i=0;$i<3;$i++) {
        $linecolor = imagecolorallocate($image, rand(80, 220), rand(80, 220), rand(80, 220));
        imageline($image, rand(1, 99), rand(1, 29), rand(1, 99), rand(1, 29), $linecolor);
    }

    imagepng($image);

    imagedestroy($image);

?>

6.style.css界面样式

.all {
    width: 800px;
    margin: 0px auto;
}

.contentout {
    width: 1000px;
    margin: 0 auto;

}

.date {
    text-align:right;
}
.h {
    text-align:center;
}
.add {overflow: hidden;}
.add .content {
    width: 98%;
    padding: 6px;
    margin: 0px;
    font-size:20px;
    }

.add .btn {
    float: right;
    width: 100px;
    height: 40px;
    font-size: 20px;
}

.msg {
    margin: 10px 0px;
    background: #ccc;
    padding: 10px;
    font-size: 18px;
}
.msg .info{overflow: hidden;}
.msg .user {
    float: left;
    color: blue;
}

.msg .num {
    font-style: italic;
    font-size: 16px;
    color: red;
}
.msg .time {
    float: right;
    color: #999;
}
.msg .content {
    width: 100%;
}
.page {
    text-align:center;
    font-size: 18px;
}`
`.all {
    width: 800px;
    margin: 0px auto;
}

.contentout {
    width: 1000px;
    margin: 0 auto;

}

.date {
    text-align:right;
}
.h {
    text-align:center;
}
.add {overflow: hidden;}
.add .content {
    width: 98%;
    padding: 6px;
    margin: 0px;
    font-size:20px;
    }

.add .btn {
    float: right;
    width: 100px;
    height: 40px;
    font-size: 20px;
}

.msg {
    margin: 10px 0px;
    background: #ccc;
    padding: 10px;
    font-size: 18px;
}
.msg .info{overflow: hidden;}
.msg .user {
    float: left;
    color: blue;
}

.msg .num {
    font-style: italic;
    font-size: 16px;
    color: red;
}
.msg .time {
    float: right;
    color: #999;
}
.msg .content {
    width: 100%;
}
.page {
    text-align:center;
    font-size: 18px;
}

三.数据库
表格式

四.截图界面

原文地址:http://blog.51cto.com/anfishr/2140653

时间: 2024-10-01 19:05:48

PHP初级练习实战之留言板的相关文章

会话控制之留言板

//要用session做一个留言板 //首先先做一个loginn.php文件  做出个用户可以输入的表单 //将这个表单提交给另一个页面dlchuli.php对用户输入的用户名和密码进行处理 //在这个dlchuli.php页面中先开启session //运用post方法来获取到用户输入的用户名和密码 //再通过用户输入的用户名和密码从数据库里找需要匹配的数据信息 //这个页面就是来确认下用户输入的信息是否正确,若正确就跳转到主页面.mainn.php //在建一个主页面来显示留言和发布留言消息

JS实现简单留言板

通过js的HTML DOM来实现对html文档的操作. 使用方法:Node.appendChild(); Node.insertBefore(); Node.removeChild(); <script type="text/javascript"> var count=0; window.onload = function(){ var Msg = document.getElementById("msg"); var Btn = document.g

怎样在留言板中实现动画效果

p.p1 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco; color: #2b7ec3 } p.p2 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco; min-height: 25.0px } p.p3 { margin: 0.0px 0.0px 0.0px 0.0px; font: 18.0px Monaco; color: #d74200 } p.p4 { margi

php留言板

部门内部留言板 一.语言和环境 实现语言 PHP 二.要求: 本软件是作为部门内员工之间留言及发送消息使用. 系统必须通过口令验证,登录进入.方法是从数据库内取出用户姓名和口令的数据进行校验. 用户管理的工作(比如增加,删除,修改用户)通过直接对数据库操作实现,不在本系统中实现,可以自行在数据库用户表中增加测试数据. 系统包含四部分功能 1 登录:验证用户名与口令,保存会话信息,进入主界面. 2 退出:退出使用状态,清空会话信息,返回登录界面. 3 信息查询:显示给当前登录人留的信息以及公共信息

0526留言板练习

登录页面 <!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="Con

5月26 留言板练习题

---恢复内容开始--- 题目:部门内部留言板 一.要求: 本软件是作为部门内员工之间留言及发送消息使用. 系统必须通过口令验证,登录进入.方法是从数据库内取出用户姓名和口令的数据进行校验. 用户管理的工作(比如增加,删除,修改用户)通过直接对数据库操作实现,不在本系统中实现,可以自行在数据库用户表中增加测试数据. 系统包含四部分功能 1 登录:验证用户名与口令,保存会话信息,进入主界面. 2 退出:退出使用状态,清空会话信息,返回登录界面. 3 信息查询:显示给当前登录人留的信息以及公共信息(

NVelocity 实现简单的留言板

留言版简单实现 ----------------------------------------------------------------------------------------------------------------------------------- 项目截图: 1,新建留言板数据库:LiuYanbanDB USE [LiuYanbanDB] GO /****** Object: Table [dbo].[LiuYan] Script Date: 2015/5/15

模拟留言板

<!-- 智能社© - http://www.zhinengshe.com/ 微博:@北京智能社 微信:zhi_neng_she 最具深度的前端开发培训机构 HTML+CSS/JS/HTML5 --> <!doctype html> <html> <head> <meta charset="utf-8"> <title>模拟留言板 - 智能社 - www.zhinengshe.com</title> &

H5 基于Web Storage 的客户端留言板

<!DOCTYPE html> <html> <head> <meta name="author" content="Yeeku.H.Lee(CrazyIt.org)" /> <meta http-equiv="Content-Type" content="text/html; charset=GBK" /> <title> 客户端留言板 </tit