PHP表单和用户输入
PHP中的$_POST和$_GET变量用于检索表单中的信息,比如用户输入。
实例:
<html>
<head>
<meta charset="utf-8">
<title>test</title>
</head>
<body>
<form action="welcome.php" method="post">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
当用户填写好上面的表单并点击提交按钮是,表单的数据会被送往名为"welcome.php"的PHP文件:welcome.php文件如下
欢迎<?php echo $_POST['fname'];?>!<br>
你的年龄是 <?php echo $_POST['age'];?>岁。
PHP获取下拉菜单的数据
表单使用GET方式获取数据,action属性值为空表示提交到当前脚本,我们可以通过select的name属性获取下来菜单的值
实例:
<?php
$q = isset($_GET['q'])?htmlspecialchars($_GET['q']):' ';
if($q){
if($q=='BAIDU'){
echo "百度一下<br>https://www.baidu.com";
}else if($q=="GOOGLE"){
echo "Google搜索<br>http://www.google.com";
}else if($q=="TAOBAO"){
echo "淘宝<br>http://www.taobo.com";
}
}else{
?>
<form action="" method="get">
<select name="q">
<option value="">选择应该站点:</option>
<option value="BAIDU">baidu</option>
<option value="GOOGLE">Google</option>
<option value="TAOBAO">Taobao</option>
</select>
<input type="submit" value="提交">
</form>
<?php
}
?>
PHP下拉菜单多选
如果下拉菜单多选(multiple="multiple"),我们可以通过将设置select name="q[]"以数组的方式获取,下面使用POST方式提交,代码如下:
<?php
$q =isset($_POST['q'])?$_POST['q']:"";
if(is_array($q)){
$site = array(
'taobao'=>'淘宝:http://www.taobo.com',
'baidu'=>'百度一下:http://www.baidu.com',
'google'=>'google搜索:http://www/google.com',
);
foreach($q as $var){
echo $sites[$val]. PHP_EOL;
}
}else{
?>
<form action="" method="post">
<select multiple="multiple" name="q[]">
<option value="">请选择应该站点:</option>
<option value="taobao">Taobao</option>
<option value="google">Google</option>
<option value="baidu">baidu</option>
</select>
<input type="submit" value="提交">
</form>
<?php
}
?>
单选按钮表单
<?php
$q = isset($_GET['q'])?htmlspecialchars($_GET['q']):"";
if($q){
if($q=='taobao'){
echo '你要钱吗?就知道买买买';
}else if($q='google'){
echo '我才是世界上最好的搜索引擎'
}else if($q=='baidu'){
echo '我是百度,大家都懂';
}
}else{
?>
<form action="" method="get">
<input type="radio" name="q" value="taobao"/>taobao
<input type="radio" name="q" value="google"/>google
<input type="radio" name="q" valu="baidu"/>baidu
<input type="sumbit" value="提交">
</form>
<?php
}
?>
PHP checkbox复选框可以选择多个值
<?php
$q = isset($_POST['q'])?$_POST['q']:'';
if ($q){
if(is_array($q)){
$site= array(
'taobao'=>'https://www.baidu.com',
'google'=>'https://www.google.com',
'baidu'=>'https://www.baidu.com',
);
foreach($q as $val){
echo $site[$val] . PHP_EOL;
}
}
} else{
?><form action="" method="post">
<input type="checkbox" name="q[]" value="taobao">taobao</br>
<input type="checkbox" name="q[]" value="google">google</br>
<input type="checkbox" name="q[]" value="baidu">baidu</br>
<input type="submit" value="提交">
</form>
<?php
}
?>
$_SERVER['PHP_SELF']返回当前正在执行脚本的文件名。
什么是htmlspecialchars()方法
htmlspecialchars()函数把一些预定义的字符串转换为HTML实体。
预定义的字符是:
- &(和号)成为&
- " (双引号)成为"
- '(单引号)成为';
- <(小于)成为<
- >(大于)成为>
trim()函数去除用户输入数据不必要的字符(如:空格,tab,换行)。
stripslashes()函数去除用户输入数据中的反斜杠(\)。
关联二维数组:
<?php
$sites = array
(
"runoob"=>array
(
"菜鸟教程",
"http://www.runoob.com"
),
"google"=>array
(
"Google搜索",
"http://www.google.com"
),
"taobao"=>array
(
"淘宝",
"http://www.taobao.com"
)
);
print_r($lsites);
?>
输出:
PHP包含文件
- require生成一个致命错误(E_COMPILE_ERROR),在错误发生后脚本会停止执行。
- include生成一个警告(E_WARNING),在错误发生后脚本会继续执行。
PHP文件处理
fopen()函数用于在PHP中打开文件,此函数的第一个参数含有要打开的文件名称,第二个参数规定了使用哪一种模式来打开文件。
fclose()函数用于关闭打开的文件。
feof()函数检测是否达到文件末尾(EOF)。
fgets()函数用于从文件中逐行读取文件。
fgetc()函数用于从文件中逐字节低读取文件。
PHP文件上传
- 创建一个文件上传表单
<html>
<head>
<meta charset="utf-8">
<title>upload</title>
</head>
<body>
<form action="upload_file.php" method="post" enctype="multipart/form-data">
<label for="file">文件名:</label>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交">
</form>
</body>
</html>
创建上传脚本
<?php
if($_FILES['file']['error'] > 0)
{
echo "错误:". $_FILES['file']['error'] . "<br>";
}else{
echo "上传文件名:" . $_FILES['file']['name'] . "<br>";
echo "文件类型:" .$_FILES['file']['type'] . "<br>";
echo "文件大小:" .$_FILES['file']['size'] . "<br>";
echo "文件临时存储位置:".$_FILE['file']['tmp_name'];
}
?>
通过使用PHP的全局数组$_FILES,你可以从客户计算机向远程服务器上传文件。
第一个参数是表单的input name,第二个下标可以是"name"、"type"、"size"、"tmp_name"或者"error"。
- $_FILES['file']['name']:上传文件的名称
- $_FILES['file']['type']:上传文件的类型
- $_FILES['file']['size']:上传文件的大小,以字节为单位
- $_FILES['file']['tmp_name']:存储在服务器的文件的临时副本的名称
上传限制
规定用户只能上传.gif、.gif、.jpeg、.jpg、.png 文件,文件大小必须小于 200 kB:
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"];
}
}
else
{
echo "非法的文件格式";
}
?>
in_array()函数搜索数组中是否存在指定的值
实例:
<?php
$sites= array("Google","Runoob","Taobao","facebook");
if(in_array("Taobao",$sites))
{
echo "找到匹配项!";
}else{
echo "没有找到匹配项!";
?>
explode()函数使用一个字符串分隔另一个字符串,并返回由字符串组成的数组
实例:
<?php
$str = "www.runoob.com";
print_r (explode(".",$str));
//输出
// Array
// (
// [0] => www
// [1] => runoob
// [2] => com
// )
?>
end()函数将内部指针指向数组中的最后一个元素,并输出。
保存被上传的文件
<?php
// 允许上传的图片后缀
$allowedExts = array("gif", "jpeg", "jpg", "png");
$temp = explode(".", $_FILES["file"]["name"]);
echo $_FILES["file"]["size"];
$extension = end($temp); // 获取文件后缀名
if ((($_FILES["file"]["type"] == "image/gif")
|| ($_FILES["file"]["type"] == "image/jpeg")
|| ($_FILES["file"]["type"] == "image/jpg")
|| ($_FILES["file"]["type"] == "image/pjpeg")
|| ($_FILES["file"]["type"] == "image/x-png")
|| ($_FILES["file"]["type"] == "image/png"))
&& ($_FILES["file"]["size"] < 204800) // 小于 200 kb
&& in_array($extension, $allowedExts))
{
if ($_FILES["file"]["error"] > 0)
{
echo "错误:: " . $_FILES["file"]["error"] . "<br>";
}
else
{
echo "上传文件名: " . $_FILES["file"]["name"] . "<br>";
echo "文件类型: " . $_FILES["file"]["type"] . "<br>";
echo "文件大小: " . ($_FILES["file"]["size"] / 1024) . " kB<br>";
echo "文件临时存储的位置: " . $_FILES["file"]["tmp_name"] . "<br>";
// 判断当前目录下的 upload 目录是否存在该文件
// 如果没有 upload 目录,你需要创建它,upload 目录权限为 777
if (file_exists("upload/" . $_FILES["file"]["name"]))
{
echo $_FILES["file"]["name"] . " 文件已经存在。 ";
}
else
{
// 如果 upload 目录不存在该文件则将文件上传到 upload 目录下
move_uploaded_file($_FILES["file"]["tmp_name"], "upload/" . $_FILES["file"]["name"]);
echo "文件存储在: " . "upload/" . $_FILES["file"]["name"];
}
}
}
else
{
echo "非法的文件格式";
}
?>
PHP cookie
cookie常用于识别用户。cookie是一种服务器留在用户计算机上的小文件,每次同一台计算机通过浏览器请求页面时,这台计算机将会发生cookie,通过PHP,能创建并取回cookie的值。
使用setcookie():函数设置cookie
语法:
setcookie(name,value,expire,path,domain);
实例1:创建一个名为"user"的cookie,并为它赋值"test",规定一小时后过期
<?php
setcookie("user","test",time()+3600);
?>
PHP的$_COOKIE变量用于取回cookie的值。
PHP Session
PHP Session变量用于存储关于用户会话(session)的信息,或者更改用户会话的设置。Session变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
Session的工作机制是:为每个访客创建一个唯一的id(UID),并基于这个UID来存储变量。UID储存在cookie中,或者通过URL进行传导。
- 开始PHP Session
在你把用户信息存储到PHP session中之前,首先必须启动会话。使用session_start()函数开启会话 - 存储Session变量
使用$_SESSION变量存储和取回session变量
实例:
<?php
session_start();
// 存储 session 数据
$_SESSION['views']=1;
?>
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<?php
// 检索 session 数据
echo "浏览量:". $_SESSION['views'];
?>
</body>
</html>
使用unset()函数用于释放指定的session变量:
<?php
session_start();
if(isset($_SESSION['views']))
{
unset($_SESSION['views']);
}
//或者通过调用session_destroy()函数彻底销毁sesion
session_destroy();
//session_destroy()将重置session,你将失去已存储的session数据
?>
PHP过滤器用于验证和过滤来自非安全来源的数据,比如用户的输入。
外部数据:
- 来自表单的输入数据
- cookie
- Web service data
- 服务器变量
- 数据库查询结果
过滤变量 - filter_var():通过一个指定的过滤器来过滤单一的变量
- filter_var_array():通过相同的或者不同的过滤器来过滤多个变量
- filter_input:获取一个输入变量,并对她进行过滤
- filter_input_array:获取多个输入变量,并通过相同的或者不同的过滤器对它们进行过滤
实例:使用filter_var()函数验证一个整数:
$int = 123
if(!filter_var($int,FILTER_VALIDTE_INT))
{
echo "不是一个合法的整数";
}
else
{
echo "是一个整数";
}
?>
有两种过滤器:
Validating过滤器:
- 用于验证用户输入
- 严格的格式规则(比如URL或者E-Mail验证)
- 如果成功则返回预期的类型,如果失败则返回FALSE
Sanitizing过滤器: - 用于允许或者禁止字符串中指定的字符
- 无数据格式规则
- 始终返回字符串
选项和标志用于向指定的过滤器添加额外的过滤选项。
实例:
<?php
$var = 300;
$int_options = array(
"options"=>array
(
"min_range"=>0,
"max_range"=>256
)
);
if(!filter_var($var,FILTER_VALIDATE_INT,$int_options))
{
echo "不是一个合法的整数";
}
else
{
echo "是一个合法的整数";
}
?>
验证输入
通过一个"GET"方法传送输入变量(email)
- 检测是否存在"GET"类型的"email"输入变量
- 如果存在输入变量,检测她是否为有效的e-mail地址
<?php
if(!filter_has_var(INPUT_GET,"email"))
{
echo "没有email参数";
}
else{
if(!filter_input(INPUT_GET,"email",FILTER_VALIDATE_EMAIL))
{
echo "不是一个合法的E-Mail";
}
else
{
echo "是一个合法的e-mail";
}
}
?>
实例2:
通过"GET"方法传送的输入变量(url):
- 检测是否存在"GET"类型的"url"输入变量
- 如果存在此输入变量,对其进行净化(删除非法字符),并将其存储在$url变量中
if(!filter_has_var(INPUT_GET,"url"))
{
echo "没有url参数";
}
else
{
$url = filter_input(INPUT_GET,"url",FILTER_SANITIZE_URL);
echo $url;
}
?>
过滤多个输入
通过"GET"方法传送三个变量(name、age、Email)
- 设置一个数组,其中包含了输入变量的名称和用于指定的输入变量的过滤器
- 调用filter_input_array()函数,参数包含GET输入变量以及刚才设置的数组
- 检测$result变量中的"age"和"email"变量是否有非法的输入
$filter = array
(
"name" => array
(
"filter"=>FILTER_SANITIZE_STRING
),
"age" = > array
(
"filter"=>FILTER_VALIDATE_INT,
"options"=>array
(
"min_range"=>1,
"max_range"=>120
)
)
"email"=>FILTER_VALIDATE_EMAIL
);
$result = filter_input_array(INPUT_GET,$filters);
if(!$result['age'])
{
echo "年龄必须在1到120之间。<br>";
}
elseif (!$result["email"])
{
echo "E-Mail不合法<br>";
}
else{
echo "OK!";
}
?>
使用FILTER_CALLBACK过滤器,可以调用自定义的函数,把它作为一个过滤器来使用。
实例:使用自定义函数把所有"_"转换为"."
function converstSpace($string)
{
return str_replace("_",".",$string);
}
$string = "www_test_com";
echo filter_var($string,FILTER_CALLBACK,array("options"=>"converSpace"));
?>
PHP Json
- json_encode:对变量进行JSON编码
- json_decode:对JSON格式的字符串进行解码,转换为PHP变量
// 将PHP数组转换为JSON格式的数据
<?php
$arr =array('a'=>1,'b'=>2,'c'=>3,'d'=>4,'e'=>5);
echo json_encode($arr);
// 输出结果:{"a":1,"b":2,"c":3,"d":4,"e":5}
// 将PHP对象转换为JSON格式数据
class Emp{
public $name = "";
public $hobbies = "";
public $birthdate = "";
}
$e = new Emp();
$e->name = "xiaoxi";
$e->hobbies = "game";
$e->birthdate = date('m/d/Y h:i:s:a'strtotime("29/4/2023 15:27:23"));
echo json_encode($e);
// 输出: {"name":"xiaoxi","hobbies":"game","birthdate":"29\/04\/2023 15:27:23"}
?>
标签:FILES,知识点,重要,name,echo,file,PHP,变量
From: https://www.cnblogs.com/kalixcn/p/17364068.html