PHP基础知识

配置time报错

php基本语法

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

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

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

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

echo 和 print 区别:

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

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

1.变量

1.PHP 变量规则:

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

PHP 没有声明变量的命令。

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

<?php
$txt="Hello world!";
$x=5;
$y=10.5;
?>

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

  • local
  • global
  • static
  • parameter

<?php
$x=5; // 全局变量

function myTest()
{
    $y=10; // 局部变量
    echo "<p>测试函数内变量:<p>";
    echo "变量 x 为: $x";
    echo "<br>";
    echo "变量 y 为: $y";
} 

myTest();

echo "<p>测试函数外变量:<p>";
echo "变量 x 为: $x";
echo "<br>";
echo "变量 y 为: $y";
?>

global 关键字

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

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

<?php
$x=5;
$y=10;
 
function myTest()
{
    global $x,$y;
    $y=$x+$y;
}
 
myTest();
echo $y; // 输出 15
?>

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

上面的实例可以写成这样:

<?php
$x=5;
$y=10;
 
function myTest()
{
    $GLOBALS['y']=$GLOBALS['x']+$GLOBALS['y'];
} 
 
myTest();
echo $y;
?>

Static

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

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

<?php
function myTest()
{
    static $x=0;
    echo $x;
    $x++;
    echo PHP_EOL;    // 换行符
}
 
myTest();
myTest();
myTest();
?>

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

PHP超级循环变量

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

PHP 超级全局变量列表:

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

PHP $_REQUEST 用于收集HTML表单提交的数据。

<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>

HTML部分

  1. <form method="post" action="<?php echo $_SERVER['PHP_SELF'];?>">

    • <form> 标签定义了一个表单,用于收集用户输入
    • method="post" 属性指定表单数据通过HTTP POST方法提交。这意味着用户输入的数据会在请求体中发送,而不是URL中。
    • action="<?php echo $_SERVER['PHP_SELF'];?>" 属性指定表单提交时的目标URL。这里使用了PHP代码 $_SERVER['PHP_SELF'],它会输出当前脚本的文件名。这意味着表单数据将提交给同一个页面进行处理。
  2. Name: <input type="text" name="fname">

    • Name: 是一个简单的文本标签,用于在表单中显示提示文字。
    • <input type="text" name="fname"> 定义了一个文本输入框,允许用户输入文本。type="text" 指定输入框的类型文本name="fname" 为输入框指定了一个名称,这样提交表单时可以通过这个名称获取用户输入的
  3. <input type="submit">:定义了一个提交按钮,用户点击这个按钮会提交表单。

PHP部分

  1. $name = $_REQUEST['fname'];

    • 这行PHP代码尝试从$_REQUEST数组中获取名为fname的值$_REQUEST是一个超全局变量,包含表单数据(无论是通过GET还是POST方法提交的)。
    • 这里假设用户已经填写了表单并点击了提交按钮,这样$_REQUEST['fname']中就包含了用户输入的姓名。

总结

整个代码的工作原理是:用户在表单中输入姓名,点击提交按钮后,表单数据通过POST方法提交给服务器。服务器上的PHP脚本获取提交的姓名,并将其输出在页面上。由于使用了$_SERVER['PHP_SELF'],无论用户如何访问页面(无论是直接输入URL还是通过链接),表单都会提交给当前页面。

$_GET

PHP $_GET 同样被广泛应用于收集表单数据,在HTML form标签的指定该属性:"method="get"。

$_GET 也可以收集URL中发送的数据。

<html>
<body>

<a href="test_get.php?subject=PHP&web=runoob.com">Test $GET</a>

</body>
</html>

test_get.php:

<html>
<body>
 
<?php 
echo "Study " . $_GET['subject'] . " @ " . $_GET['web'];
?>
 
</body>
</html>

这段代码是一个HTML锚点(anchor)标签的示例,它创建了一个超链接,用户点击这个链接时,浏览器会发起一个GET请求指定的URL,并附带查询字符串。

让我们详细解释每个部分:

  1. <a> 标签:这是HTML中的锚点标签,用于定义超链接,它们可以链接到另一个页面、文件、电子邮件地址、位置或任何URL。

  2. href 属性:hrefanchor(锚点)的一个必需属性,它指定了链接目标的URL。用户的浏览器会将这个URL用于发起请求。

  3. test_get.php?subject=PHP&web=runoob.com:这是链接的目标URL,它指向服务器上的一个名为 test_get.php 的文件。URL后面的 ? 符号开始了查询字符串,其中包含了一系列的参数和值,用 & 符号分隔。在这个例子中,有两个参数:subjectwebsubject 参数的值是 PHP,而 web 参数的值是 runoob.com

  4. Test $GET:这是链接的可点击文本,当用户看到这个链接时,他们会看到 "Test $GET" 文本。点击这个文本会导致浏览器发起一个GET请求到 test_get.php 脚本,并附带查询字符串。

当用户点击这个链接时,服务器上的 test_get.php 脚本可以通过PHP的超全局数组 $_GET接收查询字符串中的参数

$_SESSION

在 PHP 中,$_SESSION 是一个超全局变量,用于存储用户会话的相关信息。会话(session)是一种在服务器端存储用户数据的方式,它可以在多个页面请求之间持久保存信息。

以下是 $_SESSION 的一些常见用途:

  1. 用户身份验证:存储用户登录信息,如用户名或用户ID。
  2. 用户偏好设置:保存用户的个性化设置,如主题选择、语言偏好等。
  3. 购物车内容:在电子商务网站中,存储用户添加到购物车的商品信息。
  4. 表单数据:在用户提交表单前,存储表单数据,以防页面刷新导致数据丢失。
  5. 错误消息:存储错误消息或成功消息,以便在下一个页面请求中显示。

要使用 $_SESSION,通常需要先启动会话:

session_start();

这行代码必须位于任何输出之前,因为会话启动时可能会发送一些原始的HTML头部信息。

以下是一些使用 $_SESSION 的示例:

// 存储数据到会话
$_SESSION['username'] = 'JohnDoe';

// 从会话中检索数据
echo $_SESSION['username'];

// 检查会话变量是否存在
if (isset($_SESSION['username'])) {
    echo '用户已登录:' . $_SESSION['username'];
}

// 销毁会话变量
unset($_SESSION['username']);

// 销毁所有会话数据,并结束会话
$_SESSION = array();
session_destroy();

使用 $_SESSION 时需要注意的几点:

  • 会话数据存储在服务器端,可以通过配置文件设置会话数据的存储位置和方式(如文件、数据库等)。
  • 会话ID通常存储在客户端的cookie中,用于标识用户的会话。
  • 出于安全考虑,应避免在 $_SESSION 中存储敏感信息,或者确保通过加密等手段保护这些信息。
  • 会话超时:可以通过配置文件或代码设置会话的超时时间。
  • 会话安全:使用 session_regenerate_id() 函数可以重新生成会话ID,以提高会话安全性。

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的用法。
<?php
echo <<<EOF
        <h1>我的第一个标题</h1>
        <p>我的第一个段落。</p>
EOF;
// 结束需要独立一行且前后不能空格
?>

在 heredoc 中,变量不需要用连接符 . 或 , 来拼接

PHP 资源类型

PHP 资源 resource 是一种特殊变量保存外部资源的一个引用

常见资源数据类型有打开文件、数据库连接、图形画布区域等。

由于资源类型变量保存有为打开文件、数据库连接、图形画布区域等的特殊句柄,因此将其它类型的值转换为资源没有意义。

使用 get_resource_type() 函数可以返回资源(resource)类型:

get_resource_type(resource $handle): string

此函数返回一个字符串,用于表示传递给它的 resource 的类型。如果参数不是合法的 resource,将产生错误。

如下实例:

<?php
$c = mysql_connect();
echo get_resource_type($c)."\n";
// 打印:mysql link

$fp = fopen("foo","w");
echo get_resource_type($fp)."\n";
// 打印:file

$doc = new_xmldoc("1.0");
echo get_resource_type($doc->doc)."\n";
// 打印:domxml document
?>

php类型比较

常量

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

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

该函数有三个参数:

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

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

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

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

字符串

并置运算符

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

<?php
$txt1="Hello world!";
$txt2="What a nice day!";
echo $txt1 . " " . $txt2;
?>

strlen() 函数

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

<?php
echo strlen("Hello world!");
?>

strpos()

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

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

<?php
echo strpos("Hello world!","world");
?>

数组

遍历关联数组

关联数组(也称为哈希表或字典)是一种存储键值对的数组,其中每个键都是唯一的。

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

<?php
$age=array("Peter"=>"35","Ben"=>"37","Joe"=>"43");
 
foreach($age as $x=>$x_value)
{
    echo "Key=" . $x . ", Value=" . $x_value;
    echo "<br>";
}
?>

foreach

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

foreach ($array as $value)
{
    要执行代码;
}
<?php
$x=array("Google","Runoob","Taobao");
foreach ($x as $value)
{
    echo $value . PHP_EOL;
}
?>

它的关联数组基本语法如下:

foreach ($array as $key => $value) { // 代码块 }

foreach 循环中:

  • $array 是要遍历的数组。
  • $key 是数组中当前遍历到的元素的键(对于关联数组来说是键,对于索引数组来说是索引)。
  • $value 是与 $key 相关联的元素的值。

foreach 循环会自动按照数组中的顺序,一个接一个地取出数组中的元素,并将当前元素的键和值分别赋给 $key$value,然后执行循环体内的代码块。

PHP - 数组排序函数

在本章中,我们将一一介绍下列 PHP 数组排序函数:

  • sort() - 对数组进行升序排列
  • rsort() - 对数组进行降序排列
  • asort() - 根据关联数组的值,对数组进行升序排列
  • ksort() - 根据关联数组的键,对数组进行升序排列
  • arsort() - 根据关联数组的值,对数组进行降序排列
  • krsort() - 根据关联数组的键,对数组进行降序排列

函数

语法:

<?php
function functionName()
{
    // 要执行的代码
}
?>

使用变量作为函数名来调用函数

<?php
function foo() {
    echo "In foo()<br />\n";
}

function bar($arg = '')
{
    echo "In bar(); argument was '$arg'.<br />\n";
}

// 使用 echo 的包装函数
function echoit($string)
{
    echo $string;
}

$func = 'foo';
$func();        // 调用 foo()

$func = 'bar';
$func('test');  // 调用 bar()

$func = 'echoit';
$func('test');  // 调用 echoit()
?>

代码创建了一个名为 $func 的变量,并将其赋值为字符串 'foo'。然后,使用 $func() 来调用与变量 $func 名称相匹配的函数。在这种情况下,它将调用 foo() 函数。

__TRAIT__

在 PHP 中,trait 是一种代码复用机制,允许开发者定义一组可以被多个类使用的方法。Trait 提供了一种灵活的方式,使得一个类可以借用其他类的代码,而无需成为它们的子类。Trait 主要用于解决类之间多重继承问题,因为在 PHP 中不支持类的多重继承。

表单

`action` 属性

在HTML中,`<form>` 元素的 `action` 属性指定了提交表单数据时的目标URL。当用户填写完表单并点击提交按钮时,浏览器会将表单中的数据发送到这个URL。这个属性的值可以是绝对URL,也可以是相对URL。

以下是一些关于 `action` 属性的要点:

1. **必须性**:在HTML5中,`action` 属性不是必需的,如果省略了这个属性,提交表单的操作将会由浏览器的默认行为决定,通常是提交到当前页面。

2. **数据传输方式**:`action` 属性通常与 `method` 属性一起使用,`method` 属性定义了数据提交的方式(如 `GET` 或 `POST`)。

3. **安全性**:提交到的URL应该与表单所在的页面具有相同的安全级别。如果表单页面是HTTPS加密的,那么提交的URL也应该是HTTPS,以避免中间人攻击。

4. **服务器端处理**:`action` 属性指定的URL应该指向一个服务器端的脚本或程序,该脚本或程序能够处理接收到的表单数据。

5. **默认行为**:如果表单的 `action` 属性为空或未指定,那么表单的提交URL默认为包含该表单的页面URL。

6. **JavaScript控制**:可以通过JavaScript动态修改 `action` 属性的值,以在不同的条件下将表单数据提交到不同的URL。

下面是一个简单的表单示例,演示了如何使用 `action` 属性:

<form action="submit_page.php" method="post">
  <label for="name">Name:</label><br>
  <input type="text" id="name" name="username">
  <br>
  <input type="submit" value="Submit">
</form>

在这个例子中,当用户填写了名字并点击提交按钮,表单数据将通过POST方法发送到 `submit_page.php`。

PHP 获取下拉菜单的数据

get和post

HTML表单的`method`属性指定了数据提交给服务器时所使用的HTTP方法。`method`属性可以有两个值:`get``post`。选择使用哪一个取决于你的具体需求和安全考虑:

### 使用GET方法的情况:

1. **数据检索**:当你需要从服务器检索数据而不是提交数据进行处理时,应该使用GET方法。例如,搜索表单过滤表单

2. **书签和分享**:GET请求可以作为URL的一部分,这意味着用户可以书签页面或通过URL共享他们的搜索结果。

3. **无副作用**:GET请求不应该产生副作用,即它们不会改变服务器上的状态或数据。

4. **数据量限制**:GET请求通常受到URL长度限制,因此不适合提交大量数据。

5. **可见性**:由于GET请求的数据会显示在URL中,因此不应该用于敏感信息的传输。

### 使用POST方法的情况:

1. **数据提交**:当你需要向服务器提交数据进行处理时,如表单数据、文件上传等,应该使用POST方法。

2. **安全性**:POST请求的数据不会出现在URL中,因此比GET方法更适合传输敏感信息

3. **数据量**:POST请求没有数据量限制,适合传输大量数据,如文件上传。

4. **副作用**:POST请求可以产生副作用,比如创建用户账户、更新数据库记录或处理交易。

5. **无缓存**:GET请求可以被浏览器缓存,而POST请求则不会被缓存,这使得POST方法更适合那些需要服务器实时处理的任务。

6. **无身份验证**:GET请求可能会被缓存或保存在服务器的日志文件中,这意味着敏感信息不应通过GET请求传输。

总结:

- 使用GET方法,当操作是安全的无状态的,并且仅用于检索数据
- 使用POST方法,当操作不是幂等的、可能改变服务器状态,或者需要传输敏感大量数据

在实际应用中,选择GET还是POST也取决于你的应用程序设计和后端服务器的实现。始终考虑数据的安全性和隐私性,确保使用最合适的方法来保护用户数据。

1.下拉单选

<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
        if($q =='RUNOOB') {
                echo '菜鸟教程<br>http://www.runoob.com';
        } else if($q =='GOOGLE') {
                echo 'Google 搜索<br>http://www.google.com';
        } else if($q =='TAOBAO') {
                echo '淘宝<br>http://www.taobao.com';
        }
} else {
?><form action="" method="get"> 
    <select name="q">
    <option value="">选择一个站点:</option>
    <option value="RUNOOB">Runoob</option>
    <option value="GOOGLE">Google</option>
    <option value="TAOBAO">Taobao</option>
    </select>
    <input type="submit" value="提交">
    </form><?php
}
?>

第一行PHP代码使用了三元运算符来设置 `$q` 变量的值。三元运算符是一种简洁的方式来选择两个值中的一个。这个运算符的一般形式是 `exp1 ? exp2 : exp3`,如果 `exp1` 为真,则表达式的结果为 `exp2`,否则结果为 `exp3`。

代码分解如下:

1. `isset($_GET['q'])`: 这个函数检查 `$_GET` 数组中是否存在一个键名为 `'q'` 的元素。`$_GET` 是一个超全局变量,用于收集表单数据或URL参数。

2. 如果 `$_GET['q']` 存在,`isset()` 将返回 `true`,然后执行 `htmlspecialchars($_GET['q'])`。`htmlspecialchars` 函数转换 `$_GET['q']` 中的特殊字符(如 `<`, `>`, `&` 等)为HTML实体,以防止跨站脚本攻击(XSS)。

3. 如果 `$_GET['q']` 不存在,`isset()` 将返回 `false`,然后执行 `''`,即空字符串。这意味着如果用户没有通过GET参数提交 `q`,`$q` 将被设置为空字符串。

这段PHP代码是一个简单的Web表单,它允许用户选择并提交一个查询参数 q,然后根据这个参数显示不同的网站链接。下面是代码的逐行解释:

  1. header('Content-type: text/html; charset=utf-8'); 设置了HTTP头,指定了页面的内容类型为HTML,字符集为UTF-8。

  2. $q 变量通过检查 $_GET['q'] 是否存在来初始化。如果存在,它将使用 htmlspecialchars 函数来避免跨站脚本攻击(XSS),确保变量 $q 是安全的。如果 $_GET['q'] 不存在,则 $q 将被设置为空字符串。

  3. 如果 $q 存在且非空,代码将进入一个条件判断结构,检查 $q 的值,并根据其值输出不同的网站链接。例如,如果 $q 的值是 'RUNOOB',它将输出 "菜鸟教程" 以及对应的链接。

  4. 如果 $q 不存在或为空,代码将输出一个HTML表单,允许用户从下拉列表中选择一个站点,然后提交表单。

  5. 表单的 action 属性空字符串,这意味着表单提交将刷新当前页面

  6. method="get" 指定了表单提交使用GET方法。

  7. <select name="q"> 创建了一个下拉选择菜单,name="q" 表示选中的值将作为 q 参数发送。

  8. 表单中包含了三个 <option> 元素,分别对应 "Runoob"、"Google" 和 "Taobao"。

  9. value="": 这是 <option> 标签的 value 属性,它指定了当该选项被选中时,将发送到服务器的值。在这个例子中,value 属性是空的,意味着如果这个选项被提交,将不会发送任何值。

  10. 最后,表单包含了一个提交按钮。

整个脚本的逻辑是:如果用户通过GET请求提交了一个 q 参数,脚本将输出对应的网站链接;如果用户没有提交 q 参数,脚本将提供一个表单供用户选择一个选项并提交。

isset()

在 PHP 中,isset() 函数用于检查变量是否已设置并且非 NULL。一个变量可以被设置为 NULL,也可以未被设置(未初始化)。isset() 函数对数组元素的检查也适用,如果数组元素未被设置,或者其值为 NULLisset() 会返回 false

2.下拉多选

创建一个多选下拉菜单(通常称为多选框复选框组),需要使用一系列的HTML `<input>` 元素,每个元素的类型为 `checkbox`。PHP可以用于处理表单提交的数据,但创建表单本身是HTML的工作。以下是创建一个简单的多选下拉菜单并用PHP处理表单提交的示例:

<?php
// 检查是否已经接收到了表单数据
if ($_SERVER['REQUEST_METHOD'] == 'POST') {
    // 检查是否有选择被选中
    if (isset($_POST['options'])) {
        // 输出选中的选项
        echo "您选择了:";
        $options = $_POST['options']; // 获取所有选中的选项
        foreach ($options as $option) {
            echo "$option ";
        }
    } else {
        echo "您没有选择任何选项。";
    }
}
?>

<!DOCTYPE html>
<html lang="en">
<head>
    <meta charset="UTF-8">
    <title>多选下拉菜单示例</title>
</head>
<body>
    <form action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]); ?>" method="post">
        <p>请选择您感兴趣的主题:</p>
        <input type="checkbox" name="options[]" value="RUNOOB" id="RUNOOB">
        <label for="RUNOOB">Runoob</label><br>
        
        <input type="checkbox" name="options[]" value="GOOGLE" id="GOOGLE">
        <label for="GOOGLE">Google</label><br>
        
        <input type="checkbox" name="options[]" value="TAOBAO" id="TAOBAO">
        <label for="TAOBAO">Taobao</label><br>
        
        <input type="submit" value="提交">
    </form>
</body>
</html>

这段代码做了以下几件事:

  1. 首先,PHP代码块检查是否通过POST方法接收到了表单数据。

  2. 如果接收到了数据,并且$_POST['options']被设置(意味着至少有一个复选框被选中),则遍历所有选中的选项,并将它们输出到页面上。

  3. 如果没有选项被选中,输出提示用户没有选择任何选项。

  4. HTML部分创建了一个表单,其中包含三个复选框供用户选择。每个复选框的name属性都设置为options[],这允许用户选择多个选项。

  5. 当用户点击提交按钮时,表单会通过POST方法将选中的选项数据发送到同一个页面(由$_SERVER["PHP_SELF"]确定)。

  6. PHP代码块在页面顶部,这样当表单提交时,它会在显示表单之前执行。

3.单选按钮

<?php
$q = isset($_GET['q'])? htmlspecialchars($_GET['q']) : '';
if($q) {
        if($q =='RUNOOB') {
                echo '菜鸟教程<br>http://www.runoob.com';
        } else if($q =='GOOGLE') {
                echo 'Google 搜索<br>http://www.google.com';
        } else if($q =='TAOBAO') {
                echo '淘宝<br>http://www.taobao.com';
        }
} else {?><form action="" method="get"> 
    <input type="radio" name="q" value="RUNOOB" />Runoob
    <input type="radio" name="q" value="GOOGLE" />Google
    <input type="radio" name="q" value="TAOBAO" />Taobao
    <input type="submit" value="提交">
</form><?php
}
?>

表单验证

<!DOCTYPE HTML> 
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
<style>
.error {color: #FF0000;}
</style>
</head>
<body> 

<?php
// 定义变量并默认设置为空值
$nameErr = $emailErr = $genderErr = $websiteErr = "";
$name = $email = $gender = $comment = $website = "";

if ($_SERVER["REQUEST_METHOD"] == "POST")
{
    if (empty($_POST["name"]))
    {
        $nameErr = "名字是必需的";
    }
    else
    {
        $name = test_input($_POST["name"]);
        // 检测名字是否只包含字母跟空格
        if (!preg_match("/^[a-zA-Z ]*$/",$name))
        {
            $nameErr = "只允许字母和空格"; 
        }
    }
    
    if (empty($_POST["email"]))
    {
      $emailErr = "邮箱是必需的";
    }
    else
    {
        $email = test_input($_POST["email"]);
        // 检测邮箱是否合法
        if (!preg_match("/([\w\-]+\@[\w\-]+\.[\w\-]+)/",$email))
        {
            $emailErr = "非法邮箱格式"; 
        }
    }
    
    if (empty($_POST["website"]))
    {
        $website = "";
    }
    else
    {
        $website = test_input($_POST["website"]);
        // 检测 URL 地址是否合法
        if (!preg_match("/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i",$website))
        {
            $websiteErr = "非法的 URL 的地址"; 
        }
    }
    
    if (empty($_POST["comment"]))
    {
        $comment = "";
    }
    else
    {
        $comment = test_input($_POST["comment"]);
    }
    
    if (empty($_POST["gender"]))
    {
        $genderErr = "性别是必需的";
    }
    else
    {
        $gender = test_input($_POST["gender"]);
    }
}

function test_input($data)
{
    $data = trim($data);
    $data = stripslashes($data);
    $data = htmlspecialchars($data);
    return $data;
}
?>

<h2>PHP 表单验证实例</h2>
<p><span class="error">* 必需字段。</span></p>
<form method="post" action="<?php echo htmlspecialchars($_SERVER["PHP_SELF"]);?>"> 
   名字: <input type="text" name="name" value="<?php echo $name;?>">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   E-mail: <input type="text" name="email" value="<?php echo $email;?>">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址: <input type="text" name="website" value="<?php echo $website;?>">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   备注: <textarea name="comment" rows="5" cols="40"><?php echo $comment;?></textarea>
   <br><br>
   性别:
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="female") echo "checked";?>  value="female">女
   <input type="radio" name="gender" <?php if (isset($gender) && $gender=="male") echo "checked";?>  value="male">男
   <span class="error">* <?php echo $genderErr;?></span>
   <br><br>
   <input type="submit" name="submit" value="Submit"> 
</form>

<?php
echo "<h2>您输入的内容是:</h2>";
echo $name;
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

php中使用了正则表达式

  • 9
    点赞
  • 30
    收藏
    觉得还不错? 一键收藏
  • 4
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 4
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值