新手学php,试手案例便是留言板。以前未连接数据库时,我是直接将用户输入的留言写入到一个txt,然后再从txt读取显示(~.~别鄙视)。

最近学习了php访问MySQL数据库的一些知识,重写了一下留言板,功能比较简单,当学习记录。

  1.首先是提交留言的表单guessbook.php,提交至post.php。

<form name="form1" method="post" action="post.php">
<div >
<label for="exampleInputName">用户名</label>
<input type="text" name="name" placeholder="请输入用户名">
</div>
<div>
<label for="exampleInputEmail">邮箱</label>
<input type="email" name="email" placeholder="请输入邮箱">
</div>
<div id="textarea">
<textarea rows="5" name="content" id="content"></textarea>
</div>
<div>
<input type="submit" class="button" value="提交">
<input type="reset" class="button" value="重置">
</div>
</form>

  2.数据库的连接config.php

<?php
$con = mysql_connect("localhost","user","passwd");
if(!$con)
die('Could not connect: ' . mysql_error()); mysql_query("set names utf8"); //以utf8读取数据
mysql_select_db("dbname",$con); //选择数据库
?>

  3.对用户留言进行验证post.php

  在我们把数据插入数据库时,为了让我们输入的数据在显示时仍然保持最初的形式,就必须对数据进行一些处理。比如转义单引号和双引号,以及转义我们输入的html标签:<script></script>,空格,<p>等,如果不转义直接显示,比如js代码,就会直接在你的页面中运行。

这里用到了htmlspecialchars函数,他会将字符串中的html标签转义成对应的html字符,比如 ’<’ 将被转义成 ’&lt;’。不过htmlspecialchars不会转义换行符\r\n号,也就是说如果你插入的数据中包含了换行,当你进行转义显示时,该函数不会显示换行。所以在显示数据时需要用到nl2br函数

<?php
header("content-Type: text/html; charset=utf-8");
include("config.php"); //数据库连接
$name= $_POST['name'];
$email= $_POST['email'];
$patch = $_POST['content']; //获取游客提交信息
if ($name=="" || $email=="") //游客未填写用户名和邮箱处理
{
echo "<script>alert('请检查用户名和邮箱输入!');location.href='./guessbook.php';</script>";
}
else
{
// 对游客留言进行处理
$content = str_replace("","<br />",htmlspecialchars($patch));
//插入数据库语句
$sql = "insert into content (name,email,content,time) values ('$name','$email','$content',now())";
mysql_query($sql);
//插入成功,返回信息
echo "<script>alert('提交成功!返回查看!');location.href='./guessbook.php';</script>";
}
?>

  4.展示用户留言列表,可在guessbook.php留言表单下面展示。

include("config.php");                //连接数据库
$sql="select * from content"; //数据库查询语句,content为该用户留言的表。
$result = mysql_query($sql,$con); <table class="table table-responsive">
<tr>
<th>User</th>
<th>Content</th>
<th>Time</th>
</tr>
<p>
<?php
while ($row=mysql_fetch_array($result)) {
?>
</p>
<tr >
<td><?php echo $row[1] ?></td>
<td><?php echo nl2br($row[3]) ?></td> <!--显示留言内容,使用nl2br函数处理换行-->
<td><?php echo $row[4] ?></td>
</tr>
<?php
}
?>
</table>

  5.基本结果: 经CSS 修饰后的结果如下:

  参考:《浅析php插入、更新数据时对html标签的转化 防注入》http://www.phptogether.com/archives/10907

php防注入留言板(simple)的更多相关文章

  1. asp防注入安全问题

    一.古老的绕验证漏洞虽然古老,依然存在于很多小程序之中,比如一些企业网站的后台,简单谈谈.这个漏洞出现在没有对接受的变量进行过滤,带入数据库判断查询时,造成SQL语句的逻辑问题.例如以下代码存在问题: ...

  2. dede留言板BUG解决

    dede留言板刷新后空白BUG解决 DEDE留言板验证码留空或者不正确返回空白页面的解决方法 解决方法如下进入文件/plus/guestbook.php 找到代码ShowMsg("验证码不正 ...

  3. Flask实战-留言板-安装虚拟环境、使用包组织代码

    Flask实战 留言板 创建项目目录messageboard,从GreyLi的代码中把Pipfile和Pipfile.lock文件拷贝过来,这两个文件中定义了虚拟环境中需要安装的包的信息和位置,进入m ...

  4. PHP SQL防注入

    过年前后在做一个抽奖的东西,需要用户填写中奖信息,为了防止非法用户对数据库进行入侵神马的,于是写下基本的防注入语句,需要用的可以自己封装成一个function. $str = str_replace( ...

  5. XSS留言板实现

    XSS 留言板实现-笔记 预备知识 XSS漏洞 XSS攻击全称跨站脚本攻击,是为不和层叠样式表(Cascading Style Sheets, CSS)的缩写混淆,故将跨站脚本攻击缩写为XSS,XSS ...

  6. 写一个简单的HTML留言板

    最近有点懒,没码什么字,防止遗忘,从头开始码,写一个简单的HTML留言板.包含两个文件,book.html还有style.css,放在同一目录下. book.html 1 <!DOCTYPE h ...

  7. AngularJs学习笔记(制作留言板)

    原文地址:http://www.jmingzi.cn/?post=13 初学Anjularjs两天了,一边学一边写的留言板,只有一级回复嵌套.演示地址 这里总结一下学习的过程和笔记.另外,看看这篇文章 ...

  8. dd——留言板再加验证码功能

    1.找到后台-核心-频道模型-自定义表单 2.然后点击增加新的自定义表单 diyid 这个,不管他,默认就好 自定义表单名称 这个的话,比如你要加个留言板还是投诉建议?写上去呗 数据表  这个不要碰, ...

  9. asp.net留言板项目源代码下载

    HoverTree是一个asp.net开源项目,实现了留言板功能. 前台体验网址:http://hovertree.com/guestbook/ 后台请下载源代码安装. 默认用户名:keleyi 默认 ...

随机推荐

  1. mysql 远程连接速度慢的解决方案

    PHP远程连接MYSQL速度慢,有时远程连接到MYSQL用时4-20秒不等,本地连接MYSQL正常,出现这种问题的主要原因是,默认安装的MYSQL开启了DNS的反向解析,在MY.INI(WINDOWS ...

  2. NSString length的坑。

    说坑,可能过头了,是我理所当然的把OC看作C了, char* cstr = "zh中文12"; NSString* s = [NSString stringWithUTF8Stri ...

  3. C++-Effective C++ Items

    Item2:尽量以const,enum,inline替换#define 原因:1, #define ASPECT_RATIO 1.63 编译错误时产生魔数,应以const double Aspect_ ...

  4. CSU 1160 A(Contest #3)

    Description 把十进制整数转换为十六进制,格式为0x开头,10~15由大写字母A~F表示. Input 每行一个整数x,0<= x <= 2^31. Output 每行输出对应的 ...

  5. hdu 1031 (partial sort problem, nth_element, stable_partition, lambda expression) 分类: hdoj 2015-06-15 17:47 26人阅读 评论(0) 收藏

    partial sort. first use std::nth_element to find pivot, then use std::stable_partition with the pivo ...

  6. linux内核编译

    1,进入内核源码树,如果是第一次编译,建议清理以下内核功能选择文件: make mrproper 2,删除前一次编译的残留文件: make clean 3,配置内核功能 make menuconfig ...

  7. linux的简单网络配置

    1,修改IP edit file: # if rh family system /etc/sysconfig/network-scripts/ifcfg-eth0 (eth0可能会是别的名字) # i ...

  8. git——学习笔记(二)远程仓库

    GIT杀手锏之一——远程仓库 拥有远程仓库的两个办法 1:搭一个Git服务器  2:在GitHub上免费托管的Git仓库 本地仓库   远程仓库 一.在GitHub上免费托管的Git仓库 电脑: 1. ...

  9. sql学习资料

    http://blog.sina.com.cn/s/articlelist_1594135432_9_1.html

  10. C++11的new concepts (move semantic)

    MoveConstructible 和MoveAssignable MoveConstructible Specifies that an instance of the type can be mo ...