新手学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字符,比如 ’<’ 将被转义成 ’<’。不过htmlspecialchars不会转义换行符 号,也就是说如果你插入的数据中包含了换行,当你进行转义显示时,该函数不会显示换行。所以在显示数据时需要用到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