《PHP和MySQL Web开发》读书笔记(下篇)

时间:2023-12-13 10:36:56

又与大家见面了。继续《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()函数的介绍:

bool move_uploaded_file ( string $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方法,一般通过地址栏来传参。

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