PHP与Web页面交互
解析PHP执行过程
-
HTTP请求
- 当浏览器键入URL地址后,就会向指定服务器发起HTTP请求
- 在请求的同时,附带请求消息头、请求消息体等相关信息
-
Apache服务端处理
- 当请求到达服务器之后,Apache就开始工作了
- 如果请求的是静态资源,Apache直接在服务器目录下获取这些文件
- 如果请求的是PHP文件,Apache则会交给PHP模块来处理
- PHP模块将处理后的结果以HTML方式返回给Apache
-
返回HTTP响应数据
- 服务器将通过Apache获取到的静态资源通过HTTP响应发送给浏览器端
-
浏览器显示
- 客户端将服务器返回的静态资源进行解析并显示出来
Web表单
表单组成
- 表单标签
name
用于设置表单名称method
用于设置表单的提交方式,GET或POSTaction
用于指定接收数据的路径enctype
用于设置提交数据的编码格式target
用于设置返回信息的显示格式
<form name='' method='' action='' enctype='' target=''>
...
</form>
- 表单元素
<input>
域标记<textarea>
文字域标记
<form>
<input name="username" type="text"><br>
<input name="pwd" type="password"><br>
<input name="sex" type="radio"><br>
<input name="hobby" type="checkbox"><br>
<input name="upload" type="file"><br>
<input name="login" type="submit"><br>
<input name="girl" type="image"><br>
<input name="clean" type="reset"><br>
<textarea name="content"></textarea>
</form>
获取表单数据
method
属性指定提交方式POST
提交方式使用全局数组$_POST[]
来获取表单元素的值GET
提交方式使用全局数组$_GET[]
来获取表单元素的值
$username= $_GET['username'];
$username= $_POST['username'];
$username= $_REQUEST['username'];
<?php
header("Content-Type: text/html; charset=utf-8");
if(!empty($_REQUEST['username'])){
echo $_REQUEST['username'];
}
?>
<form action='' method="post">
<input type="text" name="username">
<br>
<br>
<input type="submit" value="提交">
</form>
表单安全验证
- 用户提交的数据属于非法数据(如:JS代码段)
strip_tags()
方法- 用于去除字符串中的HTML和PHP标记
htmlentities()
方法- 可以将HTML和PHP标记转换成字符
<?php
header("Content-Type: text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']== 'POST'){
echo '<pre>';
echo htmlentities($_REQUEST['content'], ENT_NOQUOTES, 'UTF-8').'<br>';
echo '</pre>';
}
?>
<form action='' method="post">
<p>留言内容:</p>
<textarea name="content"></textarea>
<br><br>
<input type="submit" value="留言提交">
</form>
表单数据验证
-
对表单提交的数据进行验证
isset()
用于检测变量是否具有值- 包括
0 false
或者一个空字串,但不能是NULL
- 包括
empty()
用于检测是否具有空值- 包括
空字串 0 null 或 false
- 包括
is_numeric()
用于检测数字或数字字符串
-
转账案例
<?php
header("Content-Type: text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']== 'POST'){
if(!isset($_POST['name'])){
echo '必须设置转账人员!';
exit;
}
if(empty($_POST['amount'])){
echo '请输入转账金额!';
exit;
}
if(!is_numeric($_POST['amount'])){
echo '请输入正确的数据格式!';
exit;
}
echo "转账{$_POST['amount']}元给{$_POST['name']}";
var_dump($_POST['name']);
exit;
}
?>
<form action='' method="post">
<p>转账 <input type="text" name="amount"> 给 <input type="text" name="name"></p>
<br>
<input type="submit" value="转账提交">
</form>
超全局变量
超全局变量
- 预定义的超全局变量
$_GET
经由 HTTP GET 方法提交至脚本的变量$_POST
经由 HTTP POST 方法提交至脚本的变量$_REQUEST
经由 GET POST和COOKIE机制交至脚本的变量$_SERVER
经由web服务器设定或者直接与当前脚本的执行环境相关联$_ENV
执行环境提交至脚本的变量$_FILES
经由 HTTP POST 文件上传而提交至脚本的变量$_COOKIE
经由 HTTP Cookies 方法提交至脚本的变量$_SESSION
当前注册给脚本会话的变量$GLOBALS
包含一个引用指向每个当前脚本的全局范围内有效的变量
$_GET
$_GET
- 对于GET方式提交的数据,可以使用$_GET变量来获取,$_GET变量实际上就是一个数组
<?php
header("Content-Type: text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']== 'GET'){
if(isset($_GET['amount'])){
echo $_GET['amount'];
exit;
}
}
?>
<form action='' method="get">
<input type="text" name="amount">
<input type="submit" value="提交">
</form>
$_POST
$_POST
- 对于POST方式提交的表单,可以使用$_POST变量来获取,$_POST变量实际上也是一个数组
<?php
header("Content-Type: text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']== 'POST'){
if(isset($_POST['amount'])){
echo $_POST['amount'];
exit;
}
}
?>
<form action='' method="post">
<input type="text" name="amount">
<input type="submit" value="提交">
</form>
$_REQUEST
$_REQUEST
- 同时获取
$_GET $_POST $_COOKIE
中的表单数据
- 同时获取
<?php
header("Content-Type: text/html; charset=utf-8");
if($_SERVER['REQUEST_METHOD']== 'POST' || 'GET'){
if(isset($_REQUEST['amount'])){
echo $_REQUEST['amount'];
exit;
}
}
?>
<form action='' method="post">
<input type="text" name="amount">
<input type="submit" value="提交">
</form>
$_SERVER
-
$_SERVER
- 在Web服务器中保存页面交互信息
- 是由Web服务器创建的信息数组
- 用于存放HTTP请求头信息以及Web服务器信息
-
HTTP请求头信息
HTTP_HOST
Web服务器的地址HTTP_USER_AGENT
客户端操作系统和浏览器信息HTTP_ACCEPT
当前HTTP请求的Accept头部信息HTTP_ACCEPT_LANGUAGE
当前HTTP请求的Accept_Language头部信息HTTP_ACCEPT_ENCODING
当前HTTP请求的Accept_Encoing头部信息HTTP_REFERER
链接到当前页面的前一页面的URL地址
-
Web服务器信息
SERVER_NAME
Web服务器的名字SERVER_ADDR
Web服务器的IP地址SERVER_PORT
Web服务器的端口号REMOTE_ADDR
客户端IP地址DOCUMENT_ROOT
Web服务器中的应用代码存放地址SERVER_ADMIN
Web服务器的管理员账号SCRIPT_FILENAME
当前访问的脚本文件的文件名REMOTE_PORT
客户端使用的端口号GATEWAY_INTERFACE
网关接口信息SERVER_PROTOCOL
Web服务器使用的协议信息REQUEST_METHOD
客户端发出的HTTP请求中使用的方法QUERY_STRING
客户端发出的HTTP请求中的参数串REQUEST_URI
URL中的路径部分SCRIPT_NAME
当前访问的脚本文件的相对路径PHP_SELF
当前访问的PHP脚本文件的相对路径REQUEST_TIME
客户端发出HTTP请求的时间
<?php
echo "客户端的IP地址:{$_SERVER['REMOTE_ADDR']}<br>";
echo "文件的存放位置:{$_SERVER['DOCUMENT_ROOT']}<br>";
echo "脚本文件的名称:{$_SERVER['SCRIPT_FILENAME']}<br>";
echo "表单的请求方式:{$_SERVER['REQUEST_METHOD']}<br>";
echo "文件的相对路径:{$_SERVER['PHP_SELF']}<br>";
?>
$GLOBALS
- 超全局变量
$GLOBALS
- 是一个引用全局作用域中全部可用变量的数组
- 变量名就是数组的键
<?php
function test(){
$foo1= "泥萌";
echo "{$foo1}<br>";
echo "{$GLOBALS['foo2']}<br>";
echo "{$GLOBALS['foo3']}<br>";
var_dump($GLOBALS);
}
$foo2= '蜗萌';
$foo3= '塔萌';
test();
?>