php编程 之php基础 表单

1 ,php表单

当处理php表单的时候,php能把来自html页面的表单元素自动变成可供php脚本使用的数据。

比如:

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="t3.php" method="post">    <!--action定义的是激发事件以后的下一步动作,其实也就是跳转的目标页面-->
名字: <input type="text" name="fname">    <!--用于获取用户填写的信息的文本框,表单中的name属性是php中定位数据的键-->
年龄: <input type="text" name="age">
<input type="submit" value="提交">    <!--这个是按钮-->
</form>
</body>
</html>
你输入了<?php echo $_POST["fname"] ."  and  ".$_POST["age"] ?>

要注意,这不是异步操作,而是跳转到了另一个页面,所以数据不是通过request得到的,而是通过$_POST传递的,具体的道理还不得而知。

 

php获取单选下拉菜单中的数据:(单选框)

前端html代码

<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="t3.php" method="get">
    <select name="q"> <!--这是一个有下拉列表的select,option的value属性对于html和php传递值至关重要-->
    <option value="">选择一个</option>
    <option value="1">daqingdd</option>
    <option value="2">dahugg</option>
    <option value="3">lilymm</option>
    </select>
<input type="submit" value="提交"> 
</form>
</body>
</html>

后端的t3.php:

<?php
$q=$_GET["q"] ? htmlspecialchars($_GET["q"]) : "";
//在此补充一下htmlspecialchars(),它不会改变内部参数的值,但是它会把这个值封装在html页面显示的格式中,我用var_dump()检测了一下,可以基本认为有没有这个函数都一样,大约是为了方便显示吧。
//var_dump($q);
if ($q)
{
    if($q=='1'){echo "haha daqing how are u?";}
    if($q=='2'){echo "hehe dahu nihao!";}
    if($q=='3'){echo "lily ,come on!";}

}
else
{
    echo "请选择一个选项";
}
?>

多选下拉菜单中的信息如何获取?(下拉菜单好像并不能多选)

 

php如何获取复选框的信息?

t3.html

<html>
<head>
<meta charset="utf-8">
<title>daqing test</title>
</head>
<body>
<form action="t3.php" method="post"> <!--查询方法也已经变了,用的是post-->
    <input type="checkbox" name="q[]" value="daqing">i am daqing<br>    <!--注意复选框的定义格式,type=“checkbox”,name属性是php得到值的基础,value属性的php定义值的键,这些属性一个也不能少-->
    <input type="checkbox" name="q[]" value="dahu">i am dahu<br>
    <input type="checkbox" name="q[]" value="lily">i am lily<br>
    <input type="submit" value="提交"> 
</form>
</body>
</html>

 

t3.php:

<?php
$q=isset($_POST["q"]) ? $_POST["q"] : "";
var_dump($q);  //这个数组不是关联数组,数组直接是用下标排列好的。
if (is_array($q))
{
    $site=array(    //这个数组是提前定义好的,键是前端input元素中的value,值是自己定义的
        "daqing"=>"haha daqing how are u? <br>",
        "dahu"=>"hehe dahu nihao! <br>",
        "lily"=>"lily,come on!<br>",
    );
    foreach($q as $val){//格式:“数组 as 键”,遍历数组$q的键,然后从$val中找到对应的取值。

        echo $site[$val].PHP_EOL;
    }
}
else
{
    echo "请选择一个选项";
}
?>

 2,表单验证

要求:我们必须设计一个表单,包含以下字段:名字,email,url,备注和性别,除此以外,我们还要验证用户输入的信息是否有效且符合格式要求。

//纯html表示方法,t3.html

<html>
<head>
</head>
<body>
<form method="post" action="<?php echo htmlspecialchars($_SERVER['PHP_self']);?>">    <!--备注下,$_SERVER是超全局变量,$_SERVER["PHP_SELF"]返回的是当前正在执行的脚本名字,所以这个页面不跳转,信息直接发到自己页面上-->
<!--PHP_SELF变量据说容易被黑客攻击,所以echo $_SERVER["PHP_SELF"];这段代码要么用htmlspecialchars封装一下,要么改成:<form method="post" action="test_form.php">-->
名字:<input type="text" name="name">
<br>
email:<input type="type" name="email">
<br>
网址:<input type="text" name="website">
<br>
备注:<textarea name="comment" rows="5" cols="40"></textarea>   <!--这是文本域,是可以放置一整段代码的文本框-->
<br>
性别:<input type="radio" name="gender" value="female"><input type="radio" name="gender" value="male">
<br>
<input type="button" name="submit" value="提交">
</form>
</body>
</html>

样子做出来了,但是缺少数据的判断和流动,这个页面就会没有灵魂,所以,这就要用到我们的php了,php当之无愧能做到和html页面完美结合,而且两者结合得具体形象,比js和ajax更加简单易行。

使用表单简单验证数据:先实现必填字段提醒的功能!

    贴士:php中的trim()函数可以去除用户输入数据中不必要的字符,比如空格和tab换行等

               php的stripslashes()函数可以去除用户输入的反斜杠

    注意,以下代码要放在t3.php文件中,或者任意后缀是。php的文件中,html文件是不支持解析php代码的。

<!DOCTYPE HTML> 
<html>
<head>
<meta charset="utf-8">
<title>daqing test</title>
<style>
.error {color: #FF0000;}    //这个是css中的格式的写法,即所有class=“error”的元素都具有颜色是红色的属性。
</style>
</head>
<body> 

<?php
// 定义变量并默认设为空值,
$nameErr = $emailErr = $genderErr = $websiteErr = "";    //事先定义一下各种error变量,留着后头显示出来
$name = $email = $gender = $comment = $website = "";    //事先给需要使用的信息找个变量名,留着后头好称呼

if ($_SERVER["REQUEST_METHOD"] == "POST") {
   if (empty($_POST["name"])) {    
      $nameErr = "名字是必须的。";    //如果用户没有输入名字,那就显示红色提示信息
   } else {
      $name = test_input($_POST["name"]);    //如果用户输入了名字,那就用函数处理一下,test_input是一个函数,作用在于去除用户输入的空白符号和反斜杠
   }

   if (empty($_POST["email"])) {
      $emailErr = "邮箱是必须的。";
   } else {
      $email = test_input($_POST["email"]);
   }

   if (empty($_POST["website"])) {
      $website = "";
   } else {
      $website = test_input($_POST["website"]);
   }

   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']);?>">     //$_SERVER['PHP_SELF'返回脚本的名字,action=这个脚本自己,意思就是表单直接把信息发给自己就行,脚本自带了处理表单信息的程序
   名字: <input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>    //此处嵌的是错误信息,如果程序没有引发错误,$nameErr就是“”空的,虽然也显示,但是值为空,如果引发了错误,使得这个变量有了值,那就会直接打印出来。下面的段落也是同样的道理
   <br><br>
   E-mail: <input type="text" name="email">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址: <input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   备注: <textarea name="comment" rows="5" cols="40"></textarea>
   <br><br>
   性别:
   <input type="radio" name="gender" value="female"><input type="radio" name="gender" 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;    //注意此处,如果用户按照要求输入了信息,那变量就会如实打印出来, 虽然$name的定义和打印不在同一个<?php xxx;?>中,但是他们内部的变量应当是共享的,不然也不能分开写。
echo "<br>";
echo $email;
echo "<br>";
echo $website;
echo "<br>";
echo $comment;
echo "<br>";
echo $gender;
?>

</body>
</html>

除了以上功能以外,还可以添加定制化的内容,比如,我们想把验证过的用户信息放到数据库中,那么我们就可以在<body>标签的末尾添加连接数据库的代码:

<?php
echo "<h2>我来试试php可否直接联系mysql</h2>";
if($name!="")
{
    $conn = mysqli_connect("localhost", "xxx", "xxx","daqingdb");
    if (!$conn) {
        die("Connection failed: " . mysqli_connect_error());
    }
    //echo "连接成功 <br>";    //测试代码的时候用的
    $sql="insert into `ajax_sql`(`name`) values ('$name')";    //仅先插入一个意思意思
    if (mysqli_query($conn,$sql))
    {
        //echo "插入成功!";
    }
    else
    {
        echo "error".mysqli_error("$conn");
    }
}
?>

所以php真的很好用,php不但可以跑在服务端,也可以在用户浏览器上运行。当然了,有人可能会担心我们编辑的php代码会泄露一些信息,实际上不会,比如在chrome中,我们尝试ctrl查看网页源码,发现所有php的代码根本没有显示在页面上。也是很智能了!

3,php表单:验证邮件和url(接上文实例)

php正则相关知识补充:

  preg_match($pattern,$str)意思是从$str中匹配$pattern,匹配到一个符合的项目就会停止,返回1,没有匹配到任何项目就会返回0.

  preg_match_all($pattern,$str,$matcharray)意思是从$str中匹配$pattern,有匹配的就放到$matcharray中,一直匹配到$str结束。

那么我们设计验证就可以采用正则:

  名字name:要求用户输入只有字母和空格,$pattern匹配模式可以写作:^[a-zA-Z ]*$

  邮箱email:要求用户的输入符合xxx @ xxx . xxx的格式,$pattern匹配模式可以写作:[\w\-]+\@[\w\-]+\.[\w\-]+    \w表示的是:[a-zA-Z0-9],+表示的是匹配前面的字符或者字符组一次或者多次。

  网址url:    $pattern匹配模式可以写作:"/\b(?:(?:https?|ftp):\/\/|www\.)[-a-z0-9+&@#\/%?=~_|!:,.;]*[-a-z0-9+&@#\/%=~_|]/i" ,额,看不大很懂,不过没什么关系,这个回头自己写也行。   注意: /b是单词分节符,模式修饰符表示忽略大小写。说句题外话,这个正则表达式可以匹配这样的url:((https://www.daqing.com,这样的也可以:::https://www.daqing.com,哇哇,更看不懂了。

比较严格地验证用户输入:

<!DOCTYPE HTML> 
<html>
<head>
<meta charset="utf-8">
<title>daqing test</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等于“名字是必须的”
        $nameErr = "名字是必须的。";
   } else {    //如果不是空,那我们的$nameErr还是初始状态
        $name = test_input($_POST["name"]);    //我们判定以后选择赋值$nameErr为输入不合法或者不动它。
        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"]);
        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="t3.php"> 
   名字: <input type="text" name="name">
   <span class="error">* <?php echo $nameErr;?></span>
   <br><br>
   E-mail: <input type="text" name="email">
   <span class="error">* <?php echo $emailErr;?></span>
   <br><br>
   网址: <input type="text" name="website">
   <span class="error"><?php echo $websiteErr;?></span>
   <br><br>
   备注: <textarea name="comment" rows="5" cols="40"></textarea>
   <br><br>
   性别:
   <input type="radio" name="gender" value="female"><input type="radio" name="gender" 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>

 

看完表单以后我有些迷茫,因为我发现,好像js和ajax能做的东西,php也可以做,php也可以在本网页上处理并且显示信息,也可以连接查询数据库,可以验证用户输入等等,好像和js冲突,但是细想,还是不冲突的。

为什么这样说呢?php所做的交互实际上都是基于静态网页,传递数据主要靠post 和get(当然了,别的超全局变量也可以),基于用户输入和表单,如果想请求一个网页,然后返回网页的响应到本页面,php还是不可以的,只能用js。但是,不得不说,php还是比js更加直观和简洁,想在哪个html元素中输出信息就去哪个html元素中echo,比js直观。js一般是这样:document.getElementsById(“demo”).innerHTML="xxx“

4,$_GET变量详解

预定义的 $_GET 变量用于收集来自 method="get" 的表单中的值。

//这是表单的html页面
<html>
<head>
<meta charset="utf-8">
<title>菜鸟教程(runoob.com)</title>
</head>
<body>
<form action="welcome.php" method="get">
名字: <input type="text" name="fname">
年龄: <input type="text" name="age">
<input type="submit" value="提交">
</form>
</body>
</html>
//当我们填写姓名为:daqing,年龄为18,点击提交的时候,url实际上是这样的:
http://www.runoob.com/welcome.php?fname=daqing&amp;age=18

//?表示分隔url和后面的信息内容,&表示分隔不同的表单元素的信息,而php在通过网络传送信息的时候,会自动把&变成&amp;

表单域的名称会自动成为 $_GET 数组中的键哦,所以直接这样取值就可以了:<?php echo $_GET["fname"]; ?>

5 $_POST变量详解

在 PHP 中,预定义的 $_POST 变量用于收集来自 method="post" 的表单中的值。

这个就不加代码了,因为通过post提交的信息并不会显示在url上,

 表单域的名称会自动成为 $_POST 数组中的键,这样访问:<?php echo $_POST["fname"]; ?>

从带有 POST 方法的表单发送的信息,对任何人都是不可见的,并且对发送信息的量也没有限制。

预定义的 $_REQUEST 变量包含了 $_GET、$_POST 和 $_COOKIE 的内容。所以用$_REQUEST也是可以的。

转载于:https://www.cnblogs.com/0-lingdu/p/9663238.html

  • 0
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值