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来检验输入,这个是用正则表达式的方式来进行检验的。
php非空验证的更多相关文章
- select标签非空验证,第一个option value=""即可
select标签非空验证,第一个option value=""即可,否则不能验证
- JavaWeb 学习008-今日问题(非空验证尚未解决) 2016-12-2
1. 学生模块list页面 不能正常跳转 说是找不到stuid属性,但是我在entity里面和数据库建表的属性就是stuid:Grade模块代码一样,却可以正常运行 这是什么问题? <c:for ...
- 非空验证(源代码Java版)
import java.util.Map; /** * 非空验证工具类 */ public class UntilEmpty { /** * @see: 验证string类型的是否为空 */ publ ...
- JS非空验证及邮箱验证
非空验证 <body> <table> <tr> <td>姓名:</td> <td><input type="t ...
- Atitit 验证 数字验证 非空验证的最佳算法 h5
Atitit 验证 数字验证 非空验证的最佳算法 h5 <td><select class="searchBox-select" style=" ...
- .NET开源工作流RoadFlow-Bug修改-1.8.2表单验证时ueditor编辑非空验证无效
RoadFlow生成的表单,Ueditor编辑器不能进行非空验证的BUG修改: 1.修改控制器:WorkFlowFormDesignerController红框处: 2.修改js文件:Scripts/ ...
- 单选按钮 设置required属性无法进行非空验证
先看代码: <!DOCTYPE html> <html lang="en"> <head> <meta charset="UTF ...
- JS-表单非空验证
JavaScript 表单验证 JavaScript 可用来在数据被送往服务器前对 HTML 表单中的这些输入数据进行验证. 实例:1.用户名的非空验证代码如下: <head> <m ...
- jquery非空验证功能
<script type="text/javascript"> $(function(){ /************* ...
随机推荐
- Google Java 编程风格指南 —— 见微知著
目录 前言 源文件基础 源文件结构 格式 命名约定 编程实践 Javadoc 后记 前言 这份文档是Google Java编程风格规范的完整定义.当且仅当一个Java源文件符合此文档中的规则, 我们才 ...
- 05 JDK1.5 Lock锁
一.synchronized的再次讨论 使用synchronized关键字来标记一个方法或者代码块,当某个线程调用该对象的synchronized方法或者访问synchronized代码块时, 这个线 ...
- Debian 9 启动后进入命令行
打开 default grub 配置 $ sudo vi /etc/default/grub 修改以下3处内容 1. 找到行 GRUB_CMDLINE_LINUX_DEFAULT="quie ...
- 2.2.2 加入factory机制
上一节给出了一个只有driver.使用UVM搭建的验证平台.严格来说这根本就不算是UVM验证平台,因为UVM的特性几乎一点都没有用到.像上节中my_driver的实例化及drv.main_phase的 ...
- 深入redis内部--实现字符串
redis字符串的定义和实现在Ssd.h和Ssd.c中. 1.定义 typedef char *sds; //本质是字符char的指针 2.字符串的操作 sds sdsnew(const char * ...
- [转]log4net 发布到生产环境不写日志的解决方法--使用 NLog日志
本文转自:http://www.cnblogs.com/weiweictgu/p/5848805.html 1.升级到log4net的最新版 PM下执行 Install-Package log4net ...
- 2017年12月24日 JS跟Jquery基础
js基础 alert();confirm(); 基础语法:与C#一致数据类型及类型转换var (string,decimal)parseInt()parseFloat();isNaN(); 运算符:数 ...
- java线程总结2--wait/notify(all)/sleep以及中断概念
上一篇关于线程的博客简单梳理了一下多线程的一些基本概念,今天这篇博客再进行多线程编程中一些核心的方法进行简单的梳理和总结,主要是wait,sleep和notify方法以及中断的概念 一.中断概念. 在 ...
- 一键安装lamp环境出现的问题
前言:之前安装lamp是独立安装的,安装扩展很方便,现在用这个一键安装包,不知道怎么样,尝试一把. Part1:安装过程中出现的问题 error: utf8_mime2text() has new s ...
- File类的常用方法和练习
File类常用的判断方法 import java.io.File; import java.text.SimpleDateFormat; import java.util.Date; /** * Fi ...