《PHP和MySQL Web开发》读书笔记(下篇)
又与大家见面了。继续《PHP和MySQL Web开发》的总结。
Chapter8.设计Web数据库
·回去看看数据卡那本书吧,这里就不累赘谈这个东西。
Chapter9.创建Web数据库
·推荐PHP开发者安装phpmyadmin,一个有图形化界面的mysql管理软件。总比在命令行上写报错了不知道什么问题好。
·推一下我写的快图上传网站的web数据库设计吧。
create database discussion;
use discussion;
create table header
(
parent int not null,
poster char(20) not null,
title char(20) not null,
children int default 0 not null,
area int default 1 not null,
posted datetime not null,
postid int unsigned not null auto_increment primary key
); create table body
(
postid int unsigned not null primary key,
message text
); grant select, insert, update, delete
on discussion.*
to discussion@localhost identified by 'password';
Chapter10.使用MySQL数据库
·初次学习时,还不是高玩的话,就学一些基本的sql语句就可以了。最基本的数据库的增删改查操作要掌握
Chapter11.使用PHP从Web访问MySQL数据库
一般来说,客户要访问服务器的web服务器有以下几个过程:
1.建立一个连接
@ $db = new mysqli('localhost','username','password','database'); //面向对象风格的数据库连接
if(mysqli_connect_errno()){
exit;
}
2.查询数据库
$query = "select * from database where element = 'XXX'";
//运行查询
$result = $db->query($query);
3.检索查询结果
$num_results = $result->num_rows; //返回查询的行数
for($i = 0;$i < $num_results;$i++){
$row = $result->fetch_assoc();
//echo htmlspecialchars(stripslashes($row['title']));
//把一些预定义的字符转换为HTML实体。
}
4.从数据库断开连接
$result->free(); //释放结果集
$db->close(); //关闭数据库
*5.还可以在遍历时使用Prepared语句,这里就不说了。
Chapter19.与文件系统和服务器交互
·文件上传
创建一个文件上传表单
允许用户从表单上传文件是非常有用的。
请看下面这个供上传文件的 HTML 表单:
<html>
<body> <form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">Filename:</label>
<input type="file" name="file" id="file" />
<br />
<input type="submit" name="submit" value="Submit" />
</form> </body>
</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()函数的介绍:
$filename , string $destination )本函数检查并确保由 filename 指定的文件是合法的上传文件(即通过 PHP 的 HTTP POST 上传机制所上传的)。如果文件合法,则将其移动为由 destination 指定的文件。
这种检查显得格外重要,如果上传的文件有可能会造成对用户或本系统的其他用户显示其内容的话。
<?php
$uploads_dir = '/uploads';
foreach ($_FILES["pictures"]["error"] as $key => $error) {
if ($error == UPLOAD_ERR_OK) {
$tmp_name = $_FILES["pictures"]["tmp_name"][$key];
$name = $_FILES["pictures"]["name"][$key];
move_uploaded_file($tmp_name, "$uploads_dir/$name");
}
}
?>
"upload_file.php" 文件含有供上传文件的代码:
<?php
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/pjpeg"))
&& ($_FILES["file"]["size"] < 20000))
{
if ($_FILES["file"]["error"] > 0)
{
echo "Return Code: " . $_FILES["file"]["error"] . "<br />";
}
else
{
echo "Upload: " . $_FILES["file"]["name"] . "<br />";
echo "Type: " . $_FILES["file"]["type"] . "<br />";
echo "Size: " . ($_FILES["file"]["size"] / 1024) . " Kb<br />";
echo "Temp file: " . $_FILES["file"]["tmp_name"] . "<br />"; if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " already exists. ";
}
else
{
move_uploaded_file($_FILES["file"]["tmp_name"],
"upload/" . $_FILES["file"]["name"]);
echo "Stored in: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "Invalid file";
}
?>
Chapter21.日期和时间的管理
·感觉用了那么久,就用了个data()函数。
string date ( string $format [, int $timestamp ] )
返回将整数 timestamp 按照给定的格式字串而产生的字符串。如果没有给出时间戳则使用本地当前时间。换句话说,timestamp 是可选的,默认值为 time()。
<?php
// 假定今天是:March 10th, 2001, 5:16:18 pm
$today = date("F j, Y, g:i a"); // March 10, 2001, 5:16 pm
$today = date("m.d.y"); // 03.10.01
$today = date("j, n, Y"); // 10, 3, 2001
$today = date("Ymd"); //
$today = date('h-i-s, j-m-y, it is w Day z '); // 05-16-17, 10-03-01, 1631 1618 6 Fripm01
$today = date('\i\t \i\s \t\h\e jS \d\a\y.'); // It is the 10th day.
$today = date("D M j G:i:s T Y"); // Sat Mar 10 15:16:08 MST 2001
$today = date('H:m:s \m \i\s\ \m\o\n\t\h'); // 17:03:17 m is month
$today = date("H:i:s"); // 17:16:17
?>
Chapter22.创建图像
在php中,创建一个图像应该完成如下所示的4个基本步骤:
1).创建一个背景图像,以后的操作都基于此背景图像。
$im = imagecreatetruecolor($width,$height); //创建一个新图像
$im2 = imagecreatefrompng('baseimage.png'); //读入已知的图像
//类似的函数还有imagecreatefromjpg(),imagecreatefromgif()函数
2).在背景上绘制图形轮廓或输入文字。
$white = imagecolorallocate($img,255,255,255); //背景白色
$black = imagecolorallocate($img,0,0,0); //字体黑色,白底黑字 //绘制干扰斜线
for($i = 0;$i < 3;$i++){
$line = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
imageline($img,rand(0,$width), rand(0,$height), rand(0,$width),rand(0,$height),$line);
} //绘制干扰像素
for($i=0;$i<150;$i++) {
$point = imagecolorallocate($img,rand(0,255),rand(0,255),rand(0,255));
imagesetpixel($img, rand()%$width , rand()%$height , $point);
} //填充背景颜色并输出字符串
imagefill($img, 0, 0, $white); //背景颜色
imagestring($img, rand(0,$width/4), rand(0,$height/5), rand(0,5), $code, $black);
3).输出最终图形。
Header('Content-type: image/png');
4).清除所有资源
imagedestroy($im);
Chapter23.在PHP中使用会话控制
·关于cookie功能
还没有研究,所以后续再更新吧。
·关于session,比较用得多是那个登录系统的验证程序:
authmain.php——身份验证应用程序的主体部分
<?php
session_start(); if(isset($_POST['userid']) && isset($_POST['password'])){
$userid = $_POST['userid'];
$password = $_POST['password']; $db_conn = new mysqli('localhost','username','password','database'); if(mysqli_connect_errno()){
exit();
} $query = "select * from database "."where name = $userid "."and password = sha1($password)"; $result = $db_conn->query($query); if($result->num_rows > 0)
{
$_SESSION['valid_user'] = $userid;
}
$db_conn->close(); ?>
members_only.php——网站的有效用户检查部分,可以确定是否是有效成员
<?php
session_start(); if(isset($_SESSION['valid_user'])){
echo "<p>You are logged in.</p>";
}
else{
echo "<p>You are not logged in.</p>";
}
?>
logout.php——该脚本注销会话变量并销毁变量
<?php
session_start(); $old_user = $_SESSION['valid_user'];
unset($_SESSION['valid_user']); //注销会话变量
session_destroy();
?>
·对于get方法,一般通过地址栏来传参。
目前就这些,请多多指教!
《PHP和MySQL Web开发》读书笔记(下篇)的更多相关文章
- PHP和MySQL Web开发学习笔记介绍
前言 从2016年2月1日开始,之后的几个月左右的时间里,我会写一个系列的PHP和MySQL Web开发的学习笔记.我之前一直从事Java语言的开发工作,最近这段时间非常想学习一门语言,就选择了PHP ...
- Flask Web开发读书笔记
开篇:目前想自学Flask Web开发--基于Python,找了几本书准备啃啃,同时也会分享读书笔记.希望和大家一起进步. Flask是小型框架,可以算是微框架,但是他的功能还是比较多 Flask有三 ...
- 《PHP与MySQL WEB开发》读书笔记
<PHP与MySQL WEB开发>读书笔记 作者:[美]Luke Welling PHP输出的HereDoc语法: echo <<<theEnd line 1 line ...
- 【前端】移动端Web开发学习笔记【2】 & flex布局
上一篇:移动端Web开发学习笔记[1] meta标签 width设置的是layout viewport 的宽度 initial-scale=1.0 自带 width=device-width 最佳实践 ...
- 【前端】移动端Web开发学习笔记【1】
下一篇:移动端Web开发学习笔记[2] Part 1: 两篇重要的博客 有两篇翻译过来的博客值得一看: 两个viewport的故事(第一部分) 两个viewport的故事(第二部分) 这两篇博客探讨了 ...
- ASP.NET Core Web开发学习笔记-1介绍篇
ASP.NET Core Web开发学习笔记-1介绍篇 给大家说声报歉,从2012年个人情感破裂的那一天,本人的51CTO,CnBlogs,Csdn,QQ,Weboo就再也没有更新过.踏实的生活(曾辞 ...
- PHP和MySQL Web开发 原书第4版 高清文字版,有目录,附带源码
PHP和MySQL Web开发 原书第4版:http://yunpan.cn/QCWIS25zmYTAn 提取码 fd9b PHP和MySQL Web开发 原书第4版源码:http://yunp ...
- PHP和MySQL Web开发(原书第4版) 高清PDF+源代码
PHP和MySQL Web开发(原书第4版) 高清PDF+源代码 [日期:2014-08-06] 来源:Linux社区 作者:Linux [字体:大 中 小] 内容简介 <PHP和My ...
- Django Web开发指南笔记
Django Web开发指南笔记 语句VS表达式 python代码由表达式和语句组成,由解释器负责执行. 主要区别:表达式是一个值,它的结果一定是一个python对象:如:12,1+2,int('12 ...
随机推荐
- Redis有序集内部实现原理分析(二)
Redis技术交流群481804090 Redis:https://github.com/zwjlpeng/Redis_Deep_Read 本篇博文紧随上篇Redis有序集内部实现原理分析,在这篇博文 ...
- 蜗牛慢慢爬 LeetCode 9. Palindrome Number [Difficulty: Easy]
题目 Determine whether an integer is a palindrome. Do this without extra space. Some hints: Could nega ...
- PHP 更改session存储方式为Redis
前言: 服务器默认的session存放方式是file.当客户端发送请求带有PHPSESSID时是顺序的去比对session存储文件,如果有5000个session文件,那就有可能需要比对4998次那么 ...
- debug阶段团队贡献分分配
小组名称:飞天小女警 项目名称:礼物挑选小工具 小组成员:沈柏杉(组长).程媛媛.杨钰宁.谭力铭 debug阶段各组员的贡献分分配如下: 姓名 团队贡献分 程媛媛 5.8 沈柏杉 6.5 谭力铭 3. ...
- 在linux中安装jdk以及tomcat并shell脚本关闭启动的进程
在命令行模式中输入uname -a ,如下图,当界面展示i386就说明本linux系统为32版本,就在官网下载对应jdk版本,或者直接到我的网盘上下载http://pan.baidu.com/s/1c ...
- linux 搭建epel本地库,并定时同步
1.安装rsyncyum -y install rsync.x86_64 2.同步epel至本地#http://mirrors.ustc.edu.cn/status/ 获取镜像库rsync路径mkdi ...
- Powershell笔记之help about_XXX
<<about_Arrays>> 1. 一直好奇gettype()输出中的Name这一列的Object[]是什么意思,现在终于明白了,请看下面的例子: 2. GM的不同用法 $ ...
- 深入理解JAVA虚拟机阅读笔记6——线程安全与锁优化
线程安全:如果一个对象可以安全的被多个线程同时使用,那它就是线程安全的. 一.Java中的线程安全 1.不可变 不可变的对象一定是线程安全的.String.枚举类型.java.lang.Number的 ...
- js获取元素到屏幕左上角的距离
开发过程中经常会遇到 获取元素到屏幕左上角的距离, 当我们使用jQuery开发时,我们可以使用 $.offset()来获取准确的距离. 如果我们的项目中并没有引入jQuer的话,跟希望通过原生方法实现 ...
- vs2017自动生成的#include“stdafx.h”详解及解决方案
vs2017自动生成的#include“stdafx.h”详解及解决方案 问题描述: 在高版本的Visual Studio的默认设置中,会出现这么一个现象,在新建项目之后,项目会自动生成#includ ...