关于spArgs的问题,请jake测试

#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']));
}


输出:
unamed1281194222.jpg

2010-08-07 23:19:32

#12 jake

?我弄了个checked的,就是默认勾选的那种给你看看,呵呵。
t3.rar
abc.jpg

2010-08-07 23:22:58

#13 azwl

t3
选中一个
0004.jpg

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