SELECT *或其他 FROM 数据表(可以是多个) WHERE 需要满足的条件
SELECT NAME FROM VULN WHERE NAME="ecoloy";
SELECT * FROM VULN WHERE NAME="ecoloy";
首先,我先插入了几条数据。
然后我进行了限制查询,从 vuln
数据表中的 name
字段下筛选出来 NAME="ecoloy"
数据。
第二句话是,从 vuln
数据表中的所有字段下筛选出 NAME="ecoloy"
的数据。
对数据还可以进行 AND
和 OR
限制。
AND
代表两个条件都要满足。
OR
代表满足其中一个条件即可。
SELECT * FROM VULN WHERE NAME="ecoloy" and ID=5;
SELECT * FROM VULN WHERE NAME="ecoloy" OR ID=5;
2、ORDER BY 子句,排序语句:
SELECT *或其他 FROM 数据表(可以是多个) ORDER BY 字段 ASC/DESC;
ASC
是升序排序, DESC
是降序排序。
我们可以使用数字来进行判断列长度,比如:
SELECT * FROM VULN ORDER BY 4;
3、UNION 子句,联合查询
所谓联合查询,就是查询不同的两个表,将要查询的信息合并显示。
联合查询有两个子句:
UNION 子句 :查询后不显示重复数据
UNION ALL 子句 :查询后会显示重复数据
SELECT *或其他 FROM 数据表1 UNION SELECT *或其他 FROM 数据表2;
select name,desname from vuln union select name,password from users;
1、MySQL的注释: #
从这开始到后面, --
从这开始到后面 , /*
这全是注释*/
2、常见的内置函数
database() : 显示当前数据库名称
current_user : 显示当前用户
version() : 显示当前数据库版本
load_file() : 显示一个文件内容
into outfile : 写入文件
学习一下 load_file() 与 into outfile 的使用
PHP(Hypertext Preprocessor ,超文本预处理语言),是一种通用开源脚本语言。主要用于WEB开发领域,其语法吸收了C语言,JAVA和Perl的特点。PHP 是一种创建动态交互性站点的强有力的服务器端脚本语言。
上面这段话来自较官方说法,其实对于PHP来说,就是常用在WEB领域的开源脚本语言,作为中间人的角色处理WEB数据,或是处理请求数据,或是返回数据。比如说,我们常见的登录过程,输入账号密码,点击提交后,我们所请求的数据是先经过PHP来处理,然后再去数据库进行操作查询处理,查询处理过后再返回给PHP,PHP再经过处理后返回到前端页面,即呈现在我们眼前的浏览器页面。简言之,PHP在WEB中充当中间人的角色,它主要处理WEB数据。
其他:在一整套WEB中,要有操作系统,WEB服务器,后端处理语言,以及数据库。操作系统就是我们常见的Windows,Linux,Ubuntu等。WEB服务器常见的是Apache,Tomcat,Windows Server等。后端处理语言,有PHP,JSP,ASP,Python等,数据库有MySQL,Oracle,SQL server等。
用语言简述了PHP的工作流程,加深印象,不妨看看下面这张图:
上面这张图,是我们浏览网页基本工作流程,我将其分为了六个步骤:
第一步:我们上网,浏览页面,通过HTTP协议向Web服务器请求数据。
第二步:我拿的Apache举例,它接收到数据后,转交给PHP来处理这些数据。
第三步:PHP与数据库交互,比如Mysql,通过查询或其他操作访问数据
第四步:数据库将访问操作的数据返回给PHP让它再去处理。
第五步:PHP再去处理这些数据,整理成我们网页能看到的样式,然后返回给Web服务器。
第六步:Web服务器接收到了PHP整理好的数据后,将其打包成HTTP协议返回给我们。
PHP环境安装
1、Windows下安装:
在Windows下安装PHP环境的话,我们首选PHPstudy,将PHP所需环境一键部署,省时省力。关于版本,我们下载最新版本。即 phpStudy v8.0版本从官网下载,一路下一步即可。
官方网址:
https://www.xp.cn/download.html
Linux下安装:
较比于Windows下安装,Linux下安装PHP还需要安装所需的WEB服务器,数据库,想对于麻烦一些。但却可以从搭建中,清晰了解WEB基本架构是怎样的的,对后期学习是有
一定帮助的。
Ubuntu下安装:
https://www.cnblogs.com/xpwi/p/9818751.html
or
bing,百度搜索
注意:在Ubuntu下或是在Centos下,或是其他Linux系统版本下搭建是有区别的。可以根据自己具体需求查阅相关资料。
说明:
现在,我们对PHP有了大致的了解,也搭建完了PHP所需的环境。
那么,我们不妨来个实际例子,对它再进一步的认识。
然后,我们再去学习 PHP基础知识点 。
大家先去这个地方下载我们第一个PHP脚本
https://github.com/Kevil-hui/BestShell
接下来,将脚本复制粘贴到网站根目录中:
我们打开浏览器,输入路径,打开这个脚本:
我们可以看到,这个脚本执行了很多内容,都是一些很敏感的内容,有些朋友肯定已经知道了这个脚本的作用了,以及它们的特有的名称了(有些敏感,大家知道就好)。这就是一个PHP脚本,它所执行的功能,大家可以实际去操作一下,是不是很有趣。
为什么先看个这个例子,为了激发大家的兴趣,看懂看不懂先放一边,后面学习了基础语法,都会懂得。兴趣驱使学习,入门是挺枯燥
注意:
我们在输入路径时,后面端口我设置的为 7089 ,大家可以根据自己需求设置:
注意:
请大家不要使用该脚本当任何Webshell,请勿用于非法行为,本例子目的为了学习了解PHP,请大家遵守网络安全法。
现在进入PHP基础知识点环节,这个部分稍微有些多,都是基本知识点,有其他语言的基础的朋友,大致看一下就会学习很多,语言语法都是如此相似。没有学过其他语言的朋友们,看完这些基础点后,建议大家根据自己能力拓展学习,掌握两三门语言是非常有必要的。
变量使用规则:
1、变量必须以 $ 美元符号开始
2、变量不能使用数字字符开头
3、变量开头可以下划线 _ 开始
4、变量名不能是PHP常用的关键字
5、在PHP中对变量大小写敏感,$a 与 $A 是两个变量
举个例子:
$a = 1;
$b = "7089bAt";
echo $a;
echo '
';
echo $b;
echo '
';
$c = 5;
$d = 6;
$e = $c + $d;
echo $e;
?>
输出结果:
解读:
在上面代码中,我们可以看到使用了 = 等于号进行赋值,是的,几乎在常见的语言中,都是使用等号进行赋值,即把右面的数据’给’右面,这时 $a
不在孤独了,它有了整型 1
的陪伴,而 $b
也有了字符串 7089bAt
的陪伴,还有下面的那些变量。在下面我用了个最最最简单的计算,来让大家了解一些变量最基本的作用。在程序中,可以对不同类型变量,进行不同的操作,下面我们会了解到变量有哪些数据类型。
在进行变量操作时,已声明的变量会被计算机内存分配一块区域存放你所赋的值,即$a
在内存中有一小块区域,其里面存放着 1
这个整型。以后你再去使用变量 $a
时,你知道它是个整型 1
,所以你可以根据你的需求来使用它。当然,这个值是可以根据你的需求变化的,而且$a
这个变量只在本代码段里的值是 1
。
布尔型(boolen)
整型(integer)
浮点型(float)
字符串(string)
两种复合类型:
数组(array)
对象(object)
两种特殊类型:
资源(resource)
Null
详细介绍:
对于下面这四种常用的标量数据类型,大家需要知道它是什么,怎么用即可。
$a = true;
if($a == true){
echo "墨羽
";
}
?>
解读:
布尔类型常在条件语句中使用,具体条件语句使用,下面会说到。我们先解读下上面这
句话什么意思:
首先,将 $a
赋值为 true
,接下来,在条件语句中的条件判断处进行判断,即 $a == true
,(==
两个等于号是判断的意思, = 一个等于号是赋值的意思,不要混淆)。我们已经将 $a
赋值为 true
了,所以说 $a == true
条件是成立的,既然这样,下面就会执行 echo "
这句话。所以根据输出结果看,就是想浏览器输出了墨羽这几个字。墨羽/h1>";
上面是最基本的条件语句,下面还要学习其他条件语句。
是想浏览器输出了墨羽这几个字。
上面是最基本的条件语句,下面还要学习其他条件语句。
https://www.php.net/manual/zh/language.types.integer.php
$a=3.14;
, $b=-0.12;
, $c=70.89;
这些都是浮点型、$a = 'moyv';
$b = "moyv";
<<<str
格式化文本
str;
举个列子:
<<<test
墨羽
我是moyv
是兄弟,就来砍我。
test;
解读:
其中test为自定义的标识符,结束的标识符必须在新的一行开头,并且不要忘记 ; 。
注意:
单引号与双引号定义字符串区别:
在单双引号中包含变量名时,双引号会将其变量的值输出,而单引号只会把它当做普通的字符输出。
在PHP中,有个函数,即 - var_dump(变量名)可以查看数据类型。
具体使用如图:
define(string constant_name, mixed value, case_sensitive=true)
参数(string constant_name):必选参数,常量名称。
参数(mixed value):必选参数,常量的值。
参数(case_sensitive=true):可选参数,指定是否大小写敏感,true为不敏感。
获取常量值
关键字 - constant(),defined()
1、constant(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回正常值,如果失败,则提示错误信息(常量没有被定义)
2、defined(string constant_name)
参数(string constant_name):常量的名称
指定获取某常量,如果成功,返回true,如果失败,返回false
举个列子:
这张图片截图是 认识一个PHP程序 的那个脚本开头,大家来理解一下常量,变量。记
住这个格式,具体情况下再应用,就会更加熟悉了。
备注:
什么是关键字,是程序中保留字,每个字符都有特定的含义,在处理程序时,它只认得这些关键字,也会根据关键字处理相应功能。
=
,是赋值运算符,还有==
,是比较运算符,除了这些还有很多运算符,有不同的作用。算术运算符
字符串运算符
赋值运算符
比较运算符
条件运算符
递增或递减运算符
位运算符
逻辑运算符
下面我简单讲讲几个运算符:
算术运算符:就是常见的 加,减,乘,除,取余
,所使用的的符号为 +,-,*,/,%
字符串运算符:就是对字符串进行基本操作,比如,使用英文句号.
,是将两个或多个字符串连接起来形成一个新的字符串。
比较运算符:就是对变量或表达式的值进行大小,真假的比较,根据其比较返回true
或者false
。
逻辑运算符:
这个在程序中是比较中要的一种运算符。
记住下面条件为真的情况,在后面自己写程序时,熟练操作几遍就会对这个简单的概念有很深刻的理解
&&或and:($a && $b)逻辑与,当两者都为真时,结果为真
||或or:($a || $b)逻辑或,但两者其中一者为真的时候,结果为真
!:逻辑非,(!$a)是个英文的感叹号,当$a为假时,结果为真
xor:逻辑异或,($a xor $b),当$a,$b为一真一假时,结果为真
关于逻辑运算符的使用,我们在下面理解了条件语句后,配合实例加深理解。
更多运算符符号,以及使用方法,还有他们的运算优先级,大家可以看这篇文章:
https://www.runoob.com/php/php-operators.html
表达式
表达式,是PHP语言的基本元素,它是将运算符和操作数连接起来的式子成为表达式,听起来很绕,其实 $a=7089 ,这个赋值操作就是最简单的表达式,还有上面逻辑运算符两者比较,也是表达式。
关于表达式,多搭配用于条件语句,循环语句。具体实例,看下面。
举个例子:
$a=1;
$b=1;
if($a == $b){
echo "haha,我们两是一对";
}
?>
这段if语句,条件单一,运行结果单一,意思为:如果两个变量相等,就输出下面那句
话,使用到了 == 两个等号,也就是比较运算符。
举个例子:
$a=1;
$b=2;
if($a == $b){
echo "haha,我们两是一对";
}
else{
echo "可惜我们不是一对";
}
?>
这段 if…else 语句理解起来也非常容易,针对一个条件进行判断,成立与否返回其
中一个结果。要么他们两是一对,要么不是一对。
$chengji = 99;
if($chengji >=90){
echo "你真棒,";
}
elseif($chengji >=80){
echo "继续努力";
}
elseif($chengji >=70){
echo "多多努力";
}
elseif($chengji >=60){
echo "加油鸭!";
}
else{
echo "小明同学,你终于不及格了!";
}
?>
这段代码,大家运行以下,修改不同数值,来观察一下其中不同的结果。
举个例子:
$ta = "xiaoli";
switch($ta){
case "xiaoli":
echo "小li人好";break;
case "xiaozhang":
echo "小zhang个高!";break;
case "xiaowang":
echo "小wang白净";break;
case "xiaozhao":
echo "小zhao腿长";break;
default:
echo $ta."同志是谁?";break;
}
?>
这段代码,是使用 switch…case 语句,先设置一个变量其值如上,然后使用该和case 下设定的值比较,如果比较条件成功,就会执行响应的语句,如果设置了一个case没有的值,就会执行 default 下的语句。
在这段代码中,出现了个 break ,它也是PHP中的关键字,它的意思是跳出这次执行,跳出switch语句。如果不使用 break 的话,程序自动执行完剩下的代码,然后退出。大家可以将 break 删除,自行调试,观察结果。
while
循环 , do...while
循环 , for
循环 , foreach
循环 。while(条件){
要执行的代码;
}
举个例子:
$a = 0;
while($a <= 10){
echo "第".$a."次循环的数字是:".$a."
";
$a++;
}
?>
运行结果:
解读:
大家看运行结果,可以看到代码运行了十一次。首先我给变量 $a
的值设置为了0
,接下来就是 while
循环 部分,它设定的条件为 $a <= 10
,就是变量这个数字 小于或等于10
的时候停止循环,既然一开始设定的变量为0
,肯定小于10
,那就就执行下面代码。大家看到里面有个 $a++
,这段简单的表达式,它的意思是,对变量 $a
进行 自加1
,拓展开来就是 $a=$a+1
。这样的话,变量一开始为0
,进入一次后加了1
后就变为1
,然后继续进行第二次判断,还是小于10
,那就就继续执行下面代码,直到变量$a
自加到10
的时候与条件相等,此时就会终止循环。
for (初始值; 条件; 增量)
{
要执行的代码;
}
举个例子:
for($a=0;$a<=9;$a++){
echo "第".$a."次循环的数字是:".$a."
";
}
?>
运行结果:
解读:
大家可能发现了,这个例子和 while循环 那个一样,只不过换了 for循环 。我们可以对比一下发现,其实在这两个循环中都有三个条件,初始值,循环条件,以及变量的递增或递减方式。 for循环 只不过将这三个条件集合在了一个地方编写。但在实际应用
时还会多少有些出入,根据实际情况再决定用哪个。
for循环 ,还可以嵌套循环,在第一层循环下,再加入一层循环。大家可以自己试试写个9*9乘法口诀。
格式:
foreach ($array as $value)
{
要执行代码;
}
举个例子:
$num=array("1234","12","34");
foreach ($num as $value)
{
echo $value . "
";
}
?>
大家可以运行这段代码,观察一下结果。
关于数组,是数据类型中的复合类型。它能够在一个变量中存储一个或多个值,并且能通过索引号访问对应的值。要注意的是,数组索引号是从零(0)开始。零(0)就是第一位。
三种数组类型:
索引数组 - 带有数字索引的数组
关联数组 - 带有指定键的数组
多维数组 - 包含一个或多个数组的数组
索引数组:
要注意的是,索引数组索引号是从零(0)开始。零(0)就是第一位。
$a = array("1","2","3");
关联数组:
$num=array("one"=>"1","two"=>"2","three"=>"3");
在很多过滤一些sql注入语句,xss等都会将要过滤的语句写进数组中,便于管理。这么多过滤语句总不能都一个个声明变量吧。
定义函数:
关键字:function
格式:
function 函数名(参数1,参数2,...参数n){
函数体,具体代码
[return 参数];
}
举个例子:
#一个简单的计算:
<?php
function jisuan($canshu1,$canshu2){
$result = $canshu1 + $canshu2;
return $result;
}
echo jisuan(70,89);
?>
运行结果:
解读:
这是一个非常简单函数,计算两个数之和,在这个代码中有几个地方需要注意:
jisuan(70,80)
:是函数的利用方式。
$canshu1,$canshu2
:这是两个形式参数,可以理解为一个记号,在利用函数时,要传入两个参数才能计算, $canshu1
和 $canshu2
分别对应着,70和89(这两个参数又是参数是实际数值,它是实际参数),然后进入函数体中,对这两个数字进行计算。
return $result;
:是将计算的结果的值返回,并结束函数的运行。
形式参数
:如果函数需要传入参数,需要用到形式参数,也可以理解为记号,标志。
实际参数
:在向函数传入实际参数时,所传入的参数值是实际参数。
函数也可以是没有参数的,也可以不返回值。对于函数这方面,在理解了基础知识点后,要多进行代码实践,多敲代码,多看代码,才能运用更熟练。
在函数之后,还有一个比较抽象的概念 - 面向对象。
关于这个点,大家可以了解和实战了基础代码后,进行学习,这个概念比较抽象,只有多练习相应代码,才能理解更加透彻。
多敲,多练,欲速则不达。
moyv
是个字符串,我想将对这个字符翻转过来,可以用到特定的函数 strrev() 来操作。php字符串处理函数
addcslashes — 为字符串里面的部分字符添加反斜线转义字符
addslashes — 用指定的方式对字符串里面的字符进行转义
bin2hex — 将二进制数据转换成十六进制表示
chop — rtrim() 的别名函数
chr — 返回一个字符的ASCII码
chunk_split — 按一定的字符长度将字符串分割成小块
convert_cyr_string — 将斯拉夫语字符转换为别的字符
convert_uudecode — 解密一个字符串
convert_uuencode — 加密一个字符串
count_chars — 返回一个字符串里面的字符使用信息
crc32 — 计算一个字符串的crc32多项式
crypt — 单向散列加密函数
echo — 用以显示一些内容
explode — 将一个字符串用分割符转变为一数组形式
fprintf — 按照要求对数据进行返回,并直接写入文档流
get_html_translation_table — 返回可以转换的HTML实体
hebrev — 将Hebrew编码的字符串转换为可视的文本
hebrevc — 将Hebrew编码的字符串转换为可视的文本
html_entity_decode — htmlentities ()函数的反函数,将HTML实体转换为字符
htmlentities — 将字符串中一些字符转换为HTML实体
htmlspecialchars_decode —htmlspecialchars()函数的反函数,将HTML实体转换为字符
htmlspecialchars — 将字符串中一些字符转换为HTML实体
implode — 将数组用特定的分割符转变为字符串
join — 将数组转变为字符串,implode()函数的别名
levenshtein — 计算两个词的差别大小
localeconv — 获取数字相关的格式定义
ltrim — 去除字符串左侧的空白或者指定的字符
md5_file — 将一个文件进行MD5算法加密
md5 — 将一个字符串进行MD5算法加密
metaphone — 判断一个字符串的发音规则
money_format — 按照参数对数字进行格式化的输出
nl_langinfo — 查询语言和本地信息
nl2br — 将字符串中的换行符“\n”替换成“<br/>”
number_format — 按照参数对数字进行格式化的输出
ord — 将一个ASCII码转换为一个字符
parse_str — 把一定格式的字符串转变为变量和值
print — 用以输出一个单独的值
printf — 按照要求对数据进行显示
quoted_printable_decode — 将一个字符串加密为一个8位的二进制字符串
quotemeta — 对若干个特定字符进行转义
rtrim — 去除字符串右侧的空白或者指定的字符
setlocale — 设置关于数字,日期等等的本地格式
sha1_file — 将一个文件进行SHA1算法加密
sha1 — 将一个字符串进行SHA1算法加密
similar_text — 比较两个字符串,返回系统认为的相似字符个数
soundex — 判断一个字符串的发音规则
sprintf — 按照要求对数据进行返回,但是不输出
sscanf — 可以对字符串进行格式化
str_ireplace — 像str_replace()函数一样匹配和替换字符串,但是不区分大小写
str_pad — 对字符串进行两侧的补白
str_repeat — 对字符串进行重复组合
str_replace — 匹配和替换字符串
str_rot13 — 将字符串进行ROT13加密处理
str_shuffle — 对一个字符串里面的字符进行随机排序
str_split — 将一个字符串按照字符间距分割为一个数组
str_word_count — 获取字符串里面的英文单词信息
strcasecmp — 对字符串进行大小比较,不区分大小写
strchr — 通过比较返回一个字符串的部分strstr()函数的别名
strcmp — 对字符串进行大小比较
strcoll – 根据本地设置对字符串进行大小比较
strcspn — 返回字符连续非匹配长度的值
strip_tags — 去除一个字符串里面的HTML和PHP代码
stripcslashes — 反转义addcslashes()函数转义处理过的字符串
stripos — 查找并返回首个匹配项的位置,匹配不区分大小写
stripslashes — 反转义addslashes()函数转义处理过的字符串
stristr — 通过比较返回一个字符串的部分,比较时不区分大小写
strlen — 获取一个字符串的编码长度
strnatcasecmp — 使用自然排序法对字符串进行大小比较,不区分大小写
strnatcmp — 使用自然排序法对字符串进行大小比较
strncasecmp — 对字符串的前N个字符进行大小比较,不区分大小写
strncmp — 对字符串的前N个字符进行大小比较
strpbrk — 通过比较返回一个字符串的部分
strpos — 查找并返回首个匹配项的位置
strrchr — 通过从后往前比较返回一个字符串的部分
strrev — 将字符串里面的所有字母反向排列
strripos — 从后往前查找并返回首个匹配项的位置,匹配不区分大小写
strrpos – 从后往前查找并返回首个匹配项的位置
strspn — 匹配并返回字符连续出现长度的值
strstr — 通过比较返回一个字符串的部分
strtok — 用指定的若干个字符来分割字符串
strtolower — 将字符串转变为小写
strtoupper –将字符串转变为大写
strtr — 对字符串比较替换
substr_compare — 对字符串进行截取后的比较
substr_count — 计算字符串中某字符段的出现次数
substr_replace — 对字符串中的部分字符进行替换
substr — 对字符串进行截取
trim — 去除字符串两边的空白或者指定的字符
ucfirst — 将所给字符串的第一个字母转换为大写
ucwords — 将所给字符串的每一个英文单词的第一个字母变成大写
vfprintf — 按照要求对数据进行返回,并直接写入文档流
vprintf — 按照要求对数据进行显示
vsprintf — 按照要求对数据进行返回,但是不输出
wordwrap — 按照一定的字符长度分割字符串
include语句
require语句
include_once语句
require_once语句
1、PHP语言的扩展名为 .php
2、PHP程序中可以包含 html,JavaScript代码
3、脚本范围在 <?php 这个范围内 ?>
4、PHP注释有://,#,/* ... */
5、在编写PHP代码时,每个语句结束时,都不要忘记使用英文分号(;),即为指令分隔符
在上面第二节,用了一张图,讲解了WEB基本工作流程,现在,我们实际练习列子来加深对这方面的理解。
在这之前,我们先回忆一些HTTP请求,常用到 GET 与 POST 这两个请求,我们也实际操作一个例子来了解PHP是如何接收这两个请求的数据,并处理的。
PHP是根据接收通过HTTP协议请求来的数据做处理的,在PHP中也有写好的预定义变量来处理响应的请求:
$_GET:获取通过GET方式提交的数据
$_POST:获取通过POST方式提交的数据
$_COOKIE:获取Cookie数据,这些数据多数是由setcookie()函数设置的值
$_SESSION:获取包含与所有会话变量有关的信息
$_FILES:处理文件上传
下面通过几个小例子来了解一下。
1、GET方式表单提交并接收示例
既然是GET方式提交表单,那么我们先用HTML写一个简单的表单页面:
<html>
<head>
<meta charset="utf-8" />
<title>GET请求例子</title>
</head>
<body>
<form method="GET" action="get.php">
名字:<input type="text" name="name"><br>
年龄:<input type="text" name="age"><br>
<input type="submit">
</form>
</body>
</html>
将其保存为.html
文件。这是一个很简单便于理解的form表单提交数据的例子,method
是提交方式,我们使用 GET
方式提交,所以设置为 GET
, action
是指用哪个PHP脚本处理我们表单提交的数据,在这个例子中,我将其设为 get.php
。再下面是 input
的设置,将其设为 text
文字域,分别将名字和年龄设置的 name
设置为了 name
和 age
,这两个是让 $_GET
明确接收哪个数据,具体如下。
下面看看 get.php
是如何处理表单数据的:
$name = $_GET["name"];
$age = $_GET["age"];
echo $_GET["name"]."
";
echo $_GET["age"]."
";
echo "恭喜".$name."大帅哥/大美女"."今年".$age."岁了";
?>
我们看到,我们使用了$_GET
来接收数据, $_GET["age"]
指的是接收年龄这个文字域的数据,这个 age
就是html文件中年龄文字域中 name 设置的属性,即name="age"
。
我们看看运行结果:
2、POST方式表单提交并接收示例
大家不妨将上面代码改成POST请求方式并接受,只需简单修改一些地方即可。
然后运行观察结果,大家可以看看两个URL处有什么不同。
对于GET或是POST,我给出的是个简单的例子,便于理解。但是在实际程序中并没有那么简单,比如说你提交的数据是否为空,或者与数据库交互时是否有敏感字符。当然,PHP中也有相应的函数可以处理这些数据,这些数据传过来都是字符串,我们也可以用字符串一些函数来处理等等。
更多操作,还是那句话,自己多找例子,多学习,多敲打代码。
3、实现文件上传的示例
实现文件上传,也是一个比较重要的知识点,他可以帮助我们理解后期文件上传漏洞。
实现文件上传的预定义变量是 $_FILES 。
在PHP中的 php.ini 文件中有些参数可以对上传文件进行控制:
在 php.ini 中定位到File Uploads处:
file_uploads:如果该值设置为On,代表服务器支持文件上传,Off为不支持,默认为On。
upload_tmp_dir:可以设置上传文件的临时目录,上传后,先放在临时目录中,多数使用系统默认目录。
upload_max_filesize:服务器允许上传文件最大的值,MB为单位。默认为2MB。
php.ini文件修改后,需要重启服务器。
上面是对服务器中一些参数的了解,
下面是 $_FILES 预定义变量中参数的含义:
$_FILES["filename"]["name"]:上传文件的名字
$_FILES["filename"]["size"]:上传文件的大小,单位为字节
$_FILES["filename"]["type"]:上传文件的MIME类型
$_FILES["filename"]["tmp_name"]:上传文件临时目录的
$_FILES["filename"]["error"]:上传文件的结果,如果返回0,则说明文件上传成功
现在,我们编写一个实际例子,来加深理解。
首先,编写html页面:
<html>
<head>
<meta charset="utf-8" />
<title>文件上传例子</title>
</head>
<body>
<form action="uploadfile.php" method="POST" enctype="multipart/formdata">
上传文件:<br>
<input type="file" name="file" id="file"><br>
<input type="submit" name="submit" value="提交文件">
</form>
</body>
</html
在这,我们要注意的是,form表单中的 enctype 属性,它规定了form表单数据在发送到服务器时候的编码方式, multipart/form-data ,是指定传输数据为二进制数据,例如图片、mp3、文件。然后是下面上传文件域的设置,input下的 type 属性设置为 file 即代表上传文件域。
然后是 uploadfile.php 代码的编写:
if ($_FILES["file"]["error"] > 0)
{
echo "错误: " . $_FILES["file"]["error"] . "
";
}
else
{
echo "文件是: " . $_FILES["file"]["name"] . "
";
echo "MIME类型是: " . $_FILES["file"]["type"] . "
";
echo "大小是: " . $_FILES["file"]["size"] . "
";
echo "存储在: " . $_FILES["file"]["tmp_name"];
}
?>
在这段代码中用了简单的条件判断,里面的参数也都在上面讲到了,如果成功上传,就会显示上传文件的一些信息。
运行结果:
现在,我们继续学习PHP与MySql交互。
我们常将数据存储在数据库中,在访问网页时通过PHP响应函数调用数据库中存储的数据,然后返回到前端界面。这个流程在最上面的那张图中也将到了。
但PHP具体如何操作MySQL呢?
PHP要想操作MySQL需要在 php.ini 中设置一些参数,打开对应数据库扩展程序:
具体介绍
然后打开对应扩展:
我们使用 mysqli
扩展,它与 mysql 扩展用法一样,基本相似,但是 mysqli
的函数名称是以 mysqli
开始的。
他们两者当然也有区别,但对初学来说影响不大。
还有一个是 PDO ,它可以应用在12中不同的数据库中,而 mysqli 只能应用于mysql 中。
mysqli有一系列函数集可以让我们操作mysql数据库。
PHP与MySQL交互基本流程
PHP与MySQL交互有这五个步骤对应的函数:
1、连接MySQL数据库
mysqli_connect("MySQL服务器地址","用户名","密码","连接数据库名称(可选)","MySQL服务器使用的端口(默认3306)")
2、选择MySQL数据库
mysqli_select_db("连接表示(必选参数)","数据库名称(必选参数)")当然在连接数据库时,也可以同时选择数据库名称
3、执行SQL语句
mysqli_query("连接标识(必选参数)","查询语句(必选参数)")
4、获取查询结果
mysqli_fetch_array():将结果集返回数组中。
mysqli_fetch_object():从结果集中获取一行作为对象
mysqli_fetch_row():从结果集中获取一行作为枚举数组
mysqli_fetch_assoc():从结果集中获取一行作为关联数组
mysqli_num_rows():获取查询结果集中的记录数
5、释放内存,关闭连接
mysqli_free_result(): 释放结果内存。
mysqli_close():关闭先前打开的数据库连接。
PHP 5 MySQLi 函数大全以及具体用法:
https://www.runoob.com/php/php-ref-mysqli.html
连接数据库并选择数据库例子:
$host = "127.0.0.1";
$user = "root";
$pwd = "123456 ";
$connID = mysqli_connect($host,$user,$pwd);
$select_db = mysqli_select_db($connID,"information_schema");
if($connID){
echo "";
}
else{
echo "";
}
?>
大家运行一下,修改不同参数,来观察一下连接结果。
获取结果例子:
https://www.runoob.com/php/php-mysql-select.html
现在,大家对PHP操作MySQL有了基本的了解,毕竟他获取结果方式有些多,大家可以根据我给的例子多操作一下,多了解一下。例子有很多,多练习,直到你真正的了解了这个知识点,熟练应用这个知识点为止。
本篇PHP基础教程,讲了常见基础知识点,非常实用。但是,一门语言不是花个几分钟看一篇文章就能明白的,要多动手实践。本篇基础教程,给出了几个实例,要自己动手操作。另外,本篇教程,省略了一些其他的细枝末节,毕竟一门语言从0到1,需要自己花大量时间打磨。
但这篇文章,从大的方面可以对这个语言有个极大的了解,从小的方面又可以学习一些基础知识点。
但还缺乏你自己的练习,对Web安全和CTF来说,一定要先掌握一门语言,PHP好学易懂,然后要学python,开发属于自己的小工具。
在了解,学习过一门语言之后,对于其他语言学习也是有极大帮助的。