• 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匹配模式可以写作:"/(?:(?: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("/(?:(?: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也是可以的。

  • 相关阅读:
    使用ATL开发ActiveX控件
    [Silverlight]AutoCompleteBox控件的一个Bug?
    [Silverlight]一个简单的GroupBox控件
    WCF安全之ASP.NET兼容模式
    Mysql 性能优化记录
    【Python+Django+Pytest】数据库异常pymysql.err.InterfaceError: (0, '') 解决方案
    Django在使用logging日志模块时报错无法操作文件 logging error Permission Error [WinError 32]
    isinstance 判断一个对象属于或不属于多种数据类型
    CentOS 系统 查看 cpu核数
    我踩过的python的坑
  • 原文地址:https://www.cnblogs.com/0-lingdu/p/9663238.html
Copyright © 2020-2023  润新知