数据库插入为空
发布于:2022-01-17 09:50:54
#1 sunnyever
用户提交一个数据
$contents =trim(urldecode($this->spArgs('contents ')));
而我做了一个不为空插入数据库的动作
if(!empty($contents))
{
$res=spClass('db')->create(array('contents'=>$contents,'time'=>time()));
}
最后发现却有用户可以提交空的contents到数据库里面去,这个是为什么呢?
2012-11-21 14:46:22
#2 jake
看到的空,不一定真的空。估计你用phpmyadmin之类的看的吧。
用程序从数据库里面输出那些你觉得是空的contents,或者用strlen等来探测contents的长度。那么你就能知道用户输入的是什么东西了
2012-11-21 15:55:12
#3 sunnyever
数据库 length('contents')长度为0...后来我也增加了strlen($contents) > 0来作为判断条件.最后contents依然为空...time正常
2012-11-21 16:28:08
#4 jake
我说的是你把你在phpmyadmin看到是空的记录,查询出来显示在页面上,然后再
用strlen检查已经查出来的content,不是说入库之前!
你前面的都是插入前检查,我建议你是等插入记录后,输出看看是什么东西。strlen>0即使你看到空白,content也不是空白,明白吗?
2012-11-21 16:45:53
#5 sunnyever
谢谢jake回答
你说我知道,我已经用sql语句查询过content,长度是0,刚刚也用你说的方法,在程序上查询出来检查长度也是0..对了,还有说明,这里面属于非正常提交,
但是程序判断不为空,插入数据之后却为空,这让我不解...流程如下
页面jsonp提交数据(非正常提交可能是任何的字符)->urldecode处理->trim处理->!empty判读->数组形式插入数据库
2012-11-21 17:24:13
#6 jake
查询出来肯定长度不可能是0的。
一步步来看:
1. 数组插入,没什么好说的。
2. !empty,这是关键,如果是empty,那么就为空了,所以!empty一定是非空,也就是这步的时候,contents是有值的。
3. trim没什么用,只能把两边空格去掉,包括几个特殊字符,不过特殊字符多着呢(比如说UTF8的BOM那三个隐形字符,这只是举例)。
http://cn2.php.net/manual/zh/function.trim.php4. urldecode和jsonp这两个不涉及到过滤。
综上,我估计是被提交了特殊字符,所以在看的时候显示不出来,但是可以通过!empty的检查。
其实可以这样看,在
f(!empty($contents))
{
echo urlencode($contents);
或者 var_dump($contents);
xxx
}
2012-11-21 20:05:59