PHP基础之超全局变量

PHP与Web页面交互

解析PHP执行过程

  • HTTP请求

    • 当浏览器键入URL地址后,就会向指定服务器发起HTTP请求
    • 在请求的同时,附带请求消息头、请求消息体等相关信息
  • Apache服务端处理

    • 当请求到达服务器之后,Apache就开始工作了
    • 如果请求的是静态资源,Apache直接在服务器目录下获取这些文件
    • 如果请求的是PHP文件,Apache则会交给PHP模块来处理
    • PHP模块将处理后的结果以HTML方式返回给Apache
  • 返回HTTP响应数据

    • 服务器将通过Apache获取到的静态资源通过HTTP响应发送给浏览器端
  • 浏览器显示

    • 客户端将服务器返回的静态资源进行解析并显示出来

Web表单

表单组成

  • 表单标签
    • name 用于设置表单名称
    • method 用于设置表单的提交方式,GET或POST
    • action 用于指定接收数据的路径
    • 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();
?>
原文地址:https://www.cnblogs.com/SharkJiao/p/14001199.html