PHP基础语法之表单GET与POST

又开始发发之前的内容,挺简单的内容,想想我之前就算这样过来的。

表单生成与访问页面

<?php
/* 输入框表单 */
header("Content-Type: text/html; charset=utf-8");   //html内容
?>
<html>
<head><title>输入框表单演示</title></head>
<body>
<form action="form/input.php" method="get">
    <p>表单一,GET请求</p>
    输入任意ID:<input type="text" name="id" value="" /><br /><!--type指明输入框的类型,name指定输入框的名字,会提交到服务器,value指的是默认值-->
    <input type="submit" name="submit" value="提交表单(input)" /><!--这里将type改变为submit,就变为一个按钮,等效于button,但这里使用了name元素,会导致该值被提交过去-->
    <button type="submit">提交表单(button)</button>
    <p>分析:当使用input提交表单时,$_GET数组中会产生submit这个元素,<br />而使用button提交不会产生submit,说明input标签中的button只有在点击提交时有效</p>
</form>

<hr /><!--华丽的分割线-->

<form action="form/input.php" method="post">
    <p>表单二,POST请求</p>
    用户名:<input name="username" />此处省略type和value的选项,因为type="text"是默认值<br/>
    密码:<input name="pwd" type="password" />使用tyep="password"会使用输入框成为一个密码框<br>
    爱好:<input name="interesting" type="text" value="没有?" />建议将每个type都勾选上,value表示默认值<br>
    <button type="reset">重置(button)</button><!--这里的重置加上type="reset"即可,同时button和input都适合-->
    <input type="reset" value="重置(button)" />
    <button type="submit">提交</button>
</form>

<hr /><!--华丽的分割线-->

<form action="form/input.php" method="post">
    <p>表单三,POST数组</p>
    昵称一:<input name="name[]" type="text" value="" />将name设置为name[]数组的形式<br>
    昵称二:<input name="name[]" type="text" value="" /><br>
    昵称三:<input name="name[]" type="text" value="" /><br>
    昵称四:<input name="name[]" type="text" value="" /><br>
    爱好a一:<input name="in[a][]" type="text" value="" />同样可以将name设置为多维数组的形式in[a][]<br>
    爱好a二:<input name="in[a][]" type="text" value="" /><br>
    爱好b一:<input name="in[b][]" type="text" value="" /><br>
    <button type="submit">提交查看</button>
    <p>这种方式可以发现$_POST['name']同样是一个数组,这属于PHP自身对其进行了解析</p>
</form>

<hr /><!--华丽的分割线-->

<form action="form/input.php?name=OK" method="post">
    <p>表单四,同时POST和GET</p>
    任意字符:<input name="any" value="?" type="text" />
    <button type="submit">提交</button>
</form>

</body>
</html>

输入框表单请求页面 file:form/input.php

<?php
/* 输入框表单请求页面 */
header("Content-Type: text/plain; charset=utf-8");
print_r($_SERVER);  //可以打印出所有的系统信息数组

echo "\n当前表单请求模式为[REQUEST_METHOD]:",$method=$_SERVER['REQUEST_METHOD'],"\n";  //这个表示当前请求为什么类型,如GET,POST

echo "\n普通的表单提交会存放在两个数组当中:\$_GET,\$_POST,获取值只是对去取出对应的值\n";

if($method == "GET"){       //判断是否为GET请求
    echo "\n\n当前GET参数列表为print_r(\$_GET):\n";
    print_r($_GET); //$_GET该数组存储了全部GET请求的参数列表
}
if($method == "POST"){ //判断是否为POST
    echo "\n\n当前POST参数列表为print_r(\$_POST):\n";
    print_r($_POST);

    if(!empty($_GET)){
        //判断$_GET数组是否为空
        echo "当前为POST请求,\$_GET数组非空为print_r(\$_GET):\n";
        print_r($_GET);
    }
}
?>

典型的登录表单,服务器端验证

<?php
/* 登录表单,服务器端验证 */
//header("Content-Type: text/html; charset=utf-8"); //注释掉该行,直接使用html标签指定页面编码
?>
<html xmlns="http://www.w3.org/1999/html">
<head>
    <title>登录表单,服务器验证</title>
    <meta http-equiv="content-type" content="text/html" charset="utf-8" />
</head>
<body>
    <h2>登录表单</h2>
    <form action="form/login_form.php" method="post">
        <p><label>用户名:<input name="username" type="text" value="" /></label></p
        <p><label>密码:<input name="password" type="password" value="" /></label></p>
        <p><label><input name="remember1" type="checkbox" checked="true" />记住我1(不指定value)</label>可发现存在默认值on,checked表示是否勾选</p>
        <p><label><input name="remember2" type="checkbox" value="ok" />记住我2(指定value为ok)</label></p>
        <p><button type="submit">登录</button></p>
    </form>
</body>
</html>

登录表单请求页面 file:form/login_form.php

<?php
/* 登录表单请求页面 */
header("Content-Type: text/plain; charset=utf-8");

echo "登录使用POST请求模式,打印\$_POST数组:\n";
print_r($_POST);

if ($_SERVER['REQUEST_METHOD'] != "POST") {
    echo "当前不是POST登录请求模式\n";
    die("网页到此结束\n"); //die()函数结束当前程序执行,并输出参数
}
echo "\n开始进行登录参数分析:\n";
if (isset($_POST['username'])) {
    if ($_POST['username'] !== "") //进行全等匹配,否则如果提交一个0会同样匹配
        echo "用户名为:" . $_POST['username'];
    else
        echo "用户名为空";
} else
    echo "未提交用户名参数";

echo "\n\n";

if(isset($_POST['password'])){
    if(strlen($_POST['password']) <6)
        echo "密码长度不符,至少六位,当前密码为:".$_POST['password'];
    else
        echo "密码为(此处可能包含空格等):".$_POST['password'];
}else
    echo "未提交密码";

echo "\n\n";

if(isset($_POST['remember1'])){
    echo "记住密码1选项被勾选,且值为:".$_POST['remember1'];
}else
    echo "记住密码1选项未被勾选";

echo "\n\n";

if(isset($_POST['remember2'])){
    echo "记住密码2选项被勾选,且值为:".$_POST['remember2'];
}else
    echo "记住密码2选项未被勾选";
?>

不区分GET和POST的表单请求

<?php /* 不区分GET和POST的表单请求 */ ?>
<html>
<head>
    <title>不区分GET和POST的表单请求</title>
    <meta http-equiv="Content-Type" content="text/html" charset="utf-8" />
</head>
<body>
    <p>GET表单:</p>
    <form action="form/request_form.php" method="get">
        <p><label>姓名:<input name="name" type="text" value="" /></label></p>
        <p><label>电话:<input name="tel" type="text" value="" /></label></p>
        <p><input type="submit" value="确定" /></p>
    </form>
    <hr />
    <p>POST表单:</p>
    <form action="form/request_form.php" method="post">
        <p><label>姓名:<input name="name" type="text" value="" /></label></p>
        <p><label>电话:<input name="tel" type="text" value="" /></label></p>
        <p><input type="submit" value="确定" /></p>
    </form>
    <hr />
    <p>混合表单:</p>
    <form action="form/request_form.php?time=<?php echo time();?>" method="post">
        <!--这里使用php标签调用了一个time()函数输出一个时间戳,可以表示当前的时间-->
        <p><label>姓名:<input name="name" type="text" value="" /></label></p>
        <p><label>电话:<input name="tel" type="text" value="" /></label></p>
        <p><input type="submit" value="确定" /></p>
    </form>
    <hr />
    <p>混合重复表单:</p>
    <form action="form/request_form.php?time=<?php echo time();?>" method="post">
        <!--这里使用php标签调用了一个time()函数输出一个时间戳,可以表示当前的时间-->
        <p><label>姓名:<input name="name" type="text" value="" /></label></p>
        <p><label>电话:<input name="tel" type="text" value="" /></label></p>
        <p><label>时间:<input name="time" type="text" value="<?=@date("Y-m-d H:i:s");?>" /></label></p>
        <!--这里默认会弹出一个警告,在于没有设置时区,因此需要将错误屏蔽,使用@符号即可,或者在之前设置时区-->
        <p><input type="submit" value="确定" /></p>
    </form>
</body>
</html>

REQUEST 表单请求页面 file:form/request_form.php

<?php
/* REQUEST 表单请求页面 */
header("Content-Type: text/plain; charset=utf-8");

echo "输出\$_GET数组:\n";
print_r($_GET);

echo "\n输出\$_POST数组:\n";
print_r($_POST);

echo "\n输出\$_REQUEST数组:\n";
print_r($_REQUEST);
echo '可以发现,当使用混合表单的时候,此处会出现两者的数组集合
当使用单种模式进行提交的时候,此处会一直显示
如果出现重复,会被部分替换覆盖,所以不建议使用'
;
?>

  这算是继续发无聊额存档,有关于PHP表单的,回头看这是好简单的东西,却不知在以前是怎么慢慢磨过来的,还记得自己傻傻分不清POST和GET的时候,也无聊的想起当时用手机写代码的乐趣。

7条评论在“PHP基础语法之表单GET与POST”

写下你最简单的想法