关于spArgs默认值的问题

#1 SunPSP

spArgs提供了三个参数,常用的是表单name值跟默认值
今天遇上个问题
很常见的功能
当前台表单未填写,传过来空值的时候,自动写入设定的默认值
表单名:fields,默认值:uuid,title,status
查看手册说明,当参数不存在的时候会使用默认值那么spArgs('fields','uuid,title,status')
如果表单不填写的情况下,执行之后数据库中该字段依旧为空,并没有写入默认值uuid,title,status

这里有一个问题,这个不存在是什么概念,是没有这么个表单传入数据还是包含了该表单传入值为空的情况?
在群里问过,某位说为空就是使用默认值,而听着意思发言的人不少都是这个意见
但是实际测试发现表单传入值为空的时候并没有代入默认值依旧使用空值插入数据库

如果用if判断则正常实现需要的功能
if($this->spArgs('fields')=='')$fields='uuid,title,status';
这个句子跟
spArgs('fields','uuid,title,status')
效果上不等价?
这样的话岂不是说如果传入空值,依旧认为值存在,使用空值插入而不用设置的默认值
又或者spArgs()用法不正确?

代码如下:
$$$$uuid=spUUID();
$$$$name=$$$$this->spArgs('name');
$$$$storage=$$$$this->spArgs('storage');
$$$$fields=$$$$this->spArgs('fields','uuid,title,status');
$$$$ordered=$$$$this->spArgs('ordered');
$$$$sql="INSERT INTO {$$$$this->prefix}common_application (uuid,name,storage,fields,ordered) VALUES ('$$$$uuid','$$$$name','$$$$storage','$$$$fields','$$$$ordered')";
$$$$this->insert=spClass('spSQL')->runSql($$$$sql);
如图:
表单的填写
1.jpg
数据库实际插入值:
2.jpg

2013-03-28 16:04:00

#2 coolhpy

看下spController.php的源码就知道了。
首先,spArgs判断存在不存在是通过isset函数来处理的,而不是empty。
其次,不管你表单的input是否有值输入,提交后的数组必然是会有对应的字段的,如:
array(
    'name' => 'value1',
    'storage' => 'value2',
    'fields' => '',
)
所以,除非你提交的表单中不包含fields这个input,否则,用spArgs取到的值一点是空的。提交的数组如果如下,则用spArgs取值时,才会返回默认值。
array(
    'name' => 'value1',
    'storage' => 'value2',
)

2013-03-28 16:40:33

#3 jake

是 “没有这么个表单传入数据”,这个问题在以前曾经经过很长时间的讨论。

焦点在于,空值和空的默认值是相等的,会在很多情况下搞错,不好辨别。

不过一般情况下,这样不会有什么问题。

2013-03-28 16:44:07

#4 SunPSP

coolhpy 发表于 2013-3-28 16:40
看下spController.php的源码就知道了。
首先,spArgs判断存在不存在是通过isset函数来处理的,而不是empty ...
那么一般SP中遇到如果表单传值为空时代入默认值用什么方式实现的比较合适
用if判断、处理传入数组去除空值表单再提交抑或有其他更好的方式?

2013-03-28 17:16:25

#5 jake

SunPSP 发表于 2013-3-28 17:16
那么一般SP中遇到如果表单传值为空时代入默认值用什么方式实现的比较合适
用if判断、处理传入数组去除空 ...
if($this->spArgs('fields')=='')$fields='uuid,title,status';

2013-03-28 18:17:26

#6 小双

sp版本更新到v3.1.89以后就不能用$this->spArgs(“name”,默认值);吗?

2013-04-21 17:57:25

#7 jake

小双 发表于 2013-4-21 17:57
sp版本更新到v3.1.89以后就不能用$this->spArgs(“name”,默认值);吗?
更新没有修改过spArgs,请看版本更新记录

2013-04-21 19:32:49