关于spArgs的问题,请jake测试
发布于:2022-01-17 09:50:54
#1 azwl
用spArgs无法准确获取checkbox值
httm代码
php:
$ck=$this->spArgs('myck')和$ck=$this->spArgs('myck',false,'post')都不能准确获取值
用
$ck=$_POST['myck']
是OK的
2010-08-07 06:26:23
#2 jake
$this->spArgs就是调用$_REQUEST(包括$_GET、$_POST、$_SESSION、$_COOKIE)的,为什么取不到呢?
建议楼主可以dump($_REQUEST)出来看看自己的全部传参有无问题,另外,$_REQUEST是PHP自带的环境变量!
注意看看你的SESSION和COOKIE内是否有同名的变量。
2010-08-07 09:13:12
#3 azwl
总算找到BUG所在了。
/**
* 检测是否存在某值
*
* @param name 待检测的环境变量名称
*/
public function has($name)
{
return isset($this->args[$name]) && ( strlen(trim($this->args[$name])) > 0 );
}
我觉得只要前一个条件就可以了
return isset($this->args[$name]) ;
2010-08-07 11:57:12
#4 jake
就算是数组,( strlen(trim($this->args[$name])) > 0 的判断也是成立的,因为数组被强制变成字符串时是Array。
2010-08-07 18:37:35
#5 azwl
为了查找自己的问题所在,今天测试了一个上午。
$_REQUEST
$_POST
$_GET
$_COOKIE
$_SESSION
都得到正确的值
就是$this->spArgs('checkbox')没有值,问题就出在 strlen(trim($this->args[$name])等于0
去掉第二个条件$this->spArgs('checkbox')得到准确值
刚才在家里的机子上又测试了以下代码
$a=array(1,2,3,4,5,6);
$b=array('aa'=>$a);
echo strlen(trim($b['aa']));
?>
输出是0
2010-08-07 21:01:07
#6 jake
这里发个例子,看一下
t.rar
2010-08-07 22:37:40
#7 jake
还可以把例子中send动作改成
function send(){
dump($this->spArgs());
echo strlen(trim($this->spArgs('b')));
echo strlen(trim($_POST['b']));
}
看看strlen(trim($this->args[$name]))的输出是什么
Array是5个字符
=======================
对了,无论如何,感谢楼主的热心研究:handshake
2010-08-07 22:49:40
#8 azwl
我很认真的测试你的例子
test.html
dump($this->spArgs())有输出
dump($this->spArgs('b'))没输出
2010-08-07 23:00:46
#9 jake
我加上了$this->spArgs('b')你再试试。哦,对了,是要勾选才有值的,不勾选是没值的。
t2.rar
2010-08-07 23:08:51
#10 azwl
echo strlen(trim($this->spArgs('b')));
echo strlen(trim($_POST['b']));
输出两个0
2010-08-07 23:13:02
#11 azwl
function send(){
dump($this->spArgs());
echo'========
';
echo strlen(trim($this->spArgs('b')));
echo'========
';
echo strlen(trim($_POST['b']));
}
输出:
2010-08-07 23:19:32
#12 jake
?我弄了个checked的,就是默认勾选的那种给你看看,呵呵。
t3.rar
2010-08-07 23:22:58
#13 azwl
t3
选中一个
2010-08-07 23:28:13
#14 azwl
问题在哪里?
我的php是 5.3.1
2010-08-07 23:30:51
#15 jake
问题在哪里?
我的php是 5.3.1
azwl 发表于 2010-8-7 23:30
嗯,这两天我搭建了PHP5.3的环境来测试看看。刚才查找一下没有能看到PHP5.3对于数组的说明,还是直接测试来的明确些。
2010-08-08 00:20:27
#16 jake
通过PHP5.3的环境测试,已经证明了楼主是对的。
在PHP5.3中,trim和strlen不能对数组产生作用,所以这里已经更新了删除判断参数长度的代码。
网站上的speedphp和svn上面的同时更新,楼主可以下载新的框架文件覆盖即可。
感谢楼主的热心支持!
PS:颁发个论坛勋章给楼主,小小意思,感谢楼主的热心。
2010-08-08 01:47:55
#17 superphp
看到修改了,老大挺勤奋的,工作到半夜哦;P
2010-08-08 15:26:53