您现在的位置是:首页 > 技术教程 正文

Web后端语言基础——PHP+SQL+Mysql数据库

admin 阅读: 2024-03-17
后台-插件-广告管理-内容页头部广告(手机)

PHP

PHP 是什么?

  • PHP(全称:PHP:Hypertext Preprocessor,即"PHP:超文本预处理器")是一种通用开源脚本语言。
  • PHP 脚本在服务器上执行。
  • PHP 可免费下载使用。

PHP 文件

  • PHP 文件可包含文本、HTML、JavaScript代码和 PHP 代码
  • PHP 代码在服务器上执行,结果以纯 HTML 形式返回给浏览器
  • PHP 文件的默认文件扩展名是 .php。

PHP 能做什么?

  • PHP 可以生成动态页面内容
  • PHP 可以创建、打开、读取、写入、关闭服务器上的文件
  • PHP 可以收集表单数据
  • PHP 可以发送和接收 cookies
  • PHP 可以添加、删除、修改您的数据库中的数据
  • PHP 可以限制用户访问您的网站上的一些页面
  • PHP 可以加密数据

通过 PHP,您不再限于输出 HTML。您可以输出图像、PDF 文件,甚至 Flash 电影。您还可以输出任意的文本,比如 XHTML 和 XML。


基本的 PHP 语法

PHP 脚本可以放在文档中的任何位置。

PHP 脚本以 <?php 开始,以 ?> 结束:

PHP 中的每个代码行都必须以分号结束。分号是一种分隔符,用于把指令集区分开来。

通过 PHP,有两种在浏览器输出文本的基础指令:echo 和 print

PHP echo 和 print 语句

echo 和 print 区别:

  • echo - 可以输出一个或多个字符串

echo 是一个语言结构,使用的时候可以不用加括号,也可以加上括号: echo 或 echo()。

  • print - 只允许输出一个字符串,返回值总为 1

print 同样是一个语言结构,可以使用括号,也可以不使用括号: print 或 print()。

提示:echo 输出的速度比 print 快, echo 没有返回值,print有返回值1。

注释

//单行注释   /**/多行注释


PHP 变量

与代数类似,可以给 PHP 变量赋予某个值(x=5)或者表达式(z=x+y)。

变量可以是很短的名称(如 x 和 y)或者更具描述性的名称(如 age、carname、totalvolume)。

PHP 变量规则:

  • 变量以 $ 符号开始,后面跟着变量的名称
  • 变量名必须以字母或者下划线字符开始
  • 变量名只能包含字母、数字以及下划线(A-z、0-9 和 _ )
  • 变量名不能包含空格
  • 变量名是区分大小写的($y 和 $Y 是两个不同的变量)

 PHP 语句和 PHP 变量都是区分大小写的。

创建(声明)PHP 变量

PHP 没有声明变量的命令。

变量在第一次赋值给它的时候被创建

  1. <?php
  2. $txt="Hello world!";
  3. $x=5;
  4. $y=10.5;
  5. ?>

PHP 变量作用域

变量的作用域是脚本中变量可被引用/使用的部分。

PHP 有四种不同的变量作用域:

  • local
  • global
  • static
  • parameter

局部和全局作用域

在所有函数外部定义的变量,拥有全局作用域。除了函数外,全局变量可以被脚本中的任何部分访问,要在一个函数中访问一个全局变量,需要使用 global 关键字。

PHP global 关键字

global 关键字用于函数内访问全局变量。

在函数内调用函数外定义的全局变量,我们需要在函数中的变量前加上 global 关键字:

  1. <?php
  2. $x=5;
  3. $y=10;
  4. function myTest()
  5. {
  6. global $x,$y;
  7. $y=$x+$y;
  8. }
  9. myTest();
  10. echo $y; // 输出 15
  11. ?>

PHP 将所有全局变量存储在一个名为 $GLOBALS[index] 的数组中。 index 保存变量的名称。这个数组可以在函数内部访问,也可以直接用来更新全局变量。

也可以写成:

  1. <?php
  2. $x=5;
  3. $y=10;
  4. function myTest()
  5. {
  6. $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
  7. }
  8. myTest();
  9. echo $y;
  10. ?>

Static 作用域

当一个函数完成时,它的所有变量通常都会被删除。然而,有时候您希望某个局部变量不要被删除。

要做到这一点,请在您第一次声明变量时使用 static 关键字:

  1. <?php
  2. function myTest()
  3. {
  4. static $x=0;
  5. echo $x;
  6. $x++;
  7. echo PHP_EOL; // 换行符
  8. }
  9. myTest();
  10. myTest();
  11. myTest();
  12. ?>

然后,每次调用该函数时,该变量将会保留着函数前一次被调用时的值。

注释:该变量仍然是函数的局部变量。

PHP EOF(heredoc) 使用说明

PHP EOF(heredoc)是一种在命令行shell(如sh、csh、ksh、bash、PowerShell和zsh)和程序语言(像Perl、PHP、Python和Ruby)里定义一个字符串的方法。

使用概述:

  • 1. 必须后接分号,否则编译通不过。
  • 2. EOF 可以用任意其它字符代替,只需保证结束标识与开始标识一致。
  • 3. 结束标识必须顶格独自占一行(即必须从行首开始,前后不能衔接任何空白和字符)。
  • 4. 开始标识可以不带引号或带单双引号,不带引号与带双引号效果一致,解释内嵌的变量和转义符号,带单引号则不解释内嵌的变量和转义符号。
  • 5. 当内容需要内嵌引号(单引号或双引号)时,不需要加转义符,本身对单双引号转义,此处相当与q和qq的用法。
  1. <?php
  2. echo <<<EOF
  3.         <h1>我的第一个标题</h1>
  4.         <p>我的第一个段落。</p>
  5. EOF;
  6. // 结束需要独立一行且前后不能空格
  7. ?>

注意:

1.以 <<

2.开始标记和结束标记相同,比如常用大写的 EOT、EOD、EOF 来表示,但是不只限于那几个(也可以用:JSON、HTML等),只要保证开始标记和结束标记不在正文中出现即可。

3.位于开始标记和结束标记之间的变量可以被正常解析,但是函数则不可以。在 heredoc 中,变量不需要用连接符 . 或 , 来拼接,如下:

  1. <?php
  2. $name="runoob";
  3. $a= <<
  4.         "abc"$name
  5.         "123"
  6. EOF;
  7. // 结束需要独立一行且前后不能空格
  8. echo $a;
  9. ?>

PHP 类型比较

虽然 PHP 是弱类型语言,但也需要明白变量类型及它们的意义,因为我们经常需要对 PHP 变量进行比较,包含松散和严格比较。

  • 松散比较:使用两个等号 == 比较,只比较值,不比较类型。
  • 严格比较:用三个等号 === 比较,除了比较值,也比较类型。

例如,"42" 是一个字符串而 42 是一个整数。FALSE 是一个布尔值而 "FALSE" 是一个字符串。

  1. <?php
  2. if(42 == "42") {
  3. echo '1、值相等';
  4. }
  5. echo PHP_EOL; // 换行符
  6. if(42 === "42") {
  7. echo '2、类型相等';
  8. } else {
  9. echo '3、类型不相等';
  10. }
  11. ?>
  1. 1、值相等
  2. 3、类型不相等

PHP 常量

常量是一个简单值的标识符。该值在脚本中不能改变。

一个常量由英文字母、下划线、和数字组成,但数字不能作为首字母出现。 (常量名不需要加 $ 修饰符)。

设置常量,使用 define() 函数,函数语法如下:

bool define ( string $name , mixed $value [, bool $case_insensitive = false ] ) 

该函数有三个参数:

  • name:必选参数,常量名称,即标志符。

  • value:必选参数,常量的值。

  • case_insensitive :可选参数,如果设置为 TRUE,该常量则大小写不敏感,默认是大小写敏感的。

    注意:自 PHP 7.3.0 开始,定义不区分大小写的常量已被弃用。从 PHP 8.0.0 开始,只有 false 是可接受的值,传递 true 将产生一个警告。

常量是全局的

常量在定义后,默认是全局变量,可以在整个运行的脚本的任何地方使用

 字符串

PHP 并置运算符

在 PHP 中,只有一个字符串运算符

并置运算符 (.) 用于把两个字符串值连接起来。

下面的实例演示了如何将两个字符串变量连接在一起:

  1. <?php
  2. $txt1="Hello world!";
  3. $txt2="What a nice day!";
  4. echo $txt1 " " . $txt2;
  5. ?>

上面的代码将输出:Hello world! What a nice day!

提示:在上面的代码中,我们已经使用了两次并置运算符。这是由于我们需要在两个字符串之间插入一个空格。

PHP strlen() 函数

有时知道字符串值的长度是很有用的。

strlen() 函数返回字符串的长度(字节数)。

下面的实例返回字符串 "Hello world!" 的长度:

  1. <?php
  2. echo strlen("Hello world!");
  3. ?>

PHP strpos() 函数

strpos() 函数用于在字符串内查找一个字符或一段指定的文本。

如果在字符串中找到匹配,该函数会返回第一个匹配的字符位置。如果未找到匹配,则返回 FALSE。

下面的实例在字符串 "Hello world!" 中查找文本 "world":

  1. <?php
  2. echo strpos("Hello world!","world");
  3. ?>

上面的代码将输出:6

PHP 运算符(仅补充)

PHP 算术运算符

PHP 赋值运算符

PHP 比较运算符

PHP 逻辑运算符 

 数组运算符

 

三元运算符

另一个条件运算符是"?:"(或三元)运算符 。

语法格式

(expr1) ? (expr2) : (expr3)

组合比较符(PHP7+)

PHP7+ 支持组合比较符(combined comparison operator)也称之为太空船操作符,符号为 <=>。组合比较运算符可以轻松实现两个变量的比较,当然不仅限于数值类数据的比较。

语法格式如下:

$c = $a <=> $b;

解析如下:

  • 如果 $a > $b, 则 $c 的值为 1
  • 如果 $a == $b, 则 $c 的值为 0
  • 如果 $a < $b, 则 $c 的值为 -1

 

PHP 条件语句

当您编写代码时,您常常需要为不同的判断执行不同的动作。您可以在代码中使用条件语句来完成此任务。

在 PHP 中,提供了下列条件语句:

  • if 语句 - 在条件成立时执行代码
  • if...else 语句 - 在条件成立时执行一块代码,条件不成立时执行另一块代码
  • if...elseif....else 语句 - 在若干条件之一成立时执行一个代码块
  • switch 语句 - 在若干条件之一成立时执行一个代码块
  1. <?php
  2. switch (expression) {
  3. case value1:
  4. // 代码块1
  5. break;
  6. case value2:
  7. // 代码块2
  8. break;
  9. // 更多的 case 语句
  10. default:
  11. // 如果没有匹配的值
  12. }
  13. ?>

PHP 数组

在 PHP 中创建数组

在 PHP 中,array() 函数用于创建数组:

array();

在 PHP 中,有三种类型的数组:

  • 数值数组 - 带有数字 ID 键的数组
  • 关联数组 - 带有指定的键的数组,每个键关联一个值
  • 多维数组 - 包含一个或多个数组的数组

PHP 数值数组

这里有两种创建数值数组的方法:

自动分配 ID 键(ID 键总是从 0 开始):

$cars=array("Volvo","BMW","Toyota");

人工分配 ID 键:

$cars[0]="Volvo";
$cars[1]="BMW";
$cars[2]="Toyota";

获取数组的长度 - count() 函数

count() 函数用于返回数组的长度(元素的数量):

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. echo count($cars);
  4. ?>

遍历数值数组

遍历并打印数值数组中的所有值,您可以使用 for 循环,如下所示:

  1. <?php
  2. $cars=array("Volvo","BMW","Toyota");
  3. $arrlength=count($cars);
  4. for($x=0;$x<$arrlength;$x++)
  5. {
  6. echo $cars[$x];
  7. echo "
    "
    ;
  8. }
  9. ?>

PHP 关联数组

关联数组是使用您分配给数组的指定的键的数组。

这里有两种创建关联数组的方法:

$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");

or:

$age['Peter']="35";
$age['Ben']="37";
$age['Joe']="43";

遍历关联数组

遍历并打印关联数组中的所有值,您可以使用 foreach 循环:

  1. <?php
  2. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  3. foreach($age as $x=>$x_value)
  4. {
  5. echo "Key=" . $x . ", Value=" . $x_value;
  6. echo "
    "
    ;
  7. }
  8. ?>

PHP - 数组排序函数

PHP 数组排序函数:

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列
asort() - 根据数组的值,对数组进行升序排列
  1. <?php
  2. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  3. asort($age);?>

ksort() - 根据数组的键,对数组进行升序排列

下面的实例根据数组的键,对关联数组进行升序排列:

  1. <?php
  2. $age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
  3. ksort($age);?>

 

PHP 超级全局变量

PHP中预定义了几个超级全局变量(superglobals) ,这意味着它们在一个脚本的全部作用域中都可用。 你不需要特别说明,就可以在函数及类中使用。

PHP 超级全局变量列表:

  • $GLOBALS
  • $_SERVER
  • $_REQUEST
  • $_POST
  • $_GET
  • $_FILES
  • $_ENV
  • $_COOKIE
  • $_SESSION

本章节我们将讲解几个常用的超级全局变量,其余变量我们在接下来几个章节会介绍到。

PHP 循环

在您编写代码时,您经常需要让相同的代码块一次又一次地重复运行。我们可以在代码中使用循环语句来完成这个任务。

在 PHP 中,提供了下列循环语句:

  • while - 只要指定的条件成立,则循环执行代码块
  • do...while - 首先执行一次代码块,然后在指定的条件成立时重复这个循环
  • for - 循环执行代码块指定的次数
  • foreach - 根据数组中每个元素来循环代码块

 

foreach 循环

foreach 循环用于遍历数组。

语法
  1. foreach ($array as $value)
  2. {
  3. 要执行代码;
  4. }

每进行一次循环,当前数组元素的值就会被赋值给 $value 变量(数组指针会逐一地移动),在进行下一次循环时,您将看到数组中的下一个值。

  1. foreach ($array as $key => $value)
  2. {
  3. 要执行代码;
  4. }

每一次循环,当前数组元素的键与值就都会被赋值给 $key 和 $value 变量(数字指针会逐一地移动),在进行下一次循环时,你将看到数组中的下一个键与值。

实例:

  1. <?php
  2. $x=array("Google","Runoob","Taobao");
  3. foreach ($x as $value)
  4. {
  5. echo $value . PHP_EOL;
  6. }
  7. ?>

 PHP 函数

创建 PHP 函数

函数是通过调用函数来执行的。

语法
  1. <?php
  2. function functionName()
  3. {
  4. // 要执行的代码
  5. }
  6. ?>

PHP 函数准则:

  • 函数的名称应该提示出它的功能
  • 函数名称以字母或下划线开头(不能以数字开头)

PHP 变量函数

变量函数是指在 PHP 中,将一个变量作为函数名来调用的函数。

变量函数可以让我们在运行时动态地决定调用哪个函数。

  1. <?php
  2. function foo() {
  3.     echo "In foo()
    \n"
    ;
  4. }
  5. function bar($arg = '')
  6. {
  7.     echo "In bar(); argument was '$arg'.
    \n"
    ;
  8. }
  9. // 使用 echo 的包装函数
  10. function echoit($string)
  11. {
  12.     echo $string;
  13. }
  14. $func = 'foo';
  15. $func();        // 调用 foo()
  16. $func = 'bar';
  17. $func('test');  // 调用 bar()
  18. $func = 'echoit';
  19. $func('test');  // 调用 echoit()
  20. ?>

也可以用变量函数的语法来调用一个对象的方法。

  1. <?php
  2. class Foo
  3. {
  4.     function Variable()
  5.     {
  6.         $name = 'Bar';
  7.         $this->$name(); // 调用 Bar() 方法
  8.     }
  9.     function Bar()
  10.     {
  11.         echo "This is Bar";
  12.     }
  13. }
  14. $foo = new Foo();
  15. $funcname = "Variable";
  16. $foo->$funcname();  // 调用 $foo->Variable()
  17. ?>

面向对象(与Java相似)

面向对象编程的三个主要特性:

  • 封装(Encapsulation):指将对象的属性和方法封装在一起,使得外部无法直接访问和修改对象的内部状态。通过使用访问控制修饰符(public、private、protected)来限制属性和方法的访问权限,从而实现封装。

  • 继承(Inheritance):指可以创建一个新的类,该类继承了父类的属性和方法,并且可以添加自己的属性和方法。通过继承,可以避免重复编写相似的代码,并且可以实现代码的重用。

  • 多态(Polymorphism):指可以使用一个父类类型的变量来引用不同子类类型的对象,从而实现对不同对象的统一操作。多态可以使得代码更加灵活,具有更好的可扩展性和可维护性。在 PHP 中,多态可以通过实现接口(interface)和使用抽象类(abstract class)来实现。

PHP 类定义

PHP 定义类通常语法格式如下:

  1. <?php
  2. class phpClass {
  3. var $var1;
  4. var $var2 = "constant string";
  5. function myfunc ($arg1, $arg2) {
  6. [..]
  7. }
  8. [..]
  9. }
  10. ?>

解析如下:

  • 类使用 class 关键字后加上类名定义。

  • 类名后的一对大括号({})内可以定义变量和方法。

  • 类的变量使用 var 来声明, 变量也可以初始化值。

  • 函数定义类似 PHP 函数的定义,但函数只能通过该类及其实例化的对象访问。

 

PHP 中创建对象

类创建后,我们可以使用 new 运算符来实例化该类的对象:

  1. $runoob = new Site;
  2. $taobao = new Site;
  3. $google = new Site;

以上代码我们创建了三个对象,三个对象各自都是独立的,接下来我们来看看如何访问成员方法与成员变量。

调用成员方法

在实例化对象后,我们可以使用该对象调用成员方法,该对象的成员方法只能操作该对象的成员变量:

  1. <?php
  2. class Site {
  3.   /* 成员变量 */
  4.   var $url;
  5.   var $title;
  6.   
  7.   /* 成员函数 */
  8.   function setUrl($par){
  9.      $this->url = $par;
  10.   }
  11.   
  12.   function getUrl(){
  13.      echo $this->url . PHP_EOL;
  14.   }
  15.   
  16.   function setTitle($par){
  17.      $this->title = $par;
  18.   }
  19.   
  20.   function getTitle(){
  21.      echo $this->title . PHP_EOL;
  22.   }
  23. }
  24. $runoob new Site;
  25. $taobao new Site;
  26. $google new Site;
  27. // 调用成员函数,设置标题和URL
  28. $runoob->setTitle"菜鸟教程" );
  29. $taobao->setTitle"淘宝" );
  30. $google->setTitle"Google 搜索" );
  31. $runoob->setUrl'www.runoob.com' );
  32. $taobao->setUrl'www.taobao.com' );
  33. $google->setUrl'www.google.com' );
  34. // 调用成员函数,获取标题和URL
  35. $runoob->getTitle();
  36. $taobao->getTitle();
  37. $google->getTitle();
  38. $runoob->getUrl();
  39. $taobao->getUrl();
  40. $google->getUrl();
  41. ?>

PHP 构造函数

构造函数是一种特殊的方法。主要用来在创建对象时初始化对象, 即为对象成员变量赋初始值,在创建对象的语句中与 new 运算符一起使用。

PHP 5 允许开发者在一个类中定义一个方法作为构造函数,语法格式如下:

void __construct ([ mixed $args [, $... ]] )

析构函数

析构函数(destructor) 与构造函数相反,当对象结束其生命周期时(例如对象所在的函数已调用完毕),系统自动执行析构函数。

PHP 5 引入了析构函数的概念,这类似于其它面向对象的语言,其语法格式如下:

void __destruct ( void )

继承

PHP 使用关键字 extends 来继承一个类,PHP 不支持多继承,格式如下:

  1. class Child extends Parent {
  2. // 代码部分
  3. }

方法重写

如果从父类继承的方法不能满足子类的需求,可以对其进行改写,这个过程叫方法的覆盖(override),也称为方法的重写。

实例中重写了 getUrl 与 getTitle 方法:

  1. function getUrl() {
  2. echo $this->url . PHP_EOL;
  3. return $this->url;
  4. }
  5. function getTitle(){
  6. echo $this->title . PHP_EOL;
  7. return $this->title;
  8. }

访问控制

PHP 对属性或方法的访问控制,是通过在前面添加关键字 public(公有),protected(受保护)或 private(私有)来实现的。

  • public(公有):公有的类成员可以在任何地方被访问。
  • protected(受保护):受保护的类成员则可以被其自身以及其子类和父类访问。
  • private(私有):私有的类成员则只能被其定义所在的类访问。
方法的访问控制

类中的方法可以被定义为公有,私有或受保护。如果没有设置这些关键字,则该方法默认为公有。

接口

使用接口(interface),可以指定某个类必须实现哪些方法,但不需要定义这些方法的具体内容。

接口是通过 interface 关键字来定义的,就像定义一个标准的类一样,但其中定义所有的方法都是空的。

接口中定义的所有方法都必须是公有,这是接口的特性。

要实现一个接口,使用 implements 操作符。类中必须实现接口中定义的所有方法,否则会报一个致命错误。类可以实现多个接口,用逗号来分隔多个接口的名称。

 

  1. <?php
  2. // 声明一个'iTemplate'接口
  3. interface iTemplate
  4. {
  5. public function setVariable($name, $var);
  6. public function getHtml($template);
  7. }
  8. // 实现接口
  9. class Template implements iTemplate
  10. {
  11. private $vars = array();
  12. public function setVariable($name, $var)
  13. {
  14. $this->vars[$name] = $var;
  15. }
  16. public function getHtml($template)
  17. {
  18. foreach($this->vars as $name => $value) {
  19. $template = str_replace('{' . $name . '}', $value, $template);
  20. }
  21. return $template;
  22. }
  23. }

抽象类

任何一个类,如果它里面至少有一个方法是被声明为抽象的,那么这个类就必须被声明为抽象的。

定义为抽象的类不能被实例化。

被定义为抽象的方法只是声明了其调用方式(参数),不能定义其具体的功能实现。

继承一个抽象类的时候,子类必须定义父类中的所有抽象方法;另外,这些方法的访问控制必须和父类中一样(或者更为宽松)。例如某个抽象方法被声明为受保护的,那么子类中实现的方法就应该声明为受保护的或者公有的,而不能定义为私有的。

  1. <?php
  2. abstract class AbstractClass
  3. {
  4. // 强制要求子类定义这些方法
  5. abstract protected function getValue();
  6. abstract protected function prefixValue($prefix);
  7. // 普通方法(非抽象方法)
  8. public function printOut() {
  9. print $this->getValue() . PHP_EOL;
  10. }
  11. }
  12. class ConcreteClass1 extends AbstractClass
  13. {
  14. protected function getValue() {
  15. return "ConcreteClass1";
  16. }
  17. public function prefixValue($prefix) {
  18. return "{$prefix}ConcreteClass1";
  19. }
  20. }
  21. class ConcreteClass2 extends AbstractClass
  22. {
  23. public function getValue() {
  24. return "ConcreteClass2";
  25. }
  26. public function prefixValue($prefix) {
  27. return "{$prefix}ConcreteClass2";
  28. }
  29. }
  30. $class1 = new ConcreteClass1;
  31. $class1->printOut();
  32. echo $class1->prefixValue('FOO_') . PHP_EOL;
  33. $class2 = new ConcreteClass2;
  34. $class2->printOut();
  35. echo $class2->prefixValue('FOO_') . PHP_EOL;
  36. ?>

PHP 表单和用户输入

PHP 表单处理

有一点很重要的事情值得注意,当处理 HTML 表单时,PHP 能把来自 HTML 页面中的表单元素自动变成可供 PHP 脚本使用。

下面的实例包含了一个 HTML 表单,带有两个输入框和一个提交按钮。

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>菜鸟教程(runoob.com)</title>
  5. </head>
  6. <body>
  7. <form action="welcome.php" method="post">
  8. 名字: <input type="text" name="fname">
  9. 年龄: <input type="text" name="age">
  10. <input type="submit" value="提交">
  11. </form>
  12. </body>
  13. </html>

当用户填写完上面的表单并点击提交按钮时,表单的数据会被送往名为 "welcome.php" 的 PHP 文件:

  1. 欢迎<?php echo $_POST["fname"]; ?>!
  2. 你的年龄是 <?php echo $_POST["age"]; ?> 岁。

表单元素

HTML 表单代码如下所示:

">

 什么是 $_SERVER["PHP_SELF"] 变量?

$_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。

该表单使用 method="post" 方法来提交数据。

所以, $_SERVER["PHP_SELF"] 会发送表单数据到当前页面,而不是跳转到不同的页面。

PHP表单中需引起注重的地方?

$_SERVER["PHP_SELF"] 变量有可能会被黑客使用!

当黑客使用跨网站脚本的HTTP链接来攻击时,$_SERVER["PHP_SELF"]服务器变量也会被植入脚本。原因就是跨网站脚本是附在执行文件的路径后面的,因此$_SERVER["PHP_SELF"]的字符串就会包含HTTP链接后面的JavaScript程序代码。

什么是 htmlspecialchars()方法?

htmlspecialchars() 函数把一些预定义的字符转换为 HTML 实体。

预定义的字符是:

  • & (和号) 成为 &
  • " (双引号) 成为 "
  • ' (单引号) 成为 '
  • < (小于) 成为 <
  • > (大于) 成为 >

如何避免 $_SERVER["PHP_SELF"] 被利用?

$_SERVER["PHP_SELF"] 可以通过 htmlspecialchars() 函数来避免被利用。

form 代码如下所示:

<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">

htmlspecialchars() 把一些预定义的字符转换为 HTML 实体。现在如果用户想利用 PHP_SELF 变量, 结果将输出如下所示:

<form method="post" action="test_form.php/"><script>alert('hacked')</script>">

$_GET 变量

预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。

从带有 GET 方法的表单发送的信息,对任何人都是可见的(会显示在浏览器的地址栏),并且对发送信息的量也有限制

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>菜鸟教程(runoob.com)</title>
  5. </head>
  6. <body>
  7. <form action="welcome.php" method="get">
  8. 名字: <input type="text" name="fname">
  9. 年龄: <input type="text" name="age">
  10. <input type="submit" value="提交">
  11. </form>
  12. </body>
  13. </html>
何时使用 method="get"?

在 HTML 表单中使用 method="get" 时,所有的变量名和值都会显示在 URL 中。

注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!

然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。

注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

 


$_POST 变量

预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值。

从带有 POST 方法的表单发送的信息,对任何人都是不可见的(不会显示在浏览器的地址栏),并且对发送信息的量也没有限制。

注释:然而,默认情况下,POST 方法的发送信息的量最大值为 8 MB(可通过设置 php.ini 文件中的 post_max_size 进行更改)。

  1. <html>
  2. <head>
  3. <meta charset="utf-8">
  4. <title>菜鸟教程(runoob.com)</title>
  5. </head>
  6. <body>
  7. <form action="welcome.php" method="post">
  8. 名字: <input type="text" name="fname">
  9. 年龄: <input type="text" name="age">
  10. <input type="submit" value="提交">
  11. </form>
  12. </body>
  13. </html>
何时使用 method="post"?

从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。

然而,由于变量不显示在 URL 中,所以无法把页面加入书签。

PHP $_REQUEST 变量

预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。

$_REQUEST 变量可用来收集通过 GET 和 POST 方法发送的表单数据。


SQL+Mysql数据库(from黑马程序员)

 

标签:
声明

1.本站遵循行业规范,任何转载的稿件都会明确标注作者和来源;2.本站的原创文章,请转载时务必注明文章作者和来源,不尊重原创的行为我们将追究责任;3.作者投稿可能会经我们编辑修改或补充。

在线投稿:投稿 站长QQ:1888636

后台-插件-广告管理-内容页尾部广告(手机)
关注我们

扫一扫关注我们,了解最新精彩内容

搜索
排行榜