php非空验证

本文涉及的产品
云数据库 RDS MySQL Serverless,0.5-2RCU 50GB
简介:   我想说这种方法是不是很常用的非空验证,现在的普遍使用的是javascript来验证非空,但是作为学习php的一些知识点,还是可以看看的。 先来看看commit.php中的方法

  我想说这种方法是不是很常用的非空验证,现在的普遍使用的是javascript来验证非空,但是作为学习php的一些知识点,还是可以看看的。

先来看看commit.php中的方法

<?php 
$db = mysql_connect('localhost','root','Ctrip07185419');
mysql_select_db('moviesite',$db) or die(mysql_error($db));
mysql_query('set names "gb2312"',$db);
?>
<!--
<html>
    <head></head>
    <title>Commit</title>
    <body>
-->
<?php
switch($_GET['action'])
{
    case "add":
    {
        switch($_GET['type'])
        {
            case 'movie':
                $error = array();
                $movie_name = isset($_POST['movie_name']) ? trim($_POST['movie_name']) : '';
                if(empty($movie_name))
                {
                    $error[] = urlencode('Please enter an movie name');
                }
                
                $movie_type = isset($_POST['movie_type']) ? trim($_POST['movie_type']) : '';
                if(empty($movie_type))
                {
                    $error[] = urldecode('Please enter an movie type');
                }
                
                $movie_year = isset($_POST['movie_year']) ? trim($_POST['movie_year']) : '';
                if(empty($movie_year))
                {
                    $error[] = urldecode('Please enter an movie year');
                }
                
                $movie_leadactor = isset($_POST['movie_leadactor']) ? trim($_POST['movie_leadactor']) : '';
                if(empty($movie_leadactor))
                {
                    $error[] = urldecode('Please enter an movie leadactor');
                }
                
                $movie_director = isset($_POST['movie_director']) ? trim($_POST['movie_director']) : '';
                if(empty($movie_director))
                {
                    $error[] = urldecode('Please enter an movie director');
                }
                
                $movie_release = isset($_POST['movie_release']) ? trim($_POST['movie_release']) : '';
                if(empty($movie_release))
                {
                    $error[] = urldecode('Please enter an movie release');
                }
                else if(!preg_match('|^\d{2}-\d{2}-\d{4}$|' , $movie_release))
                {
                    $error[] = urlencode('Please enter a date in dd-mm-yyyy format');
                }
                else
                {
                    list($day, $month, $year) = explode('-', $movie_release);
                    if(!checkdate($month , $day , $year))
                    {
                        $error[] =  urldecode('please enter a validate date');
                    }
                    else
                    {
                        $movie_release = mktime(0, 0, 0, $month, $day, $year);
                    }
                }

                $movie_rating = isset($_POST['movie_rating']) ? trim($_POST['movie_rating']) : '';
                if(empty($movie_rating))
                {
                    $error[] = urldecode('Please enter an movie leadactor');
                }
                else if(!is_numeric($movie_rating))
                {
                    $error[] = urlencode('Please enter a numeric rating');
                }
                else if($movie_rating < 0 || $movie_rating > 10)
                {
                    $error[] = urlencode('Please enter a rating between 1 and 10');
                }
                
                if(empty($error))
                {    
                    //var_dump($movie_rating);
                    //注意是movie_type不是mvioe_type,大错特错
                    $query = 'insert into movie(movie_name,movie_year,movie_type,movie_leadactor,movie_director,movie_release,movie_rating) 
                    values("'.$movie_name.'",'.$movie_year.','.$movie_type.','.$movie_leadactor.','.$movie_director.','.$movie_release.','.$movie_rating.')';
                
                    
                }
                else
                {
                    //注意是Location不是Lacotion,大错特错
                    header('Location:movie_checkformat.php?action=add&error=' . join($error , urlencode('<br />')));
                    //var_dump($error);    
                    //var_dump($_POST);
                }
            break;
        }
        break;
    }
    case 'edit':
        switch($_GET['type'])
        {
            case 'movie':
            {
                $error = array();
                $movie_name = isset($_POST['movie_name']) ? trim($_POST['movie_name']) : '';
                if(empty($movie_name))
                {
                    $error[] = urlencode('Please enter an movie name');
                }
                
                $movie_type = isset($_POST['movie_type']) ? trim($_POST['movie_type']) : '';
                if(empty($movie_type))
                {
                    $error[] = urldecode('Please enter an movie type');
                }
                
                $movie_year = isset($_POST['movie_year']) ? trim($_POST['movie_year']) : '';
                if(empty($movie_year))
                {
                    $error[] = urldecode('Please enter an movie year');
                }
                
                $movie_leadactor = isset($_POST['movie_leadactor']) ? trim($_POST['movie_leadactor']) : '';
                if(empty($movie_leadactor))
                {
                    $error[] = urldecode('Please enter an movie leadactor');
                }
                
                $movie_director = isset($_POST['movie_director']) ? trim($_POST['movie_director']) : '';
                if(empty($movie_director))
                {
                    $error[] = urldecode('Please enter an movie director');
                }
                
                $movie_release = isset($_POST['movie_release']) ? trim($_POST['movie_release']) : '';
                if(empty($movie_release))
                {
                    $error[] = urldecode('Please enter an movie release');
                }
                else if(!preg_match('|^\d{2}-\d{2}-\d{4}$|' , $movie_release))
                {
                    $error[] = urlencode('Please enter a date in dd-mm-yyyy format');
                }
                else
                {
                    list($day, $month, $year) = explode('-', $movie_release);
                    if(!checkdate($month , $day , $year))
                    {
                        $error[] =  urldecode('please enter a validate date');
                    }
                    else
                    {
                        $movie_release = mktime(0, 0, 0, $month, $day, $year);
                    }
                }

                $movie_rating = isset($_POST['movie_rating']) ? trim($_POST['movie_rating']) : '';
                if(empty($movie_rating))
                {
                    $error[] = urldecode('Please enter an movie leadactor');
                }
                else if(!is_numeric($movie_rating))
                {
                    $error[] = urlencode('Please enter a numeric rating');
                }
                else if($movie_rating < 0 || $movie_rating > 10)
                {
                    $error[] = urlencode('Please enter a rating between 1 and 10');
                }                
                
                if(empty($error))
                {
                    //var_dump($_POST);
                    $query = 'update movie set 
                    movie_name="'.$_POST['movie_name'].'", 
                    movie_type='.$_POST['movie_type'].', 
                    movie_year='.$_POST['movie_year'].', 
                    movie_leadactor='.$_POST['movie_leadactor'].', 
                    movie_director='.$_POST['movie_director']. ' 
                    movie_release='.$_POST['movie_release'].' 
                    movie_rating='.$_POST['movie_rating'].' 
                    where movie_id='.$_POST['movie_id'];            
                }
                else
                {
                    //注意是Location不是Lacotion,大错特错
                    header('Location:movie_checkformat.php?action=add&error=' . join($error , urlencode('<br />')));
                }
            }
            break;
        }
        break;
    default:
    break;
}
if(isset($query))
{
    mysql_query($query,$db) or die(mysql_error($db));
}
?>
<html>
    <head>
        <title>Commit</title>
    </head>
    <body>
        <p>Done!</p>
    </body>
</html>

其实逻辑很简答的,看下面的代码

$movie_leadactor = isset($_POST['movie_leadactor']) ? trim($_POST['movie_leadactor']) : '';
if(empty($movie_leadactor))
{
$error[] = urldecode('Please enter an movie leadactor');
}

其实就是使用isset方法来验证输入是否为空,如果是空的话把错误信息记入到一个数组$error中,然后使用header方法跳转到填写信息的页面中,跳转的方法看上去有点糟糕,如下header('Location:movie_checkformat.php?action=add&error=' . join($error , urlencode('<br />')));,是将所有错误信息使用换行符来连接起来放到url中来跳转,很我觉得这个有点不合适的。

 

来看填写信息的页面movie_checkformat.php,

<?php 
$db = mysql_connect('localhost','root','Ctrip07185419') or die('can not connect to mysql');
mysql_select_db('moviesite',$db) or die(mysql_error($db));
mysql_query('set names gbk',$db);
if(isset($_GET['action']) && $_GET['action'] == 'edit') 
{
    $query = 'SELECT movie_name,movie_type,movie_year,movie_leadactor,movie_director,movie_release,movie_rating FROM movie WHERE movie_id='.$_GET['id'];
    //echo $query;
    $result = mysql_query($query , $db) or die(mysql_error($db));
    extract(mysql_fetch_assoc($result));
}
else
{
    $movie_name='';
    $movie_type=0;
    $movie_year=date('Y');
    $movie_leadactor=0;
    $movie_director=0;
    $movie_release=time();
    $movie_rating=5;
}
?>
<html>
    <head>
        <title><?php echo ucfirst($_GET['action']);?> Movie</title>
        <style type="text/css">
         <!--
            #error { background-color: #600; border: 1px solid #FF0; color: #FFF; text-align: center; margin: 10px; padding: 10px; }
        -->
        </style>
    </head>
    <body> 
        <?php 
            if(isset($_GET['error']) && $_GET['error'] != '')
            {
                echo '<div id="error">'.$_GET['error'].'</div>';
            }
        ?>
        <form action="commit.php?action=<?php echo $_GET['action'];?>&type=movie" method="post"> 
            <table>
                <tr>
                    <td>Movie Name</td>
                    <td><input type="text" name="movie_name" value="<?php echo $movie_name;?>"/></td>
                </tr>
                <tr>
                    <td>Movie Type</td>
                    <td><select name="movie_type" id="">
                    <?php 
                        $query = 'select movietype_id,movietype_label from movietype order by movietype_label';
                        $result = mysql_query($query , $db) or die(mysql_error($db));
                        while($row = mysql_fetch_assoc($result))
                        {
                            if($row['movietype_id'] == $movie_type)
                            {
                                echo '<option value="'.$row["movietype_id"].'" selected="selected">'.$row["movietype_label"].'</option>';
                            }
                            else
                            {
                                echo '<option value="'.$row["movietype_id"].'">'.$row["movietype_label"].'</option>';
                            }
                        }
                    ?>
                    </select></td>
                </tr>
                <tr>
                    <td>Movie Year</td>
                    <td><select name="movie_year" id="">
                    <?php 
                        for($yr = date('Y');$yr>1970;$yr--)
                        {
                            if($yr == $movie_year)
                            {
                                echo '<option value="'.$yr.'" selected="selected">'.$yr.'</option>';
                            }
                            else
                            {
                                echo '<option value="'.$yr.'">'.$yr.'</option>';
                            }
                        }
                    ?>
                    </select></td>
                </tr>
                <tr>
                    <td>Lead actor</td>
                    <td><select name="movie_leadactor" id="">
                    <?php 
                        $query = 'select people_id,people_fullname from people where people_isactor = 1 order by people_fullname';
                        $result = mysql_query($query,$db) or die(mysql_error($db));
                        while($row = mysql_fetch_assoc($result))
                        {
                            if($row["people_id"] == $movie_leadactor)
                            {
                                echo '<option value="'.$row["people_id"].'" selected="selected">'.$row["people_fullname"].'</option>';
                            }
                            else
                            {
                                echo '<option value="'.$row["people_id"].'">'.$row["people_fullname"].'</option>';
                            }
                            
                        }
                    ?>
                    </select></td>
                </tr>
                <tr>
                    <td>Director</td>
                    <td><select name="movie_director" id="">
                    <?php
                        $query = 'select * from people where people_isdirector=1 order by people_fullname';
                        $result = mysql_query($query , $db) or die(mysql_error($db));
                        while($row = mysql_fetch_assoc($result))
                        {
                            if($row['people_id'] == $movie_director)
                            {
                                echo '<option value="'.$row['people_id'].'" selected="selected">'.$row["people_fullname"].'</option>';
                            }
                            else
                            {
                                echo '<option value="'.$row['people_id'].'">'.$row["people_fullname"].'</option>';
                            }
                        }
                    ?>
                    </select></td>
                </tr>
                <tr>
                    <td>Movie release date <br /><small>(dd-mm-YYYY)</small></td>
                    <td>
                        <input type="text" name="movie_release" value="<?php echo date('d-m-y' , $movie_release);?>" />
                    </td>
                </tr>
                <tr>
                    <td>Movie rating <br /><small></small></td>
                    <td><input type="text" name="movie_rating" value="<?php echo $movie_rating;?>"/></td>
                </tr>
                <tr>
                    <td colspan="2" style="text-align:center">
                        <?php 
                        if('edit' == $_GET['action'])
                        {
                            echo '<input type="hidden" value="'.$_GET["id"].'" name="movie_id"/>';
                        }
                        ?>
                        <input type="submit" name="submit" value="<?php echo ucfirst($_GET['action']);?>"/>
                    </td>
                </tr>
            </table>
        </form>
    </body>
</html>

在html中的body开始的时候如果传递的error参数不为空则输出错误信息,代码如下:

<?php
if(isset($_GET['error']) && $_GET['error'] != '')
{
echo '<div id="error">'.$_GET['error'].'</div>';
}
?>

很简单,这种写法也很糟糕,完全可以放在javascript中来实现,估计实际生产中很少会有人这么写的。

这里顺便看看一些常见的判断方法:

is_array():判断变量是否是一个数组
is_binary(): 判断变量是否是一个二进制串
is_bool():判断布尔类型变量true还是false,1还是0
is_callable(): 判断变量是否是一个可以访问的函数,估计就是判断是否是代理类型

is_int(): 判断整型
is_null(): 判断是否为空
is_numeric():判断是否是数字或者数字形式的字符串吧
is_object(): 判断变量是否是一个对象
is_resource(): 判断资源类型
is_string(): 判断是否是字符串类型
is_unicode(): 判断是否是unicode字符串

某些时候使用is_xx方法比较慢,使用ctype_xx类型的方法较快,但是它只能检验字符串类型,不能检验对象,数组,资源类型。ctype_xx方法举例如下:

ctype_alnum(): 判断变量是否是数字类型字符串
ctype_alpha(): 判断变量全是字符串
ctype_cntrl(): 判断是控制字符,就是转移字符如"\n"
ctype_digit(): 判断字符串全部是数字字符,不包含任何非数组字符"."这样的也不包含
ctype_graph(): 检查是否有任何可打印字符,除了空格(补)
ctype_lower() : 检查小写字母
ctype_print(): 检查是否都是可打印字符,就是不包含转移字符,和ctype_control()是相斥的
ctype_punct(): 检查是否有任何可打印字符而不是空格或字母数字字符
ctype_space(): 检查是否都是空白字符
ctype_upper() : 检查是否都是大写字符
ctype_xdigit(): 检查是否是16进制的字符串,只能包括 “0123456789abcdef”

 

还可以使用preg_match来检验输入,这个是用正则表达式的方式来进行检验的。

作者:Tyler Ning
出处:http://www.cnblogs.com/tylerdonet/
本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须保留此段声明,且在文章页面明显位置给出原文连接,如有问题,可以通过以下邮箱地址williamningdong@gmail.com  联系我,非常感谢。

相关实践学习
基于CentOS快速搭建LAMP环境
本教程介绍如何搭建LAMP环境,其中LAMP分别代表Linux、Apache、MySQL和PHP。
全面了解阿里云能为你做什么
阿里云在全球各地部署高效节能的绿色数据中心,利用清洁计算为万物互联的新世界提供源源不断的能源动力,目前开服的区域包括中国(华北、华东、华南、香港)、新加坡、美国(美东、美西)、欧洲、中东、澳大利亚、日本。目前阿里云的产品涵盖弹性计算、数据库、存储与CDN、分析与搜索、云通信、网络、管理与监控、应用服务、互联网中间件、移动服务、视频服务等。通过本课程,来了解阿里云能够为你的业务带来哪些帮助 &nbsp; &nbsp; 相关的阿里云产品:云服务器ECS 云服务器 ECS(Elastic Compute Service)是一种弹性可伸缩的计算服务,助您降低 IT 成本,提升运维效率,使您更专注于核心业务创新。产品详情: https://www.aliyun.com/product/ecs
目录
相关文章
|
3月前
|
安全 Linux 测试技术
PHP环境配置和验证
PHP环境配置和验证
31 0
|
8月前
|
前端开发 JavaScript 机器人
用PHP实现了一个极验验证功能,如何做?具体代码如何写?
极验验证是一种防机器人的验证机制,可以通过图像识别等方式来判断用户是否为真实用户。
89 1
|
8月前
|
安全 PHP
PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests)
PHP - Laravel 表单验证(验证规则与使用 $this->validate()、Validator::make()、Requests)
145 0
|
4月前
|
PHP 数据库
【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
【PHP学习】—PHP连接数据库实现表单页面的验证功能(七)
|
6月前
|
前端开发 JavaScript API
php的短信验证的流程,如何实现前端js加后端php
php的短信验证的流程,如何实现前端js加后端php
|
8月前
|
前端开发 中间件 API
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
PHP - Laravel CSRF 介绍与用法(及取消 CSRF 验证)
99 0
|
9月前
|
JSON 前端开发 安全
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
ajax中实现访问url已阅即焚的解决方案(url动态参数、变量加密、常量不变、php加密解密、API访问验证方式)
178 0
|
9月前
|
JSON 安全 关系型数据库
php传递url参数加密验证的解决方案(加密解密、安全验证过滤)
php传递url参数加密验证的解决方案(加密解密、安全验证过滤)
241 0
|
9月前
|
存储 算法 前端开发
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
147 0
php动态密码和加密解密函数的使用(动态密码、Discuz核心函数AuthCode、任意输入密码验证)
|
API PHP
PHP开发API接口签名生成及验证
PHP开发API接口签名生成及验证
215 0