else语句不会在if(empty($ var))之后被触发

时间:2018-11-16 22:27:03

标签: php

我曾尝试在stackoverflow上寻找问题的解决方案,但似乎找不到适合我的情况。

<?php
if (empty($userName)){
    print <<<HERE
        <form>
            Please enter your name:
                <input type="text" name="userName">
                    <br>
                <input type="submit">
        </form>
HERE;
}
else {
    print "<h3>Hi there, $userName!</h3>";
} //end
?>

当我在表单字段中输入值时,将其分配给变量$ userName,但是当在添加该值后未触发else语句时,就会出现问题。

我希望我已经足够清楚,期待可能的解决方案。

谢谢。

2 个答案:

答案 0 :(得分:1)

此代码仅在启用register_globals的情况下有效,并且从PHP 5.4.0开始删除了register_global,因此该代码在PHP 5.4+中将不起作用,而在禁用register_globals的情况下也将不起作用在PHP.ini中(并且自PHP 4.2.0起默认已禁用它),请尝试

if (empty($_GET['userName'])){

相反。同样,您似乎在这里对XSS敞开了大门,必须先对变量进行转义,然后将其回显给用户,或者打开网站进行黑客的xss攻击。

尝试

function hhb_tohtml(string $str):string
{
    return htmlentities($str, ENT_QUOTES | ENT_HTML401 | ENT_SUBSTITUTE | ENT_DISALLOWED, 'UTF-8', true);
}
    print "<h3>Hi there, ".hhb_tohtml($_GET['userName'])."!</h3>";

答案 1 :(得分:0)

如何从变量中检索值?在您的问题中我没有看到。

<?php
if(isset($_POST['userName'])) {
$userName = $_POST['userName']; //This will take the userName input and put it into a variable for you to test.
}

if (empty($userName)){
    print <<<HERE
        <form>
            Please enter your name:
                <input type="text" name="userName">
                    <br>
                <input type="submit">
        </form>
HERE;
}
else {
    print "<h3>Hi there, $userName!</h3>";
} //end
?>