php

一种创建动态交互性站点的强有力的服务端脚本语言

环境:phpstudy搭建而成

  1. 在phpstudy下的WWW下的文件夹下编写php程序
  2. 保存到WWW的下一级目录下
  3. 可以使用回环地址加上php文件名运行程序
  4. 例如:127.0.0.1/文件名.php

什么是php文件

  1. php文件可以包含文本、HTML、CSS、以及PHP代码
  2. php代码在服务器上执行,而结果以纯文本的形式返回浏览器
  3. 文件名后缀为.php

php能够做什么

语法知识

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

开头结尾

  1. php脚本以’ <?php ‘开头
  2. 以’ ?> ‘结尾

内建php输出文本函数

  1. echo
    <!DOCTYPE html>
    <html>
    <body>
    
    <h1>我的第一张 PHP 页面</h1>
    
    <?php
    echo "Hello World!";
    ?>
    
    </body>
    </html>

php语句以分号结尾(;)

  1. php代码块的关闭标签也会自动表明分号,因此在php代码的最后一行不必使用分号

注释

  1. php的注释和c++的注释符号一样
    //
    #
    /*
        此处为注释
    */

php对大小写敏感性问题

<!DOCTYPE html>
<html>
<body>

<?php
ECHO "Hello World!<br>";
echo "Hello World!<br>";
EcHo "Hello World!<br>";
?>

</body>
</html>
  1. 以上的三种方法等价
  2. 所有用户定义的****函数,类和关键词都对大小写不敏感,例如if else echo等等
  3. 在php中所有变量都对大小写敏感,试运行以下代码
    <!DOCTYPE html>
    <html>
    <body>
    
    <?php
    $color="red";
    echo "My car is " . $color . "<br>";
    echo "My house is " . $COLOR . "<br>";
    echo "My boat is " . $coLOR . "<br>";
    ?>
    
    </body>
    </html>

变量

变量的命名规则

  1. 变量以$符号开头,其后是变量的名称
  2. 变量名称必须以字母或者下划线开头
  3. 变量名称不能以数字开头
  4. 变量名称只能包含字母数字下划线
  5. 变量名称对大小写敏感

变量的创建

  1. php没有创建变量的命令
  2. 变量会在首次赋值时被创建
  3. 如果为变量赋值为文本,用引号包围该值

变量的引用

  1. 变量的引用也需要加‘$’
  2. 取数组中的某一个元素加大括号{数组[index]}

PHP 是一门类型松散的语言

  1. php在创建变量的时候不必告知php变量的数据类型

php变量作用域

  1. 可以在任意位置对变量进行声明
  2. 三个作用域:local global static
    local和global
  3. global是全局作用域,可以在函数外访问
  4. local是局部作用域,只能在函数内部进行访问
  5. 在函数外部定义的是global
  6. 函数内部定义的是local
  7. global关键词,用于在函数内部访问全局变量,要做到这一点,要在函数内部变量前面使用global关键词,(这一点和python不同,python中global是将局部变量转换为全局变量,而php中是在函数内部调用全局变量),如果删除global,将不能在函数内部调用全局变量
  8. php同时在名为 $GLOBALS[index]的数组中存储了所有的全局变量,下标存有变量名,用 \ $GLOBALS[index]即可访问到名为index的全局变量
static关键词
  1. 通常,在函数完成或执行后,会删除所有变量,不过有时我需要不删除某个局部变量
  2. 使用static关键词
    <?php
    
    function myTest() {
      static $x=0;
      echo $x;
      $x++;
    }
    
    myTest();
    myTest();
    myTest();
    
    ?>
  3. 每当函数被调用时,这个变量所存储的信息都是函数最后一次被调用时包含的信息(不会重新赋值)
  4. 但是这个变量仍然是局部变量

echo和print

差异

  1. echo能够输出一个以上的字符串
  2. print只能输出一个字符串,始终返回值为1
  3. echo比print稍快,因为他不返回任何值

print

  1. 有无括号都可使用(**print和print()**)
    <?php
    $txt1="Learn PHP";
    $txt2="W3School.com.cn";
    $cars=array("Volvo","BMW","SAAB");
    
    print $txt1;
    print "<br>";
    print "Study PHP at $txt2";
    print "My car is a {$cars[0]}";
    ?>
  2. 取数组中的某一个元素需要加大括号,大括号内部是数组名[index]

字符串

  1. 字符串是字符序列
  2. 单双括号等价

数据类型

var_dump()函数

  1. 返回变量的数据类型和值
  2. 值自动转化为十进制的值

php对象

  1. 对象是存储数据和有关如何处理数据的信息的数据类型
  2. php中必须明确地声明对象
  3. 首先必须声明对象的类,使用class关键词,类是包含属性和方法的结构
  4. 在对象类中定义数据类型,然后在该类的实例中使用此数据类型

NULL值

  1. 表示变量无量
  2. NULL是NULL唯一可能的值
  3. NULL值表示变量是否为空,用于区分字符串与空值数据库

字符串函数

strlen()

  1. 返回字符串的长度
    <?php
        echo strlen("hello world");
    ?>

字符串中单词个数的统计

  1. str_word_count()
    <?php
        echo str_word_count("hello world");
    ?>

strrev()

  1. 用于反转字符串
    <?php
        echo strrev("hello world"); //输出dlrow olleh
    ?>

strpos()

  1. 用于检索字符串内指定的字符或文本
  2. 如果找到匹配,则会返回首个匹配的字符位置,如果未找到,则会返回false
  3. strpos(“原字符串”,“待检索字符串”);
    <?php
        echo strpos("hello world","world"); //输出为6,下标从0开始(很特殊的是sql中的substr);
    ?>

str_replace()

  1. 用一些字符串替换字符串中的另一些字符
    <?php
        echo str_replace("被替换字符","替换字符",“原string”);
        echo str_replace("world","kitty","hello world"); //结果为hello kitty
    ?>

常量

常量是单个值的标识符,脚本中无法改变该值

有效的常量名以字符或下划线开头,(常量名称前面没有$符号

设置php变量

  1. define()函数,一共三个参数
  2. 首个参数定义常量的名称
  3. 第二个参数定义常量的值
  4. 第三个参数规定常量名对大小写是否敏感,默认为false
    <?php
        define("GREETING","Welcome");
        echo GTEETING; //创建了一个对大小写不敏感的GREETING常量,值为Welcome;
    ?>

常量是全局的,而且可以贯穿整个脚本使用

<?php
    define("GREETING","Welcome");
    function mytest() {
        echo GREETING;
    }
?>
  1. 在函数内使用了一个常量,即使它在函数外定义

运算符

+ - * / %

  1. $x + $y
  2. $x - $y
  3. $x * $y
  4. $x / $y
  5. $x % $y
    <?php
        $x=17;
        $y=8;
        echo ($x+$y);
    ?>

赋值运算符

  1. 用于向变量写值
  2. 基础赋值运算符为=
  3. 右赋给左

字符串运算符

.

  1. . 表示串接,$txt1=”hello” $txt2=$txt1.”world”;//$txt2为hello world
  2. .= 串接赋值,$txt1=”hello” $txt1.=”world”;//$txt1为hello world (类似于+=)

递增递减

  1. ++$x
  2. –$x
  3. $x++
  4. $x–

逻辑运算符

  1. and
  2. or 至少有一个就返回true
  3. xor 有且仅有一个为true,则返回true
  4. &&
  5. ||

数组运算符

    • 联合
  1. == 相等
  2. === 全等
  3. !=
  4. <>
  5. !==

if else

if elseif else

if (条件) {
    语句;
}

if elseif else

<?php
if(){

}
elseif(){

}
else{

}
?>

switch

  1. 有选择地执行若干代码
    switch(expression){
        case label1:
            expression = label1时执行的代码;
            break;
        case label2:
            expression = label2时执行的代码;
            break;
        default:
            表达式的值不等于label1和label2时执行的代码
    }
  2. 如果没有case为真,才使用default

while循环

  1. while只要条件为真,循环执行
  2. do while先执行一次代码块,然后只要指定条件为真,则重复循环(先做一次do,再判断while),即至少会执行一次语句,即使条件测试在第一次就失败了

for循环

  1. 提前确定了脚本运行的次数,用for循环
    for(init counter;test counter;increment counter){
        code to be executed;
    }
  2. 第一个参数是初始化循环计数器的值
  3. 第二个参数是判断每个循环迭代,true继续,false结束
  4. 第三个参数是增加循环计数器的值
    <?php
        for($x=0;$x<=10;$x++){
            echo "xxx";
        }
    ?>

    执行顺序

  5. 定义(1)
  6. 判断(2)
  7. 执行循环体语句
  8. 改变循环变量(3)

foreach

  1. foreach循环只用于数组,用于遍历数组中的每个键值对
    foreach($array as $value){
        执行代码
    }
  2. 每一次循环迭代,当前数组的值就会赋给$value变量,并且数组指针会逐一移动,直到到达最后一个数组元素
    <?php
        $color = array("red","green","blue");
        foreach($color as $value){ //类似于c++中的范围遍历,将$color数组中的每一个元素作为value
            echo "value";
        }
    ?>

函数

php真正的力量,来自于它的函数,php拥有超过1000个内建的函数

用户定义函数

  1. 以单词function开头
    function functionname(){
        被执行的代码;
    }
  2. 函数名对大小写不敏感

php函数参数

  1. 通过参数向函数传递信息,参数类似于变量
  2. 逗号隔开参数
    <?php
        function family($name){
            echo "$name";
        }
    ?>

默认参数值

  1. 如果调用没有参数的函数,参数会取默认值
  2. 默认参数值只会发生在函数的调用过程
    <?php
        function setheight($min=60){
            echo "height is $min";
        }
        setheight();     //无参数,使用默认值60
        setheight(100);  //有参数,不适用默认值,使用传入的100
    ?>

php函数返回值

  1. 使用返回值,用return
  2. 当函数内部使用形参时,想要往外输出参数,则需要return,因为形参不是全局变量、

数组

数组能够在单独的变量名中存储一个或多个值

<?php
    $cars=array("a","b","c");
    echo "I like" . $cars[0] . "," . $cars[1] . "," . cars[2] . ".";
?>

定义方法

  1. array()函数用于创建函数

    三种数组类型

  2. 索引数组 - 带有数字索引的数组
  3. 关联数组 - 带有指定键的数组
  4. 多维数组 - 包含一个或多个数组的数组

索引数组

索引是自动分配的
  1. 索引自动分配,从0开始
    $cars=array('a','b','c');
    等价于
    $cars[0] = 'a';
    $cars[1] = 'b';
    $cars[2] = 'c';

获取数组的长度

  1. count()函数,即返回元素个数
    <?php
        $cars=array("a","b","c");
        echo count($cars); //运行结果即为3
    ?>

遍历索引函数

  1. 可以使用for循环遍历并输出索引数组的所有值
    <?php
        $cars=array('a','b','c');
        $arrlength=count($cars);
    
        for($x=0;$x < $arrlength;$x++){
            echo $cars[x];
            echo "<br>";
        }
    ?>

关联数组

  1. 关联数组是使用分配给数组的指定键的数组
    $age=array("bill" => "35","steve" => "36","elon" => "37");
    等价于
    $age["bill"]="35";
    $age["steve"]="36";
    $age["elon"]="37";
  2. 语法:array(“键”=>”值”,”键”=>”值”);
遍历关联数组
  1. 使用foreach循环,遍历并输出关联数组的所有值
    foreach($age as $x=>$x_value){
        echo "key=".$x.",value=".$x_value;
        echo "<br>";
    }

数组排序

sort()

  1. 以升序对数组排序
    <?php
        $cars=array('a','b','c');
        sort($cars);
    ?>

rsort()

  1. 按照ascii码降序对数组进行排序,reverse的sort();
    <?php
        $cars=array('a','b','c');
        rsort($cars);
    ?>

asort()

  1. 根据值对数组进行升序排序
  2. 排序对象是关联数组,排序的根据是键值对的值"63","Steve"=>"56","Elon"=>"47"); asort($age); ?>

ksort()

  1. 根据键对关联数组进行排序
  2. 排序对象是关联数组,排序的根据是键值对的键
    <?php
        $age=array("Bill"=>"63","Steve"=>"56","Elon"=>"47");
        ksort($age);
    ?>

arsort()

  1. 根据值对关联数组进行降序排序

krsort()

  1. 根据键对关联数组进行降序排序

超全局变量

定义

  1. php中许多预定义变量都是超全局的,这意味着他们在一个脚本的全部作用域中都可用,无需执行global
    $GLOBALS
    $_SERVER
    $_REQUEST
    $_POST
    $_GET
    $_FILES
    $_ENV
    $_COOKIE
    $_SESSION

$GLOBALS

  1. 用于在PHP脚本中的任意位置访问全局变量
  2. PHP在名为$GLOBALS[index]的数组中存储了所有全局变量,变量的名字就是数组的键(逐一这个地方是数组的名字,是去掉$的数组名字再加上单引号括起来)
    <?php
        $x=1;
        $y=2;
        function addition() {
            $GLOBALS['$z'] = $GLOBALS['$x'] + $GLOBALS['$y'];
        }
        addition();
        echo $z;
    ?>

$_server

  1. $_server这种超全局变量保存关于报头,路径和脚本位置的信息
    <?php 
    echo $_SERVER['PHP_SELF'];
    echo "<br>";
    echo $_SERVER['SERVER_NAME'];
    echo "<br>";
    echo $_SERVER['HTTP_HOST'];
    echo "<br>";
    echo $_SERVER['HTTP_REFERER'];
    echo "<br>";
    echo $_SERVER['HTTP_USER_AGENT'];
    echo "<br>";
    echo $_SERVER['SCRIPT_NAME'];
    ?>
  2. $_server中访问的最重要的元素
  3. 重要的
    $_server['REQUEST_METHOD'];返回访问页面使用的请求方法,例如post和get
    $_server['SERVER_ADDR'];返回当前脚本所在的服务器的IP地址
    $_server['PHP_SELF'];返回当前执行脚本的文件名
    $_server['SERVER_NAME'];返回当前运行脚本所在的服务器的主机名

$_REQUEST

  1. 用于收集HTML表单提交的数据
  2. 下面是一个包含输入字段和提交按钮的表单,当用户通过点击提交按钮来提交表单数据时,表单将发送到
    标签的 action 属性中指定的脚本文件.
  3. 在这个例子中,我们指定文件本身来处理表单数据。如果您需要使用其他的 PHP 文件来处理表单数据,请修改为您选择的文件名即可。然后,我们可以使用超级全局变量 $_REQUEST 来收集 input 字段的值:
    <html>
    
    <body>
    
    <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">
    Name: <input type="text" name="fname">
    <input type="submit">
    </form>
    
    <?php 
    $name = $_REQUEST['fname']; 
    echo $name; 
    ?>
    
    </body>
    </html>

$_post

  1. 广泛用于收集method=”post”的HTML表单后的表单数据
    <html>
    <body>
    <form method="post" action="<?php echo $_SERVER['PHP_SELF']?>">
    Name: <input type="text" name="fname">;
    <input type="submit">;
    </form>
    
    <?php
        $name = $POST['fname'];
        echo $name;
    ?>
    
    </body>
    </html>

$_get

  1. 用于提交HTML表单(method=”get”)之后的表单数据
  2. $GET 也可以收集URL中发送的数据

注意

  1. 上面的$_POST和$_GET都是变量,类似于$GLOBAL,存储了脚本中的所有POST或者GET方法传入的参数
  2. 使用方法和$GLOBAL类似
    echo $_GET["name"];
    echo $_POST["age"];

区别

  1. $_GET是通过URL参数传递到当前脚本的变量数组
  2. $_POST是通过HTTP POST传递到当前脚本的变量数组

何时使用

  1. GET 方法从表单发送的信息对任何人都是可见的(所有变量名和值都显示在 URL 中)。GET 对所发送信息的数量也有限制。GET 可用于发送非敏感的数据。
  2. GET可以看见注入点(发送的信息的变量名)
  3. POST 方法从表单发送的信息对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中)并且对所发送信息的数量也无限制。

    PHP文件处理

    readfile()

  4. readfile()函数读取文件,并把它写入输出缓冲
  5. 假设我们有一个名为 “webdictionary.txt” 的文本文件,存放在服务器上,就像这样:
    AJAX = Asynchronous JavaScript and XML
    CSS = Cascading Style Sheets
    HTML = Hyper Text Markup Language
    PHP = PHP Hypertext Preprocessor
    SQL = Structured Query Language
    SVG = Scalable Vector Graphics
    XML = EXtensible Markup Language
  6. 读取此文件并且写到输出流的PHP代码如下:读取成功则readfile()函数返回字节数
    <?php
    echo readfile(webdictionary.txt);
    ?>

fopen()

  1. 提供比readfile()更多的选项
  2. fopen的第一个参数包含被打开的文件名,第二个参数规定打开文件的模式
    <?php
        $myfile=fopen("webdictionary.txt","r") or die("unable to open file");
        fclose($myfile);
    ?>

文件打开的模式

  1. 带+的读写都有
  2. r读
  3. w重写
  4. a追加写
  5. x执行

fread()

  1. fread()读取打开的文件
  2. fread()的第一个参数包含待读取文件的文件名,第二个参数规定待读取的最大字节数

fclose()

  1. fclose()函数用于关闭打开的文件
  2. 用完文件后把它们全部关闭是一个良好的编程习惯。您并不想打开的文件占用您的服务器资源。
  3. fclose需要待关闭的文件的名称,或者存有文件名的变量

fgets()

  1. fgets()函数用于从文件中读取单行
  2. 调用fgets()函数之后,文件指针会移动到下一行

feof()

  1. feof()函数检查是否已经到达end of file
  2. feof()对于遍历未知长度的数据很有用
    <?php
    $myfile=fopen("a.txt","r") or die("unable to open file");
    while(!feof($myfile)){
        echo fgets($myfile).<br>;
    }
    fclose($myfile);
    ?>

fgetc()

  1. fgetc()函数用于从文件中读取单个字符
    <?php
        fopen("a.txt","r") or die("unable");
        while(!feof($myfile)){
            echo fgetc($myfile);
        }
        fclose($myfile);
    ?>

fopen()

  1. fopen()函数用于创建文件
  2. 在php中,创建文件所用的函数和打开文件的相同
  3. 如果fopen()没有遍历到文件,就会创建一个文件
    $myfile=fopen("a.txt","w");

fwrite()

  1. fwrite()函数用于写入文件
  2. fwrite()的第一个参数包含要写入的文件的文件名,第二个参数是被写的字符串
    <?php
    $myfile=fopen("newfile.txt","w") or die("unable");
    $txt="a";
    fwrite($myfile,$txt);//写a
    $txt="b";
    fwrite($myfile,$txt);//写b
    fclose($myfile);
    ?>

PHP文件上传

创建一个文件上传表单

<form action="upload_file.php" method="post" enctype='multipart/form-data'>
  1. <\form>标签的enctype属性规定了在提交表单时要使用哪种内容类型,在表单需要使用二进制数据时,比如文件内容,请使用”multipart/form-data”
  2. <\input>标签的type=”file”属性规定了应该把输入作为文件来处理,举例来说,当在浏览器中预览时,会看到输入框旁边有一个浏览按钮。

创建上传脚本

  1. upload_file.php文件含有供文件上传的代码
  2. 通过使用PHP的全局数组$_FILE,可以从客户端计算机向远程服务器上传文件

$_FILES

  1. 第一个参数是input name
  2. 第二个下标可以是name type size tmp_name error
    $_FILES["file"]["name"] 被上传文件的名称
    $_FILES["file"]["type"] 被上传的文件类型
    $_FILES["file"]["size"] 被上传的文件大小,以字节计算
    $_FILES["file"]["tmp_name"] 存储在服务器的文件的临时副本名称
    $_FILES["file"]["error"] 由文件上传导致的错误代码
    
  3. 总之$_FILES超全局变量的作用就是用来上传文件的

设置上传限制

  1. 只能上传gif或者jpeg文件
    if((($_FILES['file']['type'] == 'image/gif') || $_FILES['file']['type'] == 'image/jpeg' || $_FILES['file']['type'] == 'image/pjpeg')) && ($_FILES['file']['size'] < 20000>))
    {
        if($_FILES['file']['error'] > 0) // 这个地方如果为error则错误代码>0
        {
            echo "ERROR" . $_FILES['file']['error'] . "<br />"
        }
        else{
            echo "UPLOAD-name" . $_FILES["file"]["name"] . <br />
            echo "Type" . $_FILES["file"]["type"] . <br />
            echo "Size" . $_FILES['file']['size'] . "byte" . <br />
        }
    }

保存被上传的文件

  1. 上面的例子在服务器的PHP临时文件夹中创建了一个临时副本
  2. 这个临时副本会在脚本结束时消失,要保存被上传的文件,我们需要把它拷贝到另外的位置
    if(file_exists("upload/" . $_FILES["file"]["name"])){
        echo $_FILES["file"]["name"] . "already exists.";
    }
    else{
        move_uploaded_file($_FILES["file"]["tmp_name"],"upload/" . $_FILES["file"]["name"]);
        echo "stored in:" . "upload/" . $_FILES["file"]["name"];
    }
  3. 上面的脚本检测了是否已经存在了此文件,如果不存在,则把文件拷贝到指定的文件夹
  4. file_exists() 检测在指定目录下是否有文件名的文件存在
  5. move_uploaded_file() 移动文件

cookie

什么是cookie

  1. cookie常用于识别用户,cookie是服务器留在用户计算机中的小文件,每当相同的计算机通过浏览器请求页面时,它同时会发送cookie.通过php,您能够创建并取回cookie的值
  2. 注意一定是服务器留在用户计算机中的,服务器->用户计算机

创建cookie

  1. setcookie()函数用来设置cookie
  2. setcookie()函数必须位于<\html>标签之前
    setcookie(name,value,expire,path,domain)
  3. 创建用户名为user的cookie,将它赋值为alex port,规定在一小时后过期
    <?php 
        setcookie("user","alex port",time()+3600);
    ?>
  4. 在发送cookie时,cookie的值会自动进行URL编码,在取回时自动解码
  5. 为了防止URL编码,使用setrawcookie()函数取代,set 设置,raw 生的,没有改变进行URL编码的cookie

取回cookie的值

  1. $_COOKIE超全局变量用于取回cookie的值
  2. 取回名为user的cookie值,并且显示
    echo $_COOKIE['user'];
  3. 使用isset()函数来确认是否已经设置了cookie
    <?php
        if(isset($_COOKIE["user"]))
            echo "welcome" . $_COOKIE['user'] . <br />
        else
            echo "welcome guest" . <br />
    ?>

删除cookie

  1. 当删除cookie时,应该使用过期日期变更为过去的时间点
  2. 如果过期日期在过去的时间点,则认为过去已经过期
    <?php
        setcookie("user","",time()-3600);//默认为cookie的名称为user,值为空,时间在过去一个小时的时候已经过期
    ?>

php错误处理

方式

  1. 在php中,默认的错误处理很简单,一条消息会被发送到浏览器,这条消息带有文件名,行号,以及一条错误的信息

php错误处理

  1. 在创建脚本和web应用程序时,错误处理是一个重要的部分。

基本的错误处理:使用die()函数

  1. die()函数的错误处理机制,在错误之后终止了脚本

过滤器

概念

  1. PHP过滤器用于验证和过滤来自非安全来源的数据
  2. 验证和过滤用户输入或自定义是任何web应用程序的重要组成部分

为什么使用过滤器

  1. 几乎所有的web应用程序都依赖外部的输入,这些数据通常都来自用户或其它应用程序
  2. 使用过滤器,能确保所有应用程序都获得正确的输入类型

什么是外部数据?


来自表单的输入数据
Cookies
服务器变量
数据库查询结果

函数和过滤器

  1. 如果需要过滤变量,使用以下的过滤器函数之一
    filter_var() 通过一个指定的过滤器来过滤单一的变量
    filter_var_array() 通过相同的或不同的过滤器来过滤多个变量
    filter_input() 获取一个输入变量,并对它进行过滤
    filter_input_array() 获取多个输入变量,并通过相同的或不同的过滤器对他们进行过滤
  2. https://www.w3school.com.cn/php/php_ref_filter.asp php-filter函数

PHP表单

PHP表单处理

<html>
<body>
<form action='welcome.php' method='post'>
Name: <input type='text' name='name'><br>
E-mail: <input type='text' name='email'><br>
<input type='submit'>
</body>
</html>
  1. 用户填写此表单并点击提交按钮后,表单数据会发送到名为welcome.php的文件供处理,表单数据是通过HTTP POST的方式发送的
  2. 如需显示出被提交的数据,您可以简单地输出(echo)所有变量。”welcome.php” 文件是这样的:
    <html>
    <body>
    welcome <?php echo $_POST["name"];?><br>
    your email address is: <?php echo $_POST["email"]?><br>
    </body>
    </html>

表单验证

文本字段

Name: <input type="text" name='name'>
E-mail: <input type="text" name='email'>
website: <input type='text' name='website'>

单选按钮

  1. gender字段是单选按钮,其中,radio的type类型是单选框
    gender:
    <input type='radio' name='gender' value='female'> female
    <input type='radio' name='gender' value='male'> male

表单元素

<form method='post' action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>">
  1. 当提交此表单时,通过method=’post’发送表单数据

$_SERVER[“PHP_SELF”]

  1. $_SERVER[“PHP_SELF”]是一种超全局变量,它返回当前执行脚本的文件名
  2. 因此,$_SERVER[“PHP_SELF”]将表单数据发送到页面本身,而不是跳转到另一张页面,这样用户就能在表单页面获得错误提示信息

表单验证

验证名字

  1. 检查name字段是否包含字母和空格,如果name字段无效,则存储一条错误信息
    $name=test_input($_POST["name"]);
    if(!preg_match("/^[a-zA-Z]*$/",name)){
        $emailErr='无效的email格式';
    }
  2. preg_match()函数检索字符串的模式,如果模式存在则返回true,否则返回false