又与大家见面了。继续《PHP和MySQL Web开发》的总结。

Chapter8.设计Web数据库

·回去看看数据卡那本书吧,这里就不累赘谈这个东西。

Chapter9.创建Web数据库

·推荐PHP开发者安装phpmyadmin,一个有图形化界面的mysql管理软件。总比在命令行上写报错了不知道什么问题好。

·推一下我写的快图上传网站的web数据库设计吧。

  1. create database discussion;
  2. use discussion;
  3. create table header
  4. (
  5. parent int not null,
  6. poster char(20) not null,
  7. title char(20) not null,
  8. children int default 0 not null,
  9. area int default 1 not null,
  10. posted datetime not null,
  11. postid int unsigned not null auto_increment primary key
  12. );
  13.  
  14. create table body
  15. (
  16. postid int unsigned not null primary key,
  17. message text
  18. );
  19.  
  20. grant select, insert, update, delete
  21. on discussion.*
  22. to discussion@localhost identified by 'password';

Chapter10.使用MySQL数据库

·初次学习时,还不是高玩的话,就学一些基本的sql语句就可以了。最基本的数据库的增删改查操作要掌握

Chapter11.使用PHP从Web访问MySQL数据库

一般来说,客户要访问服务器的web服务器有以下几个过程:

1.建立一个连接

  1. @ $db = new mysqli('localhost','username','password','database'); //面向对象风格的数据库连接
  2.  
  3. if(mysqli_connect_errno()){
  4. exit;
  5. }

2.查询数据库

  1. $query = "select * from database where element = 'XXX'";
  2. //运行查询
  3. $result = $db->query($query);

3.检索查询结果

  1. $num_results = $result->num_rows; //返回查询的行数
  2.  
  3. for($i = 0;$i < $num_results;$i++){
  4. $row = $result->fetch_assoc();
  5. //echo htmlspecialchars(stripslashes($row['title']));
  6. //把一些预定义的字符转换为HTML实体。
  7. }

4.从数据库断开连接

  1. $result->free(); //释放结果集
  2. $db->close(); //关闭数据库

*5.还可以在遍历时使用Prepared语句,这里就不说了。

Chapter19.与文件系统和服务器交互

·文件上传 

创建一个文件上传表单

允许用户从表单上传文件是非常有用的。

请看下面这个供上传文件的 HTML 表单:

  1. <html>
  2. <body>
  3.  
  4. <form action="upload_file.php" method="post" enctype="multipart/form-data">
  5. <label for="file">Filename:</label>
  6. <input type="file" name="file" id="file" />
  7. <br />
  8. <input type="submit" name="submit" value="Submit" />
  9. </form>
  10.  
  11. </body>
  12. </html>

创建上传脚本

通过使用 PHP 的全局数组 $_FILES,你可以从客户计算机向远程服务器上传文件。

第一个参数是表单的 input name,第二个下标可以是 "name", "type", "size", "tmp_name" 或 "error"。就像这样:

  • $_FILES["file"]["name"] - 被上传文件的名称
  • $_FILES["file"]["type"] - 被上传文件的类型
  • $_FILES["file"]["size"] - 被上传文件的大小,以字节计
  • $_FILES["file"]["tmp_name"] - 存储在服务器的文件的临时副本的名称
  • $_FILES["file"]["error"] - 由文件上传导致的错误代码

这是一种非常简单文件上传方式。基于安全方面的考虑,您应当增加有关什么用户有权上传文件的限制。

保存被上传的文件

在服务器的 PHP 临时文件夹创建了一个被上传文件的临时副本。

这个临时的复制文件会在脚本结束时消失。要保存被上传的文件,我们需要把它拷贝到另外的位置:

下面是move_uploaded_file()函数的介绍:

bool move_uploaded_file ( string $filename , string $destination )

本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。

这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。

  1. <?php
  2. $uploads_dir = '/uploads';
  3. foreach ($_FILES["pictures"]["error"] as $key => $error) {
  4. if ($error == UPLOAD_ERR_OK) {
  5. $tmp_name = $_FILES["pictures"]["tmp_name"][$key];
  6. $name = $_FILES["pictures"]["name"][$key];
  7. move_uploaded_file($tmp_name, "$uploads_dir/$name");
  8. }
  9. }
  10. ?>

"upload_file.php" 文件含有供上传文件的代码:

  1. <?php
  2. if ((($_FILES["file"]["type"] == "image/gif")
  3. || ($_FILES["file"]["type"] == "image/jpeg")
  4. || ($_FILES["file"]["type"] == "image/pjpeg"))
  5. && ($_FILES["file"]["size"] < 20000))
  6. {
  7. if ($_FILES["file"]["error"] > 0)
  8. {
  9. echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
  10. }
  11. else
  12. {
  13. echo "Upload: " . $_FILES["file"]["name"] . "<br />";
  14. echo "Type: " . $_FILES["file"]["type"] . "<br />";
  15. echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
  16. echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />";
  17.  
  18. if (file_exists("upload/" . $_FILES["file"]["name"]))
  19. {
  20. echo $_FILES["file"]["name"] . " already exists. ";
  21. }
  22. else
  23. {
  24. move_uploaded_file($_FILES["file"]["tmp_name"],
  25. "upload/" . $_FILES["file"]["name"]);
  26. echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
  27. }
  28. }
  29. }
  30. else
  31. {
  32. echo "Invalid file";
  33. }
  34. ?>

Chapter21.日期和时间的管理

·感觉用了那么久,就用了个data()函数。

string date ( string $format [, int $timestamp ] )

返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()

  1. <?php
  2. // 假定今天是:March 10th, 2001, 5:16:18 pm
  3. $today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
  4. $today = date("m.d.y"); // 03.10.01
  5. $today = date("j, n, Y"); // 10, 3, 2001
  6. $today = date("Ymd"); //
  7. $today = date('h-i-s, j-m-y, it is w Day z '); // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
  8. $today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day.
  9. $today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2001
  10. $today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month
  11. $today = date("H:i:s"); // 17:16:17
  12. ?>

Chapter22.创建图像

在php中,创建一个图像应该完成如下所示的4个基本步骤:

1).创建一个背景图像,以后的操作都基于此背景图像。

  1. $im = imagecreatetruecolor($width,$height); //创建一个新图像
  2. $im2 = imagecreatefrompng('baseimage.png'); //读入已知的图像
  3. //类似的函数还有imagecreatefromjpg(),imagecreatefromgif()函数

2).在背景上绘制图形轮廓或输入文字。

  1. $white = imagecolorallocate($img,255,255,255); //背景白色
  2. $black = imagecolorallocate($img,0,0,0); //字体黑色,白底黑字
  3.  
  4. //绘制干扰斜线
  5. for($i = 0;$i < 3;$i++){
  6. $line = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
  7. imageline($img,rand(0,$width), rand(0,$height), rand(0,$width),rand(0,$height),$line);
  8. }
  9.  
  10. //绘制干扰像素
  11. for($i=0;$i<150;$i++) {
  12. $point = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
  13. imagesetpixel($img, rand()%$width , rand()%$height , $point);
  14. }
  15.  
  16. //填充背景颜色并输出字符串
  17. imagefill($img, 0, 0, $white); //背景颜色
  18. imagestring($img, rand(0,$width/4), rand(0,$height/5), rand(0,5), $code, $black);

3).输出最终图形。

  1. Header('Content-type: image/png');

4).清除所有资源

  1. imagedestroy($im);

Chapter23.在PHP中使用会话控制

·关于cookie功能

还没有研究,所以后续再更新吧。

·关于session,比较用得多是那个登录系统的验证程序:

authmain.php——身份验证应用程序的主体部分

  1. <?php
  2. session_start();
  3.  
  4. if(isset($_POST['userid']) && isset($_POST['password'])){
  5. $userid = $_POST['userid'];
  6. $password = $_POST['password'];
  7.  
  8. $db_conn = new mysqli('localhost','username','password','database');
  9.  
  10. if(mysqli_connect_errno()){
  11. exit();
  12. }
  13.  
  14. $query = "select * from database "."where name = $userid "."and password = sha1($password)";
  15.  
  16. $result = $db_conn->query($query);
  17.  
  18. if($result->num_rows > 0)
  19. {
  20. $_SESSION['valid_user'] = $userid;
  21. }
  22. $db_conn->close();
  23.  
  24. ?>

members_only.php——网站的有效用户检查部分,可以确定是否是有效成员

  1. <?php
  2. session_start();
  3.  
  4. if(isset($_SESSION['valid_user'])){
  5. echo "<p>You are logged in.</p>";
  6. }
  7. else{
  8. echo "<p>You are not logged in.</p>";
  9. }
  10. ?>

logout.php——该脚本注销会话变量并销毁变量

  1. <?php
  2. session_start();
  3.  
  4. $old_user = $_SESSION['valid_user'];
  5. unset($_SESSION['valid_user']); //注销会话变量
  6. session_destroy();
  7. ?>

·对于get方法,一般通过地址栏来传参。

目前就这些,请多多指教!

《PHP和MySQL Web开发》读书笔记(下篇)的更多相关文章

  1. PHP和MySQL Web开发学习笔记介绍

    前言 从2016年2月1日开始,之后的几个月左右的时间里,我会写一个系列的PHP和MySQL Web开发的学习笔记.我之前一直从事Java语言的开发工作,最近这段时间非常想学习一门语言,就选择了PHP ...

  2. Flask Web开发读书笔记

    开篇:目前想自学Flask Web开发--基于Python,找了几本书准备啃啃,同时也会分享读书笔记.希望和大家一起进步. Flask是小型框架,可以算是微框架,但是他的功能还是比较多 Flask有三 ...

  3. 《PHP与MySQL WEB开发》读书笔记

    <PHP与MySQL WEB开发>读书笔记 作者:[美]Luke Welling PHP输出的HereDoc语法: echo <<<theEnd line 1 line ...

  4. 【前端】移动端Web开发学习笔记【2】 & flex布局

    上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...

  5. 【前端】移动端Web开发学习笔记【1】

    下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...

  6. ASP.NET Core Web开发学习笔记-1介绍篇

    ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...

  7. PHP和MySQL Web开发 原书第4版 高清文字版,有目录,附带源码

    PHP和MySQL Web开发  原书第4版:http://yunpan.cn/QCWIS25zmYTAn  提取码 fd9b PHP和MySQL Web开发  原书第4版源码:http://yunp ...

  8. PHP和MySQL Web开发(原书第4版) 高清PDF+源代码

    PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区  作者:Linux [字体:大 中 小]     内容简介 <PHP和My ...

  9. Django Web开发指南笔记

    Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...

随机推荐

  1. Beta阶段敏捷冲刺③

    1.提供当天站立式会议照片一张. 每个人的工作 (有work item 的ID),并将其记录在码云项目管理中: 1.1昨天已完成的工作. 姓名 昨天已完成的工作 徐璐琳 完善设置界面的功能 祁泽文 研 ...

  2. mysql索引建多了有什么坏处

    建立索引常用的规则如下: 1.表的主键.外键必须有索引: 2.数据量超过300的表应该有索引:3.经常与其他表进行连接的表,在连接字段上应该建立索引: 4.经常出现在Where子句中的字段,特别是大表 ...

  3. 图像分割——graph cuts

    Graph cuts是一种基于图论的方法,它是一种能量优化算法,在计算机视觉领域应用于前景背景分割,立体视觉,抠图等. 这类方法首先使用无向图G=<V,E>表示要分割的图像,V和E分别是顶 ...

  4. 对synchronized的一点理解

    一.synchronized的使用(一).synchronized同步方法1. “非线程安全”问题存在于“实例变量”中,如果是方法内部的私有变量,则不存在“非线程安全”问题.2. 如果多个线程共同访问 ...

  5. EF 使用 oracle

    EF 使用 oracle https://www.oracle.com/technetwork/topics/dotnet/downloads/index.html C:\Program Files ...

  6. java的不可变类

    不可变类(immutable class)是指当创建了这个类的实例后,就不允许修改它的值了,也就是说,一个对象一旦被创建出来,在其整个生命周期中,它的成员变量就不能被修改了. Java中所有基本类型的 ...

  7. win10远程连接

    提示凭证不工作问题 https://blog.csdn.net/sinat_25926481/article/details/50775616

  8. 【刷题】BZOJ 1061 [Noi2008]志愿者招募

    Description 申奥成功后,布布经过不懈努力,终于成为奥组委下属公司人力资源部门的主管.布布刚上任就遇到了一个难题:为即将启动的奥运新项目招募一批短期志愿者.经过估算,这个项目需要N 天才能完 ...

  9. Vue设置不同的环境发布程序

    原文地址: http://www.cnblogs.com/JimmyBright/p/7307486.html 通常应用程序上线都会经过开发环境.测试环境.生产环境三个阶段,三个环境通常会对应有三个不 ...

  10. java 面试题 -- 线程 按序 交替

    编写一个程序,开启 3 个线程,这三个线程的 ID 分别为A.B.C,每个线程将自己的 ID 在屏幕上打印 10 遍,要求输出的结果必须按顺序显示.如:ABCABCABC…… 依次递归? packag ...