以留言板为例。

数据表设计

  分析数据表结构:有哪些信息需要存储:留言信息:ID,留言标题,留言内容,留言时间,留言人

CREATE TABLE message(
id INT UNSIGNED NOT NULL AUTO_INCREMENT PRIMARY KEY,
title VARCHAR(120) NOT NULL DEFAULT '',
content VARCHAR(255) NOT NULL DEFAULT '',
created_at INT UNSIGNED NOT NULL DEFAULT '',
user_name VARCHAR(32) NOT NULL DEFAULT '',
KEY message_user_name(user_name)
)ENGINE=InnoDB DEFAULT CHARSET=utf8;

选择PHP连接数据库的方式

  PDO:可扩展性更好,支持预处理,面向对象

  MySQLi:只支持MySQL操作,支持预处理,面向对象和过程,效率较高

  mysql:只支持MySQL数据库,没有预处理的支持,面向过程

  PDO的基本操作:

<?php
try{
操作数据库代码
}catch(PDOException $e){
echo $e->getMessage();
}

  操作数据库代码:

$pdo = new PDO($dsn, $username, $password, $attr);
$sql = 'SELECT id, title, content FROM message where user_name=:user_name';
$stmt = $pdo->prepare($sql);
$stmt->execute([ ':user_name' => $user_name]);
$result = $stmt->fetchAll(PDO::FETCH_ASSOC);

  form.html

<!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"><br>
内容:<textarea cols="35" rows="10" name="content"></textarea><br>
留言人:<input type="text" name="user_name"><br>
<input type="submit" value="添加">
</form>
</body>
</html>

  store.php

<?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=blog;host=localhost';
$username = 'root';
$password = 'rootroot';
$attr = [
PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
];
$pdo = new PDO($dsn, $username, $password, $attr); $sql = 'insert into message(title, content, created_at, user_name) values(:title, :content, :created_at, :user_name)';
$stmt = $pdo->prepare($sql);
$data = [
':title' => $title,
':content' => $content,
':created_at' => time(),
':user_name' => $user_name
];
$stmt->execute($data);
$rows = $stmt->rowCount();
if($rows){
exit('添加成功');
}else{
exit('添加失败');
}
}catch (PDOException $e){
echo $e->getMessage();
}

  

  无限分类表:1. id title pid/path  order by排序

PHP程序功能设计的更多相关文章

  1. flask实战-留言板-Web程序开发流程

    Web程序开发流程 在实际的开发中,一个Web程序的开发过程要设计多个角色,比如客户(提出需求).项目经理(决定需求的实现方式).开发者(实现需求)等,在这里我们假设自己是一个人全职开发.一般来说一个 ...

  2. web 安全 初探 (正在更新)

    1.web应用程序所采用的防卫机制的几个核心构成:1.处理用户对应用程序的数据和功能的访问,以防止用户未经授权访问.2.处理用户的输入,以防止恶意的输入导致未预期的行为.3.处理攻击,以确保应用程序在 ...

  3. 【blockly教程】第一章 Google Blockly教学应用手册

    1.1 Google Blockly概述 美国计算科学教育一直认为计算机作为当今各个领域的基础技术工具,有必要让学生尽早的了解和学习计算机工作原理,理解基础的编程思维.在2006年周以真教授提出计算思 ...

  4. WDA演练一:用户登陆界面设计(一)

    一,新建用户表: 用户和密码参考标准的.这里给用户分了几个维度,以便后面进行接下来的业务设定. 二,新建ZLY_PORTAL 程序. 除了MAIN视图外,在添加LOGON视图. 1.导入预先做好的主页 ...

  5. 专业程序设计part1

    7 专业程序设计 (有多少人在大学里学到了自己真正喜欢的专业??并在此专业上获得了升华??)i== 软件图标下载网址:easyicon 01thu 4邻域 8邻域 D邻域 是啥 像素间的连通性,是转为 ...

  6. 《Spring 手撸专栏》第 3 章:初显身手,运用设计模式,实现 Bean 的定义、注册、获取

    作者:小傅哥 博客:https://bugstack.cn 沉淀.分享.成长,让自己和他人都能有所收获! 一.前言 你是否能预见复杂内容的设计问题? 讲道理,无论产品功能是否复杂,都有很大一部分程序员 ...

  7. Java生鲜电商平台-优惠券功能设计与开发(小程序/APP)

    Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 说明:Java生鲜电商平台-优惠券功能设计与开发(小程序/APP) 目录 1.项目背景与需求分析 2.需求目的与功能点列表 3.业务逻辑 ...

  8. Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战

    Java生鲜电商平台-小程序或者APP拼团功能设计与架构实战 说明:Java生鲜电商平台拼团是拉新引流的利器,将拼团运用到极致的就是拼多多,前期通过选取性价比高.实用性强的商品进行拼团,在社交圈(主要 ...

  9. [连载]《C#通讯(串口和网络)框架的设计与实现》- 10.宿主程序详细设计

    目       录 第十章           宿主程序详细设计... 2 10.1        配置文件设计... 3 10.2        加载设备驱动... 4 10.3        加载 ...

随机推荐

  1. 在Linux下使用LLVM Clang以及Blocks

    可以从这个链接下载:http://llvm.org/releases/download.html sudo apt-get install llvm sudo apt-get install clan ...

  2. struct2json -- C结构体与 JSON 快速互转库V1.0发布

    版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明.本文链接:https://blog.csdn.net/zhutianlong/article/d ...

  3. SSM基于Token的登录认证

    1.什么是token token的意思是“令牌”,是服务端生成的一串字符串,作为客户端进行请求的一个标识. 当用户第一次登录后,服务器生成一个token并将此token返回给客户端,以后客户端只需带上 ...

  4. Django之中间件、缓存以及信号

    Django之中间件 中间件执行流程 我们从浏览器发出一个请求 Request,得到一个响应后的内容 HttpResponse ,这个请求传递到 Django的过程如下: 也就是说,每一个请求都是先通 ...

  5. java nio Files.newDirectoryStream用法

    try(DirectoryStream<Path> dirStream = Files.newDirectoryStream(Paths.get(directory,"*.ts& ...

  6. Linux配置代理IP

    Linux配置代理IP: vim /etc/profile http_proxy=http://username:password@ip:port/ https_proxy=http://userna ...

  7. EOS 资源汇总

    EOS 资源汇总     A curated list of EOS Ecosystem by [SuperONE](https://superone.io/) EOS 主网 超级节点 https:/ ...

  8. 基于 Spring + Atomikos + Mybatis的多数据源配置(含有BaseDao,BaseService)

    1.spring配置文件 <?xml version="1.0" encoding="UTF-8"?> <beans xmlns=" ...

  9. GNU makefile 学习 - ongoing

    资料: <跟我一起写makefile>---中文,baiduNetdisk http://www.gnu.org/software/make/manual/make.html

  10. 【C++札记】命名空间(namespace)

    介绍 命名空间可以解决程序中的同名冲突,尤其大型项目多人开发中经常用到.比如我们使用C++的标准输出std::cout就使用了std命名空间. 使用作用域符:: #include <iostre ...