一, PHP 提供了很多预定义的超全局变量, 用来获取 HTTP 请求信息
超全局变量 | 值 |
$_POST | 获取客户端以 POST 方式发送的 HTTP 请求信息。 |
$_GET | 获取客户端以 GET 方式发送的 HTTP 请求信息。 |
$_REQUEST | 包含了 $_GET,$_POST 和 $_COOKIE 数组中信息。 |
$_SERVER | 获取 HTTP 请求中的环境变量信息。 |
$_SESSION | 存储单个用户的信息。 |
$_COOKIE | 读取和写入客户端的 Cookie 信息。。 |
$_FILE | 获取通过 POST 方式上传文件时的相关信息,为多维数组。 |
二,$_POST[ ]: 获取 POST 方式提交的表单数据
语法:$_POST[控件名称]
1. 登录实例
login.html
- <!DOCTYPE HTML>
- <HTML>
- <head>
- <meta charset="UTF-8">
- <title>
- 系统登录
- </title>
- </head>
- <body>
- <form action="check.php" method="post" name="frm" onsubmit="return check();">
- <p>
- <input type="text" name="username" placeholder="用户名">
- </p>
- <p>
- <input type="password" name="password" placeholder="密码">
- </p>
- <p>
- <label>
- <input type="checkbox" name="save_username">
- 记住密码
- </label>
- </p>
- <p>
- <input type="submit" value="登录">
- </p>
- </form>
- <script>
- // 前端数据验证
- function check() {
- var username = frm.username;
- if (username.value == '') {
- alert('用户名不能为空');
- username.focus();
- return false;
- }
- return true;
- }
- </script>
- </body>
- </HTML>
check.PHP
- <?PHP
- header("Content-type: text/html; charset=utf-8");
- $username=trim($_POST['username']);
- // 服务器端验证
- if (empty($username)) {
- echo '<script>alert(" 用户名必须输入 ");history.back()</script>';
- exit();
- }
- // 防止 xss 攻击
- $username=htmlspecialchars((strtolower($username)));
- $password=$_POST['password'];
- if ($username=='admin' && $password=='123') {
- echo '登录成功!';
- }else{
- echo '用户名或密码错误';
- }
- ?>
2. 多值表单
city.HTML
- <!DOCTYPE HTML>
- <HTML>
- <head>
- <meta charset="UTF-8">
- <title > 多值表单</title>
- </head>
- <body>
- <form action="city.php" method="post">
你去过的城市:
- <label>
- <input type="checkbox" name="city[]" value="bj">北京
- </label>
- <label>
- <input type="checkbox" name="city[]" value="sh">上海
- </label>
- <label>
- <input type="checkbox" name="city[]" value="gz">广州
- </label>
- <label>
- <input type="checkbox" name="city[]" value="sz">深圳
- </label>
- <input type="submit" value="提交">
- </form>
- </body>
- </HTML>
city.PHP
- <?PHP
- $city=$_POST['city'];
- // echo implode(',',$city);
- foreach ($city as $key => $value) {
- var_dump($value);
- }
- ?>
3. 在线考试
test1.PHP
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 试卷 </title> </head> <body> <form action="test2.php" method="post"> <?PHP $x=mt_rand(0,9); $y=mt_rand(0,9); $z=$x+$y; $op=mt_rand(0,3); ?> <p> <?=$x?> + <?=$y?> = <?PHP for ($i=0; $i <4; $i++) { ?> <label> <input type="radio" name="Q" value="<?=$z+$i-$op?>"> <?=$z+$i-$op?> </label> <?PHP } ?> </p> <input type="hidden" name="answer" value="<?=$z?>"> <input type="submit" value="提交"> </form> </body> </HTML>
test2.PHP
<?PHP header('Content-type:text/html;charset=utf8'); // var_dump($_POST); $result=intval($_POST['Q']); $answer=intval($_POST['answer']); if ($result==$answer) { echo "回答正确"; }else{ echo "回答错误"; } ?>
三,$_GET[]: 获取 GET 方式提交的表单数据
url 传递变量:
http:// 网址? 变量 1 = 值 1 & 变量 2 = 值 2...
语法:$_GET[变量名]
1. 搜索案例
:(客户端实现)
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> $_GET </title> </head> <body> <form action="search.php" method="post" name="frmSearch"> <p> <input type="text" name="key" placeholder="搜索"> <input type="button" value="搜索" id="btn-search"> </p> <p> <label> <input type="radio" name="rdo" value="baidu"> 百度 </label> <label> <input type="radio" name="rdo" value="bing" checked> 必应 </label> <label> <input type="radio" name="rdo" value="taobao"> 淘宝 </label> </p> </form> <script> var btn = document.getElementById('btn-search'); btn.onclick = function() { key = frmSearch.key.value; if (key.length == 0) { alert('请输入搜索的关键字'); return false; } var rdo = frmSearch.rdo.value; var url; switch (rdo) { case 'baidu': url = 'https://www.baidu.com/s?wd=' + key; break; case 'bing': url = 'http://cn.bing.com/search?q=' + key; break; default: url = 'https://world.taobao.com/search/search.htm?q=' + key; break; } location.href = url; } </script> </body> </HTML>
搜索案例:(服务器端实现)
serach.HTML
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> $_GET </title> </head> <body> <form action="search.php" method="post"> <p> <input type="text" name="key" placeholder="搜索"> <input type="submit" value="搜索"> </p> <p> <label> <input type="radio" name="rdo" value="baidu"> 百度 </label> <label> <input type="radio" name="rdo" value="bing" checked> 必应 </label> <label> <input type="radio" name="rdo" value="taobao"> 淘宝 </label> </p> </form> </body> </HTML>
search.PHP
<?PHP header('Content-type:text/html;charset=utf-8'); $rdo=$_POST['rdo']; $key=$_POST['key']; // var_dump($rdo); // exit(); if (empty($key)) { echo '<script>alert(" 搜索关键字不能为空 ");history.back();</script>'; exit(); } switch ($rdo) { case 'baidu': $url='https://www.baidu.com/s?wd='.$key; break; case 'bing': $url='http://cn.bing.com/search?q='.$key; break; default: $url='https://world.taobao.com/search/search.htm?q='.$key; break; } header('Location:'.$url); ?>
四,$_SERVER[]: 用于获取 http 请求的相关信息
常用的属性如下:
元素 | 描述 |
$_SERVER[‘PHP_SELF‘] | 返回当前执行脚本的文件名。 |
$_SERVER[‘REQUEST_METHOD‘] | 返回访问页面使用的请求方法(例如 & nbsp;POST)。 |
$_SERVER[‘PHP_SELF‘] | 返回当前执行脚本的文件名。 |
$_SERVER[‘REMOTE_ADDR‘] | 返回浏览当前页面的用户的 IP 地址。 |
$_SERVER[‘REMOTE_HOST‘] | 返回浏览当前页面的用户的主机名。 |
$_SERVER[‘HTTP_USER_AGENT‘] | 返回访问者浏览器信息。 |
$_SERVER[‘HTTP_COOKIE‘] | 返回传递的 cookie 信息。 |
五, header()函数
header()函数用于设置服务器发送给客户端网页的头信息.
因为是设置头信息, 所以 header()函数应该放在所有内容输出之前.
常用用法:
1. 重定向网页
<?PHP $url='http://web.3eol.com.cn'; header("Location:$url"); ?>
2. 延迟转向
<?PHP //3 秒后, 挑战到微博 header('refresh:3;url=http://weibo.com'); ?>
3. 设置网页字符集
header('Content-type:text/html;charset=utf-8;');
4. 强制下载文件
<?PHP $filename='test.gif'; header('Content-type:image/gif'); header('Content-Disposition:attachment; filename="'.$filename.'"'); header('Content-Length:'.filesize($filename)); ?>
六
,HTTP 协议
http 协议是一种无状态协议.
无状态 是指协议对于事物处理没有记忆能力. 缺少状态意味着如果后续处理需要前面的信息, 则它必须重传, 这样可能导致每次连接传送的数据量增大. 另一方面, 在服务器不需要先前信息时, 它的应答就较快.
无状态性客户端与服务端连接通信运行速度快, 服务器应答也快, 因为无状态, 协议对事务处理是没有记忆性的, 是独立的. 所以为了满足后面事务需要前面的事务有关信息, 所以事务有关的信息要在协议外发送.
为了让无状态的 http 协议能够记住先前的状态, Web 采用了 Cookie 和 session 的技术.
七
,cookie
最早是网景公司的前雇员 Lou Montulli 在 1993 年 3 月的发明. Cookie 是当你浏览某网站时, 服务器存储在你机器上的一个小文本文件, 再次来到该网站时, 网站通过读取 Cookie, 得知你的相关信息, 就可以做出相应的动作.
1. cookie 数据 传递
Cookie 是利用网页代码中的 HTTP 头信息进行传递的, 浏览器的每一次网页请求, 都可以伴随 Cookie 传递.
http request: 浏览器向服务器发起的每个请求都会带上 cookie:
Host: www.example.org Cookie: foo=value1;bar=value2 Accept: */*
服务器将 Cookie 添加到网页的 HTTP 头信息中, 伴随网页数据传回到你的浏览器, 浏览器会根据你电脑的 Cookie 设置选择是否保存这些数据.
如果浏览器不允许 Cookie 保存, 则关掉浏览器后, 这些数据就消失.
http response: 服务器给浏览器的返回可以设置 cookie:
HTTP/1.1 200 OK Content-type: text/HTML Set-Cookie: name=value Set-Cookie: name2=value2; Expires=Wed,09 June 2021 10:18:32 GMT (content of page)
2. 生命周期
Cookie 有一个 Expires(有效期)属性, 这个属性决定了 Cookie 的保存时间, 服务器可以通过设定 Expires 字段的数值, 来改变 Cookie 的保存时间.
如果不设置该属性, 或设为 0, 那么 Cookie 只在浏览网页期间有效, 关闭浏览器, 这些 Cookie 自动消失.
3.cookie 特点
文本文件, 保存在客户端.
由服务端写入.
<?PHP setcookie('username','admin'); // 会话型 cookie, 浏览器关闭即删除 setcookie('username','admin',time()+60);// 长效型 cookie, 有效期为 60 秒 setcookie('username','admin',time()+24*60*60);// 长效型 cookie, 有效期为 1 天 ?>
<?PHP setcookie('username','teacher',7*24*3600);// 将 username 的值改为 teacher, 并且有效期更新为 1 个月 ?>
<?PHP // set the expiration date to one hour ago setcookie("user", "", time()-3600); ?>
<?PHP foreach ($_COOKIE as $key => $value) { var_dump($value); }
<?PHP header('content-type:text/html;charset=utf-8'); if (!isset($_COOKIE['login']['count'])) { echo '欢迎您第一次访问本网站 < br>'; setcookie('login[count]',1,time()+24*3600); setcookie('login[time]',strval(time()),time()+24*3600); }else{ $log_count=intval($_COOKIE['login']['count']); $log_count++; $log_time=intval($_COOKIE['login']['time']); echo "欢迎你第" . $log_count . '次访问本网站 < br>'; echo '上次访问的时间是:' . date('Y-m-d H:i:s' ,$log_time); setcookie('login[count]',strval($log_count),time()+24*3600); setcookie('login[time]',strval(time()),time()+24*3600); } ?>
<?PHP if ($_COOKIE['auto']!='') { header('Location:index.php'); } ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 系统登录 </title> </head> <body> <form action="check.php" method="post" name="frm" onsubmit="return check();"> <p> <input type="text" name="username" placeholder="用户名"> </p> <p> <input type="password" name="password" placeholder="密码"> </p> <p> <label> <input type="checkbox" name="auto_login" value="1"> 十天内免登录 </label> </p> <p> <input type="submit" value="登录"> </p> </form> </body> </HTML>
<?PHP header("Content-type: text/html; charset=utf-8"); $username=trim($_POST['username']); $username=htmlspecialchars((strtolower($username))); $password=$_POST['password']; if ($username=='admin' && $password=='123') { if ($_POST['auto_login']=='1') { setcookie('auto',$username,10*24*3600); } header('Location:index.php'); }else{ echo '用户名或密码错误'; } ?>
<?PHP session_start(); ?> <HTML> <body> </body> </HTML>
<?PHP session_start(); // store session data $_SESSION['views']=1; ?> <HTML> <body> <?PHP //retrieve session data echo "Pageviews=". $_SESSION['views']; ?> </body> </HTML>
<?PHP session_start(); ini_set('sesson.gc_maxlifetime',60); // 保存 1 分钟 setcookie(session_name(),session_id(),time()+60,"/"); ?>
<?PHP session_start(); unset($_SESSION['username']);// 删除 $_SESSION 中的一个 session 变量 session_unset(); // 删除 $_SESSION 中所有的 session 变量 ?>
<?PHP session_start(); session_unset(); session_destroy(); ?>
<?PHP session_start(); echo session_id().'<br>'; if(isset($_SESSION['views'])){ $views=intval($_SESSION['views']) $_SESSION['views']=strval($views+1); }else{ $_SESSION['views']=1; } echo "Views=". $_SESSION['views']; ?>
<?PHP session_start(); if(!isset($_SESSION['username'])){ echo '<script>alert(" 登录超时 ");location.href="login.html";</script>'; } ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 系统登录 </title> </head> <body> <form action="check.php" method="post" name="frm" onsubmit="return check();"> <p> <input type="text" name="username" placeholder="用户名"> </p> <p> <input type="text" name="password" placeholder="密码"> </p> <p> <label> <input type="checkbox" name="save_username"> 记住密码 </label> </p> <p> <input type="submit" value="登录"> </p> </form> </body> </HTML>
<?PHP session_start(); header("Content-type: text/html; charset=utf-8"); $username=trim($_POST['username']); // 防止 xss 攻击 $username=htmlspecialchars((strtolower($username))); $password=$_POST['password']; if ($username=='admin' && $password=='123') { // echo '登录成功!'; $_SESSION['username']=$username; header('Location:index.php'); }else{ echo '用户名或密码错误'; } ?>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 商城首页 </title> </head> <body> <h3> 商品分类 </h3> <ul> <li> <a href="book.php"> 图书 </a> </li> <li> <a href="toy.php"> 玩具 </a> </li> </ul> <ul> <li> <a href="show_car.php"> 查看购物车 </a> </li> <li> <a href="log_out.php"> 退出 </a> </li> </ul> </body> </HTML>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 图书 </title> </head> <body> <h3> 图书 </h3> <form action="add_car.php" method="post"> <ul> <li> <label> <input type="checkbox" name="goods[]" value="C"> C 语言从入门到放弃 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="Andriod"> Andriod 从入门到改行 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="Cplus"> C++ 从入门到崩溃 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="bigdata"> 大数据从被忽悠到会忽悠 </label> </li> </ul> <button type="submit"> 加入购物车 </button> </form> </body> </HTML>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 图书 </title> </head> <body> <h3> 图书 </h3> <form action="add_car.php" method="post"> <ul> <li> <label> <input type="checkbox" name="goods[]" value="ball"> 球 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="bear"> 小熊 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="minicar"> 小汽车 </label> </li> <li> <label> <input type="checkbox" name="goods[]" value="watergun"> 水枪 </label> </li> </ul> <button type="submit"> 加入购物车 </button> </form> </body> </HTML>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } header('Content-type:text/html;charset=utf-8'); $car=$_POST['goods']; // unset($_SESSION['car']); var_dump($car); if (isset($_SESSION['car'])) { foreach ( $_SESSION['car'] as $key => $value) { $good_name=$value['good_name']; // var_dump($good_name); $index=array_search($good_name,$car); // var_dump($index); if ($index!==false) { $_SESSION['car'][$key]['count']++; unset($car[$index]); } } } foreach ($car as $key => $value) { $good=array( 'good_name'=>$value, 'count'=>1, ); $_SESSION['car'][]=$good; } var_dump($_SESSION['car']); // unset($_SESSION['car']); ?>
<!DOCTYPE HTML> <HTML> <head> <meta charset="UTF-8"> <title> 查看购物车 </title> </head> <body> <table> <thead> <tr> <th> 商品 </th> <th> 数量 </th> <th> 操作 </th> </tr> </thead> <tbody> <?PHP // var_dump($_SESSION[ 'car']); if (isset($_SESSION[ 'car'])) { foreach ($_SESSION[ 'car'] as $key=> $value) { ?> <tr> <td> <?PHP echo $value[ 'good_name'];?> </td> <td> <?PHP echo $value[ 'count']; ?> </td> <td> <a href="del_car.php?good_name=<?php echo $value['good_name']; ?>"> 删除 </a> </td> </tr> <?PHP } }else{ echo '购物车无商品'; } ?> </tbody> </table> <a href="clear_car.php"> 清空购物车 </a> </body> </HTML>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } var_dump($_SESSION['car']); $good_name=$_GET['good_name']; if (isset($_SESSION['car'])) { foreach ($_SESSION['car'] as $key => $value) { if ($value['good_name']==$good_name) { unset($_SESSION['car'][$key]); } } } header('Location:show_car.php'); ?>
<?PHP session_start(); if (!isset($_SESSION['username'])) { header('Location:login.html'); } unset($_SESSION['car']); header('Location:index.php'); ?>
<?PHP session_start(); session_unset(); session_destroy(); header('Location:login.html'); ?>
来源: http://www.bubuko.com/infodetail-3357632.html