• 微信号
目录

php基础

您当前的位置:首页 > 我的笔记 > php基础>php与web表单

php与web表单

web主要用来在网页中发送数据到服务器,如,提交注册信息时需要用到表单,当用户填写完信息后提交操作,就会将表单的内容从用户浏览器传送到服务器端,经过服务器上的php程序进行处理后,再将用户所需要的信息传递回客户端浏览器上。

表单组成

一个完整的表单由两个部分组成,分别是表单标签和表单元素。

1.表单标签

表单标签是用form标记来表示,它属于html标签的一种,用来显示和提交数据,基本格式如下

<form action="" name="" method="" enctype="" target="">
	……
</form>

“action”属性用于指定接收数据的路径。“name”属性用于设置表单名称。“method”属性用于设置表单提交方式,可以用GET或POST提交。“enctype”属性用于设置提交数据的编码格式。“target”属性用于设置返回信息的显示格式。

2.表单元素

表单元素是指在表单中的一些元素标签,如<input>、<textarea>等,用于提供用户输入数据的可视化界面

<form>
	<input type="text">   <!--定义用户可输入文本的单行输入字段-->
	<input type="password"> <!-- 定义密码字段。密码字段中的字符会被掩码-->
	<input type="radio"> <!--定义单选按钮。单选按钮允许用户选取给定数目的选择中的一个选项-->
	<input type="checkbox"> <!--定义复选框。复选框允许用户在一定数目的选择中选取一个或多个选项-->
	<input type="file"> <!--用于文件上传-->
	<input type="image"> <!--定义图像形式的提交按钮-->
	<input type="submit"> <!--义提交按钮。提交按钮用于向服务器发送表单数据。数据会发送到表单的 action 属性中指定的页面-->
	<input type="reset"> <!-- 定义重置按钮 -->
	
</form>

获取表单数据

但用户在网站上注册一个账号的时候,在填写完相应的表单后,需要将数据提交给网站后台对数据进行处理或保存。在处理用户提交数据之前,还需要获取表单数据。

一般表单在提交数据时会通过mehtod属性指定调教方式,如果是post提交方式就会使用全局数组$_POST[]来获取表单元素的值。如果是get提交方式则使用全局数组$_GET[]来获取表单元素的值。示例如下

$username=$_POST['username'];
$username=$_GET['username'];

$username表示接收数据的变量名。$_GET和$_POST表示分别使用GET和POST请求提交数据、username表示标签的名称,用于标识哪一个标签的数据

在对表单元素命名时,注意不要出现重名的情况,以免获取属性值时出错

案例:用户注册

<?php
    header('content-type:text/html;charset=utf-8');
    if($_SERVER['REQUEST_METHOD']=='POST'){
        $username=$_POST['name'];
        $userpsd=$_POST['password'];
        $usersex=$_POST['sex'];
        $usertel=$_POST['tel'];
        echo "用户名:".$username."<br>";
        echo "密码:".$userpsd."<br>";
        echo "性别:".$usersex."<br>";
        echo "电话:".$usertel."<br>";
        exit;
    }
?>
<form action="test.php" method="post" enctype="multipart/form-data">
    用户名:<input type="text" name="name"><br><br>
    密码:<input type="password" name="password"><br><br>
    确认密码:<input type="password" name="repassword"><br><br>
    性别: 男<input type="radio" name="sex" value="男">女<input type="radio" name="sex"value="女"> 保密<input type="radio" name="sex" value="保密"><br><br>
    电话: <input type="tel" name="tel"><br><br>
    <input type="submit" value="注册">
    <input type="reset" value="重置">
</form>

输入对应的信息

陵小宇博客-php与web表单

单击“注册”后,运行结果

陵小宇博客-php与web表单

表单安全认证

用户可以将表单数据交给php后台,当获取数据后需要对数据进行处理,但如果用户提交的数据属于非法数据,如,给网页提交一段表单标签,或者浏览器可以执行的javasript代码。此时用户提交的数据可以改变网页的正常处理方式,这必然会给网站安全带来风险

案例

<?php
    header('content-type:text/html;charset=utf-8');
    if($_SERVER['REQUEST_METHOD']=='POST'){
        echo $_POST['content']."<br>";
        exit;
    }
?>
<form action="test.php" method="post">
    留言内容:<br>
    <textarea name="content" style="width: 300px;height: 150px;"></textarea><br><br>
    <input type="submit" value="提交">
</form>

运行上述代码,并在留言中输入以下内容:

<script type="text/javascript">
    while(true){
        alert("中招了!");
    }
</script>
陵小宇博客-php与web表单

点击提交,此时就在页面中循环弹出对话框

陵小宇博客-php与web表单

如以上情况会导致网站出现很多安全问题,而且会使用户无法正常浏览器网页。

为了解决这种问题php提供了strip_tags()函数htmlentities()函数其中strip_tags()函数用于去除字符串中的html和php标记,htmlentities()函数可以将html和php标记转换成字符,以文本的格式输出

由以上案例修改的代码

<?php
    header('content-type:text/html;charset=utf-8');
    if($_SERVER['REQUEST_METHOD']=='POST'){
        echo "<pre>";
        echo "htmlentities()函数输出<br>";
        echo htmlentities($_POST['content'],ENT_NOQUOTES,'UTF-8')."<br>";
        echo "<hr> strip_tags()函数输出<br>";
        echo strip_tags($_POST['content'])."<br>";
        echo "</pre>";
        exit;
    }
?>
<form action="test.php" method="post">
    留言内容:<br>
    <textarea name="content" style="width: 300px;height: 150px;"></textarea><br><br>
    <input type="submit" value="提交">
</form>

在输入同样的代码,提交后的运行结果

陵小宇博客-php与web表单

javascript代码正常输出了,而且用htmllentities()函数过滤后的代码是按照文本的形式输出,strip_tags()函数过滤后的代码去除了<script>标记

表单数据验证

为了方便对常见的数据类型进行认证,php语言提供了isset()函数empty()函数is_numeric()函数等,这三个函数用于对表单提交的数据进行验证。关于函数的说明如下

  • isset()函数:用于检测变量是否具有值,包括0、false或者一个空字符串,但不能是null
  • empty()函数:用于检测变量是否具有空值,包括空字符串、0、null或false
  • is_numeric()函数用于检测数字或数字字符串

案例

<?php
    header('content-type:text/html;charset=utf-8');
    if($_SERVER['REQUEST_METHOD']=='POST'){
        if(!isset($_POST['name'])){
            echo "必须输入转账人员";
            exit;
        }
        if(empty($_POST['money'])){
            echo "必须输入非0的转账金额";
            exit;
        }
        if(!is_numeric($_POST['money'])){
            echo "转账金额必须是数字";
            exit;
        }
        echo '转账'.$_POST['money'].'给'.$_POST['name'];
        exit;
    }
?>
<form action="test.php" method="post">
    转账<input type="text" name="money"/>给<input type="text" name="name"/>
    <br>
    <br>
    <input type="submit" value="确认">
</form>

打开浏览器

陵小宇博客-php与web表单

第一次输入:转账0给王五,结果

陵小宇博客-php与web表单

第二次输入:转账abc给王五,结果

陵小宇博客-php与web表单

第三次输入:转账100给王五,结果

陵小宇博客-php与web表单