学习PHP——表单

一、表单处理

PHP 超全局变量 $_GET$_POST 用于收集表单数据(form-data)。

使用 <form> 标记创建表单

<form name="表单名称" method="get | post" action="URL" target="target_window">
      在这里放置各种表单控件
</form>
1.简单HTML表单——如何发送并接收表单数据

$_POST["表单控件名称"] 对应name属性
$_GET["表单控件名称"] 对应name属性

下面的例子显示了一个简单的 HTML 表单,它包含两个输入字段和一个提交按钮:

<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">
</form>

</body>
</html>

表单数据是通过 HTTP POST 方法发送的。

如需显示出被提交的数据,可以简单地输出(echo)所有变量。
welcome.php:

<html>
<body>

Welcome <?php echo $_POST["name"]; ?><br>
Your email address is: <?php echo $_POST["email"]; ?>

</body>
</html>

输出:

Welcome Bill
Your email address is Bill.Gates@example.com

使用 HTTP GET 方法也能得到相同的结果:

<html>
<body>

<form action="welcome_get.php" method="get">
Name: <input type="text" name="name"><br>
E-mail: <input type="text" name="email"><br>
<input type="submit">
</form>

</body>
</html>

welcome_get.php:

<html>
<body>

Welcome <?php echo $_GET["name"]; ?><br>
Your email address is: <?php echo $_GET["email"]; ?>

</body>
</html>
2.GET vs. POST

GET 和 POST 都创建数组(例如,array( key => value, key2 => value2, key3 => value3, ...))。此数组包含键/值对,其中的键是表单控件的名称,而值是来自用户的输入数据。

GET 和 POST 被视作 $_GET$_POST。它们是超全局变量,这意味着对它们的访问无需考虑作用域 - 无需任何特殊代码,可以从任何函数、类或文件访问它们。

$_GET 是通过 URL 参数传递到当前脚本的变量数组。

$_POST 是通过 HTTP POST 传递到当前脚本的变量数组。

$_GET$_POST$_REQUEST 的区别?

$_GET 变量接受所有以 get 方式发送的请求,及浏览器地址栏中的 ? 之后的内容。
$_POST 变量接受所有以 post 方式发送的请求,例如,一个 formmethod=post 提交,提交后 php 会处理post 过来的全部变量。
$_REQUEST 支持两种方式发送过来的请求,即 postget 它都可以接受,显示不显示要看传递方法,get 会显示在 url 中(有字符数限制),post 不会在 url 中显示,可以传递任意多的数据(只要服务器支持)。

3.使用方式

(1)GET 可用于发送非敏感的数据

通过 GET 方法从表单发送的信息 对任何人都是可见的(所有变量名和值都显示在 URL 中)。
GET 对所发送信息的数量也有限制。限制在大约 2000 个字符。
不过,由于变量显示在 URL 中,把页面添加到书签中也更为方便。

注释:所以在发送密码或其他敏感信息时,不应该使用这个方法!
然而,正因为变量显示在 URL 中,因此可以在收藏夹中收藏该页面。在某些情况下,这是很有用的。
注释:HTTP GET 方法不适合大型的变量值。它的值是不能超过 2000 个字符的。

(2)POST 可用于发送表单数据(密码、敏感信息)

通过 POST 方法从表单发送的信息 对其他人是不可见的(所有名称/值会被嵌入 HTTP 请求的主体中),并且对所发送信息的数量也无限制。

此外 POST 支持高阶功能,比如在向服务器上传文件时进行 multi-part 二进制输入。
不过,由于变量未显示在 URL 中,也就无法将页面添加到书签。

4.PHP 获取数据

PHP 下拉菜单单选
表单使用 GET 方式获取数据,action 属性值为空表示提交到当前脚本,我们可以通过 selectname 属性获取下拉菜单的值。

<?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 下拉菜单多选
如果下拉菜单是多选的( multiple="multiple"),我们可以通过将设置 select name="q[]" 以数组的方式获取,以下使用 POST 方式提交,代码如下所示:

<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
    $sites = array(
            'RUNOOB' => '菜鸟教程: http://www.runoob.com',
            'GOOGLE' => 'Google 搜索: http://www.google.com',
            'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    foreach($q as $val) {
        // PHP_EOL 为常量,用于换行
        echo $sites[$val] . PHP_EOL;
    }
      
} else {
?>
<form action="" method="post"> 
    <select multiple="multiple" 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 单选按钮表单中 name 属性的值是一致的,value 值是不同的。

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

checkbox 复选框

<?php
$q = isset($_POST['q'])? $_POST['q'] : '';
if(is_array($q)) {
    $sites = array(
            'RUNOOB' => '菜鸟教程: http://www.runoob.com',
            'GOOGLE' => 'Google 搜索: http://www.google.com',
            'TAOBAO' => '淘宝: http://www.taobao.com',
    );
    foreach($q as $val) {
        // PHP_EOL 为常量,用于换行
        echo $sites[$val] . PHP_EOL;
    }
      
} else {
?><form action="" method="post"> 
    <input type="checkbox" name="q[]" value="RUNOOB"> Runoob<br> 
    <input type="checkbox" name="q[]" value="GOOGLE"> Google<br> 
    <input type="checkbox" name="q[]" value="TAOBAO"> Taobao<br>
    <input type="submit" value="提交">
</form>
<?php
}
?>

二、PHP 表单验证

1.表单元素

HTML 表单代码如下所示:

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

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

$_SERVER["PHP_SELF"]是超级全局变量,返回当前正在执行脚本的文件名,与 document root相关。
所以, $_SERVER["PHP_SELF"] 会发送表单数据到当前页面,而不是跳转到不同的页面。

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

& (和号) 成为 &amp;
" (双引号) 成为 &quot;
' (单引号) 成为 &#039;
< (小于) 成为 &lt;
> (大于) 成为 &gt;

当用户提交表单时,我们将做以下两件事情:

使用 PHP trim() 函数去除用户输入数据中不必要的字符 (如:空格,tab,换行)。
使用PHP stripslashes()函数去除用户输入数据中的反斜杠 ()

接下来让我们将这些过滤的函数写在一个我们自己定义的函数中,这样可以大大提高代码的复用性。
将函数命名为 test_input(),通过$_SERVER["REQUEST_METHOD"]来检测表单是否被提交 。如果 REQUEST_METHODPOST, 表单将被提交 - 数据将被验证。如果表单未提交将跳过验证并显示空白。

<?php
// 定义变量并默认设置为空值
$name = $email = $gender = $comment = $website = "";
 
if ($_SERVER["REQUEST_METHOD"] == "POST")
{
  $name = test_input($_POST["name"]);
  $email = test_input($_POST["email"]);
  $website = test_input($_POST["website"]);
  $comment = test_input($_POST["comment"]);
  $gender = test_input($_POST["gender"]);
}
 
function test_input($data)
{
  $data = trim($data);
  $data = stripslashes($data);
  $data = htmlspecialchars($data);
  return $data;
}
?>
2.必须字段

用html的required属性,也可以用php的empty()

<?php
if ($_SERVER["REQUEST_METHOD"] == "POST") {
  if (empty($_POST["name"])) {
    $nameErr = "名字是必需的。";
  } else {
    $name = test_input($_POST["name"]);
  }
}
?>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);?>"> 
   名字: <input type="text" name="name">
  <span class="error">* <?php echo $nameErr;?></span>
  <br><br>
</form>
3.PHP表单—验证邮件和URL

用正则表达式验证信息。
preg_match — 进行正则表达式匹配。
语法:
int preg_match ( string $pattern , string $subject [, array $matches [, int $flags ]] )
在 subject 字符串中搜索与 pattern 给出的正则表达式相匹配的内容。
如果提供了 matches ,则其会被搜索的结果所填充。$matches[0] 将包含与整个模式匹配的文本,$matches[1] 将包含与第一个捕获的括号中的子模式所匹配的文本,以此类推。

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

三、PHP变量——resquest、cookie和Session

1.PHP $_REQUEST 变量

预定义的 R E Q U E S T 变 量 包 含 了 ‘ _REQUEST 变量包含了 ` REQUEST_GET P O S T ‘ 和 ‘ _POST` 和 ` POST_COOKIE` 的内容。

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

例子:接受 $_GET$_POST等数据:

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

cookie 常用于识别用户。cookie 是一种服务器留在用户计算机上的小文件。每当同一台计算机通过浏览器请求页面时,这台计算机将会发送 cookie。通过 PHP,您能够创建并取回 cookie 的值。

(1)创建cookie
setcookie() 函数用于设置 cookie。

注释:setcookie() 函数必须位于 <html> 标签之前。

语法:setcookie(name, value, expire, path, domain);
例子:创建名为 “user” 的 cookie,把为它赋值 “Alex Porter”。我们也规定了此 cookie 在一小时后过期。

<?php 
  setcookie("user", "Alex Porter", time()+60*60);
?>

(2)取回cookie
PHP 的 $_COOKIE 变量用于取回 cookie 的值。

<?php
// 输出 cookie 值
echo $_COOKIE["user"];

// 查看所有 cookie
print_r($_COOKIE);
?>

使用 isset() 函数来确认是否已设置了 cookie:

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>

<?php
if (isset($_COOKIE["user"]))
    echo "欢迎 " . $_COOKIE["user"] . "!<br>";
else
    echo "普通访客!<br>";
?>

</body>
</html>

(3)删除cookie
当删除 cookie 时,应当使过期日期变更为过去的时间点。

<?php
// 设置 cookie 过期时间为过去 1 小时
setcookie("user", "", time()-3600);
?>

(4)如果浏览器不支持 Cookie
如果应用程序需要与不支持 cookie 的浏览器打交道,可使用其他的办法在您的应用程序中的页面之间传递信息:通过表单传递数据。

3.PHP Session

PHP session 变量用于存储关于用户会话(session)的信息,或者更改用户会话(session)的设置。

Session 变量存储单一用户的信息,并且对于应用程序中的所有页面都是可用的。
它通过在服务器上存储用户信息以便随后使用(比如用户名称、购买商品等)。然而,会话信息是临时的,在用户离开网站后将被删除。如果您需要永久存储信息,可以把数据存储在数据库中。

Session 的工作机制是:为每个访客创建一个唯一的 id (UID),并基于这个 UID 来存储变量。UID 存储在 cookie 中,或者通过 URL 进行传导。

(1)开始 PHP Session
把用户信息存储到 PHP session 中之前,首先必须启动会话。
session_start() 函数必须位于 <html> 标签之前:

<?php session_start(); ?>
它会向服务器注册用户的会话,可以开始保存用户信息,同时会为用户会话分配一个 UID<html>
<body>
 
</body>
</html>

(2)存储 Session 变量
存储和取回 session 变量的正确方法是使用 PHP $_SESSION 变量。
简单的 page-view 计数器:

<?php
session_start();
 
if(isset($_SESSION['views']))
{
    $_SESSION['views']=$_SESSION['views']+1;  //浏览量
}
else
{
    $_SESSION['views']=1;   //没有设定session值就这里设定
}
echo "浏览量:". $_SESSION['views'];
?>

(3)销毁Session
删除某些 session 数据,可以使用 unset() ,删除所有使用 session_destroy() 函数。

unset() 函数用于释放指定的 session 变量:

<?php
session_start();
if(isset($_SESSION['views']))
{
    unset($_SESSION['views']);
}
?>

session_destroy() 函数将重置 session,从而彻底销毁 session,会失去所有已存储的 session 数据。

<?php
session_destroy();
?>
  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值