首页 > 建站教程 > PHP教程 >  php初学:简单的微型博客系统正文

php初学:简单的微型博客系统

      本文就是一个非常简单的轻微博的一个范例源码,里面有详细注释。
      本轻微博包含添加文章、搜索文章、删除文章、文章列表、文章详细页面、修改文章页面等等功能,非常之简单。没有登陆功能。如果能非常熟练写出这个简单的系统,那么,您的php算是入门了。想成为大神,后面还有很长的路要走......

1、数据库设计(数据库名:test,数据表名:diary):
字段
类型
整理
额外
说明
id
int(11)

AUTO_INCREMENT
ID,整形11字节,自增长
title
varchar(50)
utf8_unicode_ci

标题,varchar类型,长度50,utf8编码
dates
date


日期
contents
text
utf8_unicode_ci

内容,text类型
hits
int(11)


点击次数,整形11字节
      注:数据库可视化编辑工具很多,推荐PHPmyadmin。

2、数据库连接文件conn.php
header("Content-type:text/html;charset=utf-8");
//连接本地数据库
@mysql_connect("localhost:3306","root","root")or die("MySQL连接失败!");
//选择数据库
@mysql_select_db("test")or die("没有找到数据库!");
//设置数据库字符
mysql_query("set names 'utf8'");//或者mysql_set_charset("utf8");
3、添加内容add.php
include("conn.php");
//判断是否点击了提交按钮
if(!empty($_POST['sub'])){
    //echo($_POST['sub']); 输出“发表日志”,string型
    $title = $_POST["title"];
    $contents = $_POST["contents"];
    //判断提交的内容是否为空
    if(empty($title) || empty($contents)){
        echo("<script>alert('标题或者内容为空!')</script>");
    }else{
        $sql="insert into `diary` (`id`,`title`,`dates`,`contents`) values (null,'$title',now(),'$contents')"; //now()为sql自带获取当前时间的函数
        @mysql_query($sql) or die("提交数据库失败!");
        echo("<script>alert('恭喜,成功发表日志!')</script>");
    }
}
?>
<form action="add.php" method="post">
    <label for="title">标题:</label><input name="title" id="title" type="text"><br>
    <label for="contents">内容:</label><textarea name="contents" id="contents" cols="15" rows="2"></textarea><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" name="sub" value="发表日志">
</form>
4、文章列表\首页 index.php
<div class="wraper">
<form action="index.php" method="post">
    <input type="text" name="keys" />
    <input type="submit" name="subs" value="搜索" />
</form>
<?php

include("conn.php");
//搜索
if(!empty($_POST["keys"])){
    $w = "`title` like '%".$_POST["keys"]."%'";
}else{
    $w = 1;
}
//获取数据库内容
$sql = "select * from `diary`";
$query = mysql_query($sql);
//$diaryarr = mysql_fetch_array($query);  //一次mysql_fetch_array只会执行一条数据,要把所有数据都执行,就用循环
while($diaryarr = mysql_fetch_array($query)){  //只要取出的数据没有分组完成,mysql_fetch_array会一直执行,只有所有数据执行完了,mysql_fetch_array就会变成false
?>

    <h2>
    <?php echo $diaryarr["title"] ?>
        <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="edit.php?id=<?php echo $diaryarr['id'] ?>">编辑</a>
            &nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="del.php?id=<?php echo $diaryarr['id'] ?>">删除</a>
            &nbsp;&nbsp;|
        </em>
    </h2>
    <span>发表日期:<?php echo $diaryarr["dates"] ?></span>
    <div class="content">
        <!--截取内容长度-->
        <?php echo iconv_substr($diaryarr["contents"],0,100,"utf-8") ?>......
        <a class="fabu" href="view.php?id=<?php echo $diaryarr['id'] ?>">阅读全文</a>
    </div>
    <hr>
<?php
}  //结束while循环
?>
<a href="add.php">发表新日志</a>
</div>
5、删除页面del.php
include("conn.php");
$id = $_GET["id"]; //a链接传过来的参数
$sql = "delete from `diary` where `id` = $id";
@mysql_query($sql)or die("删除失败!");
echo "删除成功,<a href='javascript:history.go(-1)'>返回上一页</a>";
6、编辑页面edit.php
<?php
    
    include("conn.php");
    if(!empty($_GET["id"])){
        //获取传过来的id
        $id = $_GET["id"];
        //从数据库获取该id对应的内容,并且写入表单中,以便于修改
        $sql = "select * from `diary` where `id` = $id";
        $query = mysql_query($sql);
        $arr = mysql_fetch_array($query);
    }
    
    //将修改后的再提交到数据库
    //判断是否点击了提交按钮
    if(!empty($_POST["sub"])){
        $hid = $_POST["hid"];
        $title = $_POST["title"];
        $contents = $_POST["contents"];
        $sql2 = "update `diary` set `title`='$title', `contents`='$contents' where `id`='$hid'";
        if(mysql_query($sql2)){
            echo "<script>alert('更新成功!'); location.href='index.php'</script>";
        }
    }
    
?>
<form action="edit.php" method="post">
    <!--隐藏的input框,用以获得ID作为判断-->
    <input type="hidden" name="hid" value="<?php echo $arr['id'] ?>">
    <label for="title">标题:</label><input name="title" id="title" type="text" value="<?php echo $arr['title'] ?>"><br>
    <label for="contents">内容:</label><textarea name="contents" id="contents" cols="15" rows="2"><?php echo $arr['contents'] ?></textarea><br>
    &nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;<input type="submit" name="sub" value="更新日志">
    <a href="index.php">返回首页</a>
</form>
7、文章预览页面view.php
<?php
include("conn.php");
if(!empty($_GET["id"])){
    $sql = "select * from `diary` where `id`='".$_GET["id"]."'";
    $query = mysql_query($sql);
    $diaryarr = mysql_fetch_array($query);
    //点击量,每次打开这个页面,都为hits增加1
    $sql2 = "update `diary` set `hits`=`hits`+1 where `id`='".$_GET["id"]."'";
    mysql_query($sql2);
}
?>
<title><?php echo $diaryarr["title"] ?>-轻微博</title>
<div class="wraper">
    <h2>
        <?php echo $diaryarr["title"] ?>
        <em>&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="edit.php?id=<?php echo $diaryarr['id'] ?>">编辑</a>
            &nbsp;&nbsp;|&nbsp;&nbsp;
            <a href="del.php?id=<?php echo $diaryarr['id'] ?>">删除</a>
            &nbsp;&nbsp;|
        </em>
    </h2>
    <span>发表日期:<?php echo $diaryarr["dates"] ?>&nbsp;&nbsp;点击量:<?php echo $diaryarr["hits"] ?></span>
    <hr>
    <div class="content">
    <?php
    echo $diaryarr["contents"];
    /*$contents = htmlspecialchars($diaryarr["contents"]);
        function codetohtml($codes){
            //将php和数据库的内容的\n和空格,分别替换成<br>和nbsp;
            $codes = str_replace("\n","<br>",str_replace(" ","nbsp;",$codes));
            return($codes);
       }
       echo codetohtml($contents);*/
    ?>
    </div>
    <hr>
<a class="fabu" href="index.php">返回首页</a>
</div>
注:1、iconv_substr("字符串",起始位置,结束位置,"字符编码")  截取英文和汉字长度
       substr() 截取英文字符串长度
    2、str_replace替换函数
       str_replace(被替换的值,替换的值,被替换的内容);
       如:function htmtocode($content){
        //将php和数据库的内容的\n和空格,分别替换成<br>和nbsp;
        $content = str_replace("\n","<br>",str_replace(" ","nbsp;",$content));
       }
    3、htmlspecialchars 格式化html 将html格式化,防止输出html时被浏览器执行
       htmlspecialchars(所要格式化对象,定义单双引号,编码)
    4、md5加密函数
       md5(加密对象)
    5、COOKIE 的使用和登陆
       setcookie(cookie名称,cookie值,保存时间,cookie保存路径,起效域名,https发送)
       setcookie("TEST","value",3600,"/dir",".domains.com",true);
       注意:使用PHP cookie当场不能生效,需要刷新一次。