以留言板为例。

数据表设计

  分析数据表结构:有哪些信息需要存储:留言信息: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. 让群辉支持DTS音轨

    让群晖Video Station支持DTS音轨的方法原因:因版权问题,群晖Video Station默认不支持DTS音轨,因此默认不能播放使用DTS音轨的影片. 网上搜到好多解决办法,通常是让添加源h ...

  2. Javescript——变量声明的区别

    原文链接:ES6 Syntax and Feature Overview View on GitHub Keyword Scope Hoisting Can Be Reassigned Can Be ...

  3. 阶段5 3.微服务项目【学成在线】_day18 用户授权_02-方法授权-需求分析

    2 方法授权 2.1需求分析 方法授权要完成的是资源服务根据jwt令牌完成对方法的授权,具体流程如下: 1.生成Jwt令牌时在令牌中写入用户所拥有的权限 我们给每个权限起个名字,例如某个用户拥有如下权 ...

  4. Promise和Generator

    异同: 1.promise解决的是串行的嵌套异步问题. 2.yield把Generator Function切割为有多个出口的Generation. 3.Promise是社区的研发产物,yield是E ...

  5. JS微信网页使用图片预览(放大缩小)

    前言 需求在微信网页中客户点击图片可进行预览放大缩小功能,网上找了各种js方式实现, 唯一的麻烦就是不兼容或者和项目框架不兼容 次函数只只用于部分客户端,否则会出现 WeixinJSBridge is ...

  6. mysql 对应数据库服务器配置 所能承受的tps和qps

    总结: 吞吐量实际涵盖了TPS 和 QPS TPS 是指产生事物的请求,比如对数据库 增.删.改 QTP 是对数据库查询动作,无逻辑非事物,比如 查询 假如脚本里面都是get请求,那么出来的吞吐量就是 ...

  7. java 利用poi 实现excel合并单元格后出现边框有的消失的解决方法

    使用工具类RegionUtil CellRangeAddress cra = new CellRangeAddress(nowRowCount, nowRowCount + followSize-1, ...

  8. spark的task调度器(FAIR公平调度算法)

    FAIR  调度策略的树结构如下图所示: FAIR 调度策略内存结构 FAIR 模式中有一个 rootPool 和多个子 Pool, 各个子 Pool 中存储着所有待分配的 TaskSetMagage ...

  9. Python 爬虫从入门到进阶之路

    https://www.cnblogs.com/weijiutao/p/10735455.html

  10. Jupter Notebook常用快捷键与常用的魔法命令

    jupter notebook快捷键整理 Part1 1.删除Cell——双击D 2.撤销删除——Z 3.新建Cell——A/B (向上/向下) 4.命令窗口——P 5.运行——Ctrl+Enter ...