PHP

【php编程】简易微博的编写

字号+ 作者:xiaoye 来源:转载 2016-12-15 09:46 我要评论( )

1.文章难易度 【★★★】 2.文章知识点: php编程;安全加固; 3.文章作者: xiaoye 4.本文参与i春秋社区原创文章奖励计划,未经许可禁止转载! 前言 最近忙着考试复习......

1.文章难易度 【★★★】
2.文章知识点: php编程;安全加固;
3.文章作者:     xiaoye
4.本文参与i春秋社区原创文章奖励计划,未经许可禁止转载!

前言
最近忙着考试复习,写帖子就慢了些,这次抽了个空写了个简单的php微博系统,之前放出来过,有的小伙伴问咋防止SQLI注入,那这次就全部打散用pdo重写一下,防御sql注入,以及简单过滤xss危险字符
放个图先:
                                                

分块操作
基础的增删查改,以及编辑,支持title和全文字段模糊匹配
,代码放出来,重要思路会介绍:
所需要的表和字段放置在sql文件:
pdo.sql:

[PHP] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
# Host: localhost (Version: 10.1.13-MariaDB)
# Date: 2016-12-11 10:57:00
# Generator: MySQL-Front 5.3 (Build 4.234)
/*!40101 SET NAMES utf8 */;
#
# Structure for table "weibo"
#
DROP TABLE IF EXISTS `weibo`;
CREATE TABLE `weibo` (
`Id` int(11) NOT NULL AUTO_INCREMENT,
`title` varchar(255) DEFAULT NULL,
`content` varchar(255) DEFAULT NULL,
`mydate` date,
`views` int(20),
PRIMARY KEY (`Id`)
) ENGINE=MyISAM DEFAULT CHARSET=utf8;

数据库连接文件,pdo操作:
conpdo.php:

[PHP] 纯文本查看 复制代码
?
1
2
3
4
5
6
<?php
$pdo = new PDO("mysql:host=localhost;dbname=weibopdo", "root", "root");
$pdo->setAttribute(PDO::ATTR_EMULATE_PREPARES, false);
$pdo->exec("set names 'utf8'");
 
?>

首页文件,需要将数据库中相应的表的数据全部用pdo读取,按照格式显示在页面上:
indexpdo.php

[PHP] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<a href='/weibopdo/addpdo.php'>添加留言</a>
<form method='POST' action='/weibopdo/search.php'>
<input type='text' name='keyword' />
<input type='submit' name='submit1' value='匹配title'>
<input type='submit' name='submit2' value='匹配全文'>
</form>
<?php
include("conpdo.php");
$smt = $pdo->prepare("select * from `weibo` order by id desc limit 9");
$smt->execute(array());
$data = $smt->fetchAll();
//print_r($data);
for($i=0;$i<count($data);$i++){
?>
<hr>
<h2>标题:<a href='/weibopdo/view.php?view=<?php echo $data[$i]['Id'];?>'><?php echo $data[$i]['title'];?></a></h2>
<li><?php echo $data[$i]['mydate'];?></li>
<p>内容:<?php echo iconv_substr($data[$i]['content'],0,10,'utf-8').'......';?></p>
<p>|<a href='/weibopdo/del.php?del=<?php echo $data[$i]['Id'];?>'>删除</a>
|<a href='/weibopdo/edit.php?edit=<?php echo $data[$i]['Id'];?>'>编辑</a></p>
<?php       
}
?>

一、增加留言
实现增加留言的功能,pdo操作数据库进行数据插入,htmlspecialchars()函数对xss进行简单过滤:
addpdo.php:

[PHP] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<script>
function check(){
        if(add.title.value == ''){
                alert('title不能为空');
                return false;
        }
        if(add.content.value == ''){
                alert('content不能为空');
                return false;
        }else{
                return true;
        }
}
</script>
<form method='POST' action='' name='add' onsubmit='return check();'>
标题:<input type='text' name='title'><br>
内容:<textarea cols='30' rows='9' name='content'></textarea><br>
<input type='submit' name='submit' value='submit'>
</form>
<?php
include("conpdo.php");
if(isset($_POST['submit'])){
        $title = htmlspecialchars($_POST['title']);
        $content = htmlspecialchars($_POST['content']);
        $smt = $pdo->prepare("insert into weibo(id,title,content,mydate) values(null,?,?,now())");
        $smt->execute(array($title,$content));
        //$data = $smt->fetchAll();
        header("Location:/weibopdo/indexpdo.php");
}
?>

二、删除留言
删除功能,以id作为只对点击删除超链接的留言进行删除操作的唯一标识:id被设置为主键、自增,以get形式当作参数发送(/weibopdo/view.php?del=<?php echo $data[$i]['Id'];?>),供del删除页面接收id号作为标识,对数据库表中特定列进行删除操作:
del.php:

[PHP] 纯文本查看 复制代码
?
1
2
3
4
5
6
<?php
include("conpdo.php");
$smt = $pdo->prepare("delete from `weibo` where Id=?");
$smt->execute(array($_GET['del']));
header("Location:/weibopdo/indexpdo.php");
?>

三、内容查看
点击题目查看此留言完整内容,并进行访问量的统计,依旧是用id作为点击操作的唯一标识(
/weibopdo/view.php?view=<?php echo $data[$i]['Id'];?>),view页面接收参数,对数据库中特定列进行select和update的操作:
view.php:

[PHP] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
<?php
include("conpdo.php");
$s = $pdo->prepare("update `weibo` set views =views+1 where id=?");
$s->execute(array($_GET['view']));
$smt = $pdo->prepare("select * from `weibo` where id=?");
$smt->execute(array($_GET['view']));
$data = $smt->fetchAll();
 
?>
<h2>标题:<?php echo $data[0]['title'];?></h2>
<li><?php echo $data[0]['mydate'];?></li>
<p>点击量:<?php echo $data[0]['views'];?></p>
<p>内容:<?php echo $data[0]['content'];?></p>
<p>|<a href='/weibopdo/del.php?del=<?php echo $data[$i]['Id'];?>'>删除</a>
|<a href='/weibopdo/edit.php?edit=<?php echo $data[$i]['Id'];?>'>编辑</a></p>

四、编辑,更新
点击编辑超链接,可以对原来的留言进行编辑、更新,id主键做标识:
edit.php:

[AppleScript] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
<?php
include("conpdo.php");
$smt = $pdo->prepare("select * from `weibo` where id=?");
$smt->execute(array($_GET['edit']));
$data = $smt->fetchAll();
if(isset($_POST['update'])){
        $s = $pdo->prepare("update `weibo` set title=?,content=? where id=?");
        $s->execute(array($_POST['title'],$_POST['content'],$_GET['edit']));
        header("Location:/weibopdo/indexpdo.php");
}
?>
<script>
function check(){
        if(edit.title.value == ''){
                alert('title不能为空');
                return false;
        }
        if(edit.content.value == ''){
                alert('content不能为空');
                return false;
        }else{
                return true;
        }
}
</script>
<form method='POST' action='' name='edit' onsubmit='return check();'>
标题:<input type='text' name='title' value='<?php echo $data[0]['title'];?>'><br>
内容:<textarea cols='30' rows='9' name='content'><?php echo $data[0]['content'];?></textarea><br>
<input type='submit' name='update' value='update'>
</form>

点击编辑超链接,如图,会在表单里面展示之前的title和content,可编辑更新
                                               
五、查询匹配
对要查询字段,分为title和全文内容匹配两种方式,不同的查询方式进行不同的数据库模糊查询操作
search.php:

[PHP] 纯文本查看 复制代码
?
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
<?php
include("conpdo.php");
if(isset($_POST['submit1'])){
        $smt = $pdo->prepare("select * from `weibo` where title like :title");
        $smt->bindValue(':title', '%'.$_POST['keyword'].'%',PDO::PARAM_STR);
        $smt->execute();
        $data = $smt->fetchAll();
}
if(isset($_POST['submit2'])){
        $smt = $pdo->prepare("select * from `weibo` where title like :title or content like :content");
        $smt->bindValue(':title', '%'.$_POST['keyword'].'%',PDO::PARAM_STR);
        $smt->bindValue(':content', '%'.$_POST['keyword'].'%',PDO::PARAM_STR);
        $smt->execute();
        $data = $smt->fetchAll();
}
for($i=0;$i<count($data);$i++){
?>
<hr>
<h2>标题:<a href='/weibopdo/view.php?view=<?php echo $data[$i]['Id'];?>'><?php echo $data[$i]['title'];?></a></h2>
<li><?php echo $data[$i]['mydate'];?></li>
<p>内容:<?php echo iconv_substr($data[$i]['content'],0,10,'utf-8').'......';?></p>
<p>|<a href='/weibopdo/del.php?del=<?php echo $data[$i]['Id'];?>'>删除</a>
|<a href='/weibopdo/edit.php?edit=<?php echo $data[$i]['Id'];?>'>编辑</a></p>
<?php
        }
?>

title查询字符i,如图:
                                                                             
全文匹配字符i:
                                                                              

总结

这个微博系统好像在以前的课程中看到过,挺老的了,现在用pdo重写一下,练习了pdo,也复习了下数据库操作的知识,有小伙伴想学php的按思路写一下应该会有帮助(一共8个文件,哈哈,滴点眼药水再看吧。。)。
整体实现不是很难,大家可以动手写写啦。
p.s:
蛋总,我要跑路了,复习考试、拒绝挂科。。。。哈哈
,欠了文章,考完试就还。。
溜。。

本文来自: 蜗蜗侠's Blog-关注网络安全 http://blog.icxun.cn/Php/405.html

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

相关文章
  • php渗透测试技巧-文件操作

    php渗透测试技巧-文件操作

    2017-03-15 09:35

  • php渗透测试技巧-本地文件包含

    php渗透测试技巧-本地文件包含

    2017-03-15 09:35

  • Put漏洞利用工具PHP在线版

    Put漏洞利用工具PHP在线版

    2017-03-15 09:33

  • PHP一句话破解工具-(每秒1000+)

    PHP一句话破解工具-(每秒1000+)

    2017-03-15 09:27

网友点评
暂时未开启评论功能~