模板

  • header.html:
<!DOCTYPE html>
<html lang="en">
<head><meta charset="UTF-8"><title><?php echo $page_title; ?></title><link rel="stylesheet" href="../include/style.css" type="text/css" media = "screen">
</head>
<body><div id="header"><h1>Your Website</h1><h2>catchy slogan...</h2></div><div id="navigation"><ul><li><a href="index.php">Home Page</a></li><li><a href="register.php">Register</a></li><li><a href="view_users.php">View Users</a></li><li><a href="password.php">Change Password</a></li><li><a href="#">link five</a></li></ul></div><div id="content"><!-- Start of the page-specific content--><!-- Script 9.1 - header.html -->
  • footer.html:
<!-- Script 3.3 - footer.html--><!-- End of the page-specific content. --></div><div id="footer"><p>Coryright $copy; <a href="#">Plain and Simple</a> 2015 | Designed by <a href="http://www.edg3.co.uk"></a> | Sponsored by <a href="http://www.opendesigns.org/">OpenDesigns</a> | Valid <a href="http://jigsaw.w3.org/css-validator">CSS</a> &amp; <a href="http://validator.w3.org">XHTML</a></p></div>
</body>
</html>
  • mysqli_connect.php:
<?php # Script 9.2 - mysqli_connect.phpDEFINE ('DB_USER', 'XXX');  //填写自己数据库的用户名
DEFINE ('DB_PASSWORD', 'XXX');  //填写自己数据库的密码
DEFINE ('DB_HOST', 'localhost');
DEFINE ('DB_NAME', 'sitename');//连接数据库
$mysqli = @mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD, DB_NAME) OR die('Could not connect to MySQL:'.mysqli_connect_error());//设置数据库字符编码
mysqli_set_charset($mysqli, 'utf8');

知识点:

  • mysqli_connect()——连接到服务器

  • mysqli_connect_error()——如果发生连接错误,它返回连接错误消息,不带参数

  • 在函数调用之前放置一个错误控制运算符(@),可以防止在web浏览器中显示PHP错误。这是一种首选的做法,因为错误将由OR die()子句处理。

  • 因为mysqli_connect.php包含敏感的MySQL访问信息,故将其存储在与htdocs同一级目录上,这样就不能从Web浏览器访问该文件。

  • register.php

<?php # Script 9.3 - register.php$page_title = 'Register';include ('../include/header.html');//检查提交状态if($_SERVER['REQUEST_METHOD'] == 'POST'){$errors = array();     //存储错误信息//检查first nameif(empty($_POST['first_name'])){$errors[] = 'You forgot to enter your first name';}else{$fn = trim($_POST['first_name']);}//检查last nameif (empty($_POST['last_name'])) {$errors[] = 'You forgot to enter your last name';}else{$ln = trim($_POST['last_name']);}//检查email Addressif (empty($_POST['email'])) {$errors[] = 'You forgot to enter your email';}else{$e = trim($_POST['email']);}//检查password 和 confirm passwordif (!empty($_POST['pass1'])) {if ($_POST['pass1'] != $_POST['pass2']) {$errors[] = 'Your password did not match the confirm password';}else{$p = trim($_POST['pass1']);}   }else{$errors[] = 'You forgot to enter your password';}//检查是否存在错误if (empty($errors)) {  //无误//连接数据库require ('../mysqli_connect.php');//执行insert操作$sql = "INSERT INTO users(first_name, last_name, email, pass, registration_date) VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";$res = @mysqli_query($mysqli, $sql);if($res)   //插入成功{echo '<h1>Thank you!</h1><p>You are now registered. In Chapter 12 you will actually be able to login in!</p><p><br/></p>';}else{  //插入失败echo '<h1>System Error</h1><p class="error">You could not be registered due to a system error. We apologize for any inconvenience</p>';echo '<p>'.mysqli_error($mysqli).'<br /><br />'.$sql.'</p>';}mysqli_close($mysqli); //关闭数据库include ('../include/footer.html');exit();}else{  //有误echo '<h1>Error!</h1><p class="error">The following error(s) occured:<br/ >';foreach ($errors as $msg) {echo "- $msg<br/ >";}echo '</p><p>Please try again</p><p><br/ ></p>';}}?>
<h1>Register</h1>
<form action="register.php" method="post"><p>First Name: <input type="text" name="first_name" size="15" maxlength="20" value="<?php if(isset($_POST['first_name'])) echo $_POST['first_name']; ?>" /></p><p>Last Name: <input type="text" name="last_name" size="15" maxlength="40" value="<?php if(isset($_POST['last_name'])) echo $_POST['last_name']; ?>" /></p><p>Email Address: <input type="text" name="email" size="20" maxlength="60" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>" /></p><p>Password: <input type="password" name="pass1" size="10" maxlength="20" value="<?php if(isset($_POST['pass1'])) echo $_POST['pass1']; ?>" /></p><p>Confirm Password: <input type="password" name="pass2" size="10" maxlength="20" value="<?php if(isset($_POST['pass2'])) echo $_POST['pass2']; ?>" /></p><p><input type="submit" name="submit" value="Register" /></p>
</form>
<?php include ('../include/footer.html')?>
  • 在浏览器中输入register.php的url,结果如图

  • 提交之后,如图

  • 假设某一信息没填,如图

  • view_users.php

<?php #Script 9.4 -view_users.php$page_title = 'View the Current Users';include ('../include/header.html');echo '<h1>Registered Users</h1>';require ('../mysqli_connect.php');$sql = "SELECT CONCAT(last_name, ',', first_name) AS name, DATE_FORMAT(registration_date, '%M %d, %Y') AS dr FROM users ORDER BY registration_date ASC";$res = @mysqli_query ($mysqli, $sql);if($res){echo '<table align="center" cellspacing="3" width="75%"><tr><td align="left"><b>Name</b></td><td align="left"><b>Date Registered</b></td></tr>';while ($rows = mysqli_fetch_array($res, MYSQLI_ASSOC)) {echo '<tr><td align="left">'.$rows['name'].'</td><td align="left">'.$rows['dr'].'</td></tr>';}echo '</table>';mysqli_free_result($res);  //释放掉资源}//if_$reselse{echo '<p class="error">The current users could not be retrieved. We apologize for any inconvenience.</p>';echo '<p>'.mysqli_error($mysqli).'<br/ ><br/ >Query: '.$sql.'</p>';}mysqli_close($mysqli);include ('../include/footer.html');?>
  • 运行之后

知识点:

  • mysqli_fetch_array([参数]):它带有一个查询结果变量,以数组个数返回一行数据,采用循环,可以返回多行数据。

  • mysqli_free_result ( res):消除 res):消除res占用的系统开销

  • mysqli_fetch_array()与 mysqli_fetch_array($res, MYSQLI_NUM)等价

  • mysqli_fetch_assoc()与mysqli_fetch_array($res,MYSQLI_ASSOC)等价

  • 参数:
    1、MYSQLI_ASSOC: 返回关联数组形式,如$rows['column']
    2、MYSQLI_NUM: 返回索引数组形式,如$rows[0],与参数不填作用相同。比MYSQLI_ASSOC要快一点,且占用内存少些。
    3、MYSQLI_BOTH: 返回关联和索引2种形式

    • register2.php——register的安全版
<?php # Script 9.3 - register.php$page_title = 'Register';include ('../include/header.html');//检查提交状态if($_SERVER['REQUEST_METHOD'] == 'POST'){//连接数据库require ('../mysqli_connect.php');$errors = array();     //存储错误信息//检查first nameif(empty($_POST['first_name'])){$errors[] = 'You forgot to enter your first name';}else{$fn = mysqli_real_escape_string($mysqli, trim($_POST['first_name']));}//检查last nameif (empty($_POST['last_name'])) {$errors[] = 'You forgot to enter your last name';}else{$ln = mysqli_real_escape_string($mysqli, trim($_POST['last_name']));}//检查email Addressif (empty($_POST['email'])) {$errors[] = 'You forgot to enter your email';}else{$e = mysqli_real_escape_string($mysqli, trim($_POST['email']));}//检查password 和 confirm passwordif (!empty($_POST['pass1'])) {if ($_POST['pass1'] != $_POST['pass2']) {$errors[] = 'Your password did not match the confirm password';}else{$p = mysqli_real_escape_string($mysqli, trim($_POST['pass1']));}   }else{$errors[] = 'You forgot to enter your password';}//检查是否存在错误if (empty($errors)) {  //无误//执行insert操作$sql = "INSERT INTO users(first_name, last_name, email, pass, registration_date) VALUES ('$fn', '$ln', '$e', SHA1('$p'), NOW())";$res = @mysqli_query($mysqli, $sql);if($res)   //插入成功{echo '<h1>Thank you!</h1><p>You are now registered. In Chapter 12 you will actually be able to login in!</p><p><br/></p>';}else{  //插入失败echo '<h1>System Error</h1><p class="error">You could not be registered due to a system error. We apologize for any inconvenience</p>';echo '<p>'.mysqli_error($mysqli).'<br /><br />'.$sql.'</p>';}mysqli_close($mysqli); //关闭数据库include ('../include/footer.html');exit();}else{  //有误echo '<h1>Error!</h1><p class="error">The following error(s) occured:<br/ >';foreach ($errors as $msg) {echo "- $msg<br/ >";}echo '</p><p>Please try again</p><p><br/ ></p>';}mysqli_close($mysqli); //关闭数据库}?>
<h1>Register</h1>
<form action="register2.php" method="post"><p>First Name: <input type="text" name="first_name" size="15" maxlength="20" value="<?php if(isset($_POST['first_name'])) echo $_POST['first_name']; ?>" /></p><p>Last Name: <input type="text" name="last_name" size="15" maxlength="40" value="<?php if(isset($_POST['last_name'])) echo $_POST['last_name']; ?>" /></p><p>Email Address: <input type="text" name="email" size="20" maxlength="60" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>" /></p><p>Password: <input type="password" name="pass1" size="10" maxlength="20" value="<?php if(isset($_POST['pass1'])) echo $_POST['pass1']; ?>" /></p><p>Confirm Password: <input type="password" name="pass2" size="10" maxlength="20" value="<?php if(isset($_POST['pass2'])) echo $_POST['pass2']; ?>" /></p><p><input type="submit" name="submit" value="Register" /></p>
</form>
<?php include ('../include/footer.html')?>
  • 注册新用户,如图

  • 知识点:

    • mysqli_real_escape_string($mysqli, data):转义那些可能有问题的字符来清理数据。

    • 如果在服务器上启用Magic Quotes,那么在使用mysqli_real_escape_string()函数之前,需要删除Magic Quotes添加的任何斜杠,采用stripslashes()函数。

  • view_users2.php

<?php #Script 9.4 -view_users.php$page_title = 'View the Current Users';include ('../include/header.html');echo '<h1>Registered Users</h1>';require ('../mysqli_connect.php');$sql = "SELECT CONCAT(last_name, ',', first_name) AS name, DATE_FORMAT(registration_date, '%M %d, %Y') AS dr FROM users ORDER BY registration_date ASC";$res = @mysqli_query ($mysqli, $sql);$nums = mysqli_num_rows($res);if($nums > 0){echo "<p>There are currently $nums registered users</p>";echo '<table align="center" cellspacing="3" width="75%"><tr><td align="left"><b>Name</b></td><td align="left"><b>Date Registered</b></td></tr>';while ($rows = mysqli_fetch_array($res, MYSQLI_ASSOC)) {echo '<tr><td align="left">'.$rows['name'].'</td><td align="left">'.$rows['dr'].'</td></tr>';}echo '</table>';mysqli_free_result($res);  //释放掉资源}//if_$numselse{echo '<p class="error">The current users could not be retrieved. We apologize for any inconvenience.</p>';echo '<p>'.mysqli_error($mysqli).'<br/ ><br/ >Query: '.$sql.'</p>';}mysqli_close($mysqli);include ('../include/footer.html');?>
  • 运行

  • 知识点:

    • mysqli_num_rows($res):返回select查询检索的行数,并将查询结果变量作为一个参数返回,可以用在分页显示查询结果中
  • password.php

<?php$page_title = 'Change your Password';
include ('../include/header.html');if($_SERVER['REQUEST_METHOD'] == 'POST')
{require('../mysqli_connect.php');$errors = array(); //存储错误信息//检查emailif(empty($_POST['email'])){$errors = 'You forget to enter your email address';}else{$e = mysqli_real_escape_string($mysqli, trim($_POST['email']));}//检查current passwordif(empty($_POST['pass'])){$errors = 'You forget to enter your current password';}else{$p = mysqli_real_escape_string($mysqli, trim($_POST['pass']));}//检查new passwordif (!empty($_POST['pass1'])) {if ($_POST['pass1'] != $_POST['pass2']) {$errors[] = 'Your new password did not match the confirm password';}else{$np = mysqli_real_escape_string($mysqli, trim($_POST['pass1']));}   }else{$errors[] = 'You forgot to enter your new password';}if(empty($errors)){$sql = "SELECT user_id FROM users WHERE (email='$e' AND pass=SHA1('$p'))";$res = @mysqli_query($mysqli, $sql);$nums = mysqli_num_rows($res);if($nums == 1){$row = mysqli_fetch_array($res, MYSQLI_NUM);$sql = "UPDATE users SET pass=SHA1('$np') WHERE user_id = $row[0]";$res = @mysqli_query($mysqli, $sql);if(mysqli_affected_rows($mysqli) == 1){echo '<h1>Thank you!</h1><p>Your password has been updated. In Chapter 12 you will actually be able to login in!</p><p><br/></p>';}else{echo '<h1>Thank you!</h1><p class="error">Your password could not be changed due to a system error, We apologize for any inconvenience.</p>';echo '<p>'.mysqli_error($mysqli).'<br /><br />'.$sql.'</p>';}mysqli_close($mysqli);include('../include/footer.html');exit();}//if_$numselse{echo '<h1>Error!</h1><p class="error">The email address and password do not match those on file.<br/ ></p>';}}//if_empty($errors)else{echo '<h1>Error!</h1><p class="error">The following error(s) occured:<br/ >';foreach ($errors as $msg) {echo "- $msg<br/ >";}echo '</p><p>Please try again</p><p><br/ ></p>';}mysqli_close($mysqli);
}?>
<h1>Change Your Password</h1>
<form action="password.php" method="post"><p>Email Address: <input type="text" name="email" size="20" maxlength="60" value="<?php if(isset($_POST['email'])) echo $_POST['email']; ?>" /></p><p>Current Password: <input type="password" name="pass" size="10" maxlength="20" value="<?php if(isset($_POST['pass'])) echo $_POST['pass1']; ?>" /></p><p>New Password: <input type="password" name="pass1" size="10" maxlength="20" value="<?php if(isset($_POST['pass1'])) echo $_POST['pass1']; ?>" /></p><p>Confirm Password: <input type="password" name="pass2" size="10" maxlength="20" value="<?php if(isset($_POST['pass2'])) echo $_POST['pass2']; ?>" /></p><p><input type="submit" name="submit" value="Register" /></p>
</form><?php include ('../include/footer.html'); ?>
  • 用于修改当前密码

  • 知识点:

如果使用命令TRUNCATE tablename
从表中删除所有记录,则mysqli_affected_rows()会返回0,即使查询成功执行并删除了每一行

PHP学习练手(十)相关推荐

  1. 为何别人实操很强?因为他用这70个Python项目学习练手!它值得你收藏落灰!

    [此文章转自乐字节] 前言: 不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整 ...

  2. 为何别人实操很强?因为他用这70个Python项目学习练手,值得你收藏落灰

    前言: 不管学习哪门语言都希望能做出实际的东西来,这个实际的东西当然就是项目啦,不用多说大家都知道学编程语言一定要做项目才行. 这里整理了70个Python实战项目列表,都有完整且详细的教程,你可以从 ...

  3. 深度学习练手项目(一)-----利用PyTorch实现MNIST手写数字识别

    一.前言 MNIST手写数字识别程序就不过多赘述了,这个程序在深度学习中的地位跟C语言中的Hello World地位并驾齐驱,虽然很基础,但很重要,是深度学习入门必备的程序之一. 二.MNIST数据集 ...

  4. 值得学习练手的22个Python迷你程序(附代码)

    来源/法纳斯特 Python丰富的开发生态是它的一大优势,各种第三方库.框架和代码,都是前人造好的"轮子",能够完成很多操作,让你的开发事半功倍. 下面就给大家介绍22个通过Pyt ...

  5. 深度学习练手项目(二)-----利用PyTorch进行线性回归

    前言 深度学习并没有想象的那么难,甚至比有些传统的机器学习更简单.所用到的数学知识也不需要特别的高深.这篇文章将利用PyTorch来实现线性回归这个经典的模型. 一.线性回归理论 线性回归时利用数理统 ...

  6. Python之值得学习练手的22个迷你程序(附代码)

    ① 前言 Python 丰富的开发生态是它的一大优势,各种第三方库.框架和代码,都是前人造好的"轮子",能够完成很多操作,让开发事半功倍. 本文分享 22 个通过 Python 构 ...

  7. 百看不如一练 100道python经典题目,拿去参考学习练手(附答案)可复制

    近年来,Python在编程语言界里赚足了风头,无论是受欢迎程度,还是薪资待遇,都非常可观,相应的,Python岗位要求也越来越高,无论你是零基础还是老前辈,在Python面试中都不能轻视. 不打无准备 ...

  8. 22个Python迷你程序,最适合你拿来学习练手了

    1. 骰子模拟器 目的:创建一个程序来模拟掷骰子. 提示:当用户询问时,使用random模块生成一个1到6之间的数字 2. 石头剪刀布游戏 目标:创建一个命令行游戏,游戏者可以在石头.剪刀和布之间进行 ...

  9. php学习练手(一)

    学习目的 将form.php中html内form表单内容提交到handle_form.php中,最终显示出来. 代码 form.php: <?php?><!DOCTYPE html& ...

最新文章

  1. linux设备模型之Class
  2. 宏定义和Typedef区别?
  3. request的简介和运行环境
  4. JavaScript的数据类型、null 和undefined、原始数据类型和引用数据类型等JavaScript基础知识总结
  5. 前端学习(2343):理解virtaldom和key
  6. mooc作业怎么上传附件_交作业的一二三
  7. HTTP/1.1 Range和Content-Range
  8. 解决VisualStudio 05/08智能提示显示1秒钟
  9. 树莓派禁用SD卡上的swap交换空间
  10. avs php,linux 安装AdultVideoScript (AVS)全教程
  11. mfc窗口右下角如何显示一个三角形图案_以C4D制作金属碳笼为例:安利一个友好的三维制图软件...
  12. ftp服务器文件查找,ftp服务器中查找文件
  13. Win8系统 界面大放送(Win8 抢先版)
  14. 云桌面VOI计算存储在服务器端,介绍三种云桌面:VDI、IDV、VOI
  15. python秒表游戏代码_在pygam游戏中添加秒表
  16. c语言书面作业3,C语言程序设计
  17. 群晖NAS的公网、NAT、DDNS、证书等配置二
  18. Exclusive-OR
  19. cf:B. Patchouli‘s Magical Talisman【数学贪心思维 + 奇偶分析】
  20. 28岁程序员的逃跑计划,从送外卖开始

热门文章

  1. Redis Desktop Manager 运行时报0xc000007b
  2. 关于《人月神话》的读后感
  3. 【OpenGL】笔记三、着色器
  4. 计算机一级考试操作题知识点,计算机一级考操作题知识点归纳.doc
  5. 从零开始的VUE项目-03(数据的增删改查)
  6. 微信小程序第三方框架
  7. tcl/tk参考——列表操作llength
  8. vue首屏加载速度慢_Vue首屏加载速度优化如何提升80%?本文详解
  9. 内部基因决定拼购品质,苏宁拼购或将成为行业发展新标杆
  10. 一、Windows系统下安装Tensorflow2.x(2.6)