经过测试,在Concrete5中从用户返回的数据不会评估为true

时间:2019-06-02 23:16:01

标签: php string concrete5

我正在将数据从表单存储到用户数据中。

我成功提取了用户数据:

$u = new User();
$ui = UserInfo::getByID($u->getUserID());
$testtype = $ui->getAttribute('TestType','display');

这返回了我期望的结果。但是当我尝试使用...进行评估时

} else if ($testtype == "English Adult Male") {

...它不会触发。

我回显正在提取的输出,并注意到html在变量的回显之后放置了<br>。我试图将输出通过trim传递,但结果相同。

我在做什么错了?

2 个答案:

答案 0 :(得分:1)

通常最好将===代替==进行比较。进一步了解该here

以这种方式更改代码,使其中包含带字符串的$case并同时执行var_dump$case的{​​{1}}

$testtype

上面的代码生成输出:

<?php

$testtype = "English Adult Male ";
$case = "English Adult Male ";
var_dump($testtype);
var_dump($case);

if ($testtype === "whatever") {
    echo "IF!";

} else if ($testtype === $case) {
    echo "ELSE IF!";
}

注意

  

字符串( 19 )不是字符串( 23

您的var转储中有23个字符,超过了字符串string(19) "English Adult Male " string(19) "English Adult Male " ELSE IF! 中的字符数,这使我得出以下结论:您具有多字节字符编码,但可能正在测试的字符串不是多字节字符但单字节及其19字节的字符串与23字节的字符串。

您可以将"English Adult Male "转换为mb_convert_encoding()

及其supported encodings

mb_detect_encoding也可能很方便来检测$testtype的编码;

答案 1 :(得分:0)

问题出在线

$testtype = $ui->getAttribute('TestType','display');

通过将其更改为:

$testtype = $ui->getAttribute('TestType');

然后将条件设置为==,因为===不起作用,结果是所希望的。

希望这对某人有帮助!