PHP-常见功能设计
编写一个在线留言本,实现用户的在线留言功能,留言信息存储到数据库,要求数据表内容以及使用PHP编码完成
数据表设计
- 分析数据表结构
留言信息:id,标题,内容,时间,留言人 数据表的创建:留言本表:message
creat table message( 'id' int unsigned not null auto_increment primary key, 'title' varchar(200) not null default '', 'content' varchart(300) not null default '', 'creat_time' int not null default '0', 'user_name' varchar(30) unsigned not null default '', key message_user_name(user_name) )engine=InnoDb default charset=utf8;
选择连接数据库的方式
- PDO:可扩展性更好,支持 预处理,面向对象
- mysqli:支持支MySQL操作,支持预处理,效率比PDO高
PDO基本操作
$pdo = new PDO($dsn,$username,$password,$attr); $sql = 'select id,title,content from message where user_name = :user_name'; $ject = $pdo -> prepare($sql); $ject -> execut([':user_name' => $user_name]); $result = $ject -> fetchALL(PDO::FETCH_ASSOC);
创建form表单
<!doctype html> <html lang="en"> <head> <meta charset="UTF-8"> <title>留言本</title> </head> <body> <form action="store.php" method="post"> 标题: <input type="text" name="title"> 内容: <input type="text" name="content"> 留言人: <input type="text" name="user_name"> <input type="submit" vakue="添加"> </form> </body> </html>
store.php
// 标题 $title = $_POST['title']; // 内容 $content = $_POST['content']; // 留言人 $user_name = $_POST['user_name']; if (empty($title) || empty($content) || empty($user_name)) { exit('数据不能为空'); } try { // 配置 $dsn = 'mysql:dbname=test;host=localhost'; // 用户名 $username = 'test'; // 密码 $password = 'test'; //竖向 $attr = [ PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION ]; // 链接PDO $pdo = new PDO($dsn, $username, $password, $attr); // 编写sql语句 $sql = 'insert into message (title, content, user_name, creat_time) values (:title, :content, :user_name, :creat_time)'; // 预处理 $stmt = $pdo->prepare($sql); $data = [ ':$title' => $title, ':content' => $content, ':user_name' => $user_name, ':creat_time' => time(), ]; $stmt->execute($data); $row = $stmt->rowCount(); if ($row) { echo '添加成功'; } else { echo '添加失败'; } } catch (PDOException $exception) { // 异常 echo $exception->getMessage(); }
例:设计一个无线分类表
id title pid
1 服装 0
2 上衣 1
3 长袖 2
id title pid path
1 服装 0 0-1
2 上衣 1 0-1-2
3 长袖 2 0-1-2-3