if-elseif-else语句不起作用

时间:2015-06-09 17:18:09

标签: php html html5

以下代码应检查对超全局的控制并输出用户名的一个文本字段。相反,它给出了3.我彻底检查了代码,但似乎找不到任何错误。如果有人可以指导我,我对PHP相对较新。

<? session_start();
// for demo, else these would be in some database
define("USER", "abcde");
define("PASS", "zxcvb");

if (isset($_POST["user"]) && isset($_POST["pass"]))
{
    if ($_POST["user"] == USER && $_POST["pass"] == PASS)
    {
        $_SESSION["authenticated"] = true;

        setcookie("user", $_POST["user"], time() + 7 * 24 * 60 * 60);

        $host = $_SERVER["HTTP_HOST"];
        $path = rtrim(dirname($_SERVER["PHP_SELF"]), "/\\");
        header("Location: http://$host$path/home.php");
        exit;
    }
}
?>

<!DOCTYPE html>

<html>
    <head>
        <title>Log In</title>
    </head>
    <body>
        <form action="<?= $_SERVER["PHP_SELF"] ?>" method="post">
            <table>
                <tr>
                    <td>Username:</td>
                    <td>
                    <? if (isset($_POST["user"])): ?>
                        <input name="user" type="text" value="<?= htmlspecialchars($_POST["user"]) ?>">
                    <? elseif (isset($_COOKIE["user"])): ?>
                        <input name="user" type="text" value="<?= htmlspecialchars($_COOKIE["user"]) ?>">
                    <? else: ?>
                        <input name="user" type="text" value="">
                    <? endif ?>
                    </td>
                </tr>
                <tr>
                <td>Password:</td>
                <td><input name="pass" type="password"></td>
                </tr>
                <tr>
                <td></td>
                <td><input type="submit" value="Log In"></td>
                </tr>
            </table>
        </form>
    </body>
</html>

4 个答案:

答案 0 :(得分:2)

不可能。 if不会执行多个路径,例如:

php > if (1==1) { echo 'foo'; } else if (1==1) { echo 'bar'; }
foo
php >

即使两个条件都计算为true,只有FIRST匹配的条件执行了代码,然后if完成。

如果你获得了所有三个字段,那么大多数情况下你的PHP配置错误并且没有正在执行的php,并且你得到了原始的php输出。由于浏览器忽略/隐藏未知标记,因此PHP代码根本不会呈现,您会看到所有非PHP代码。例如检查浏览器的“查看源代码”,你会在那里看到php代码,这意味着你在服务器上遇到了重大问题。

答案 1 :(得分:2)

你使用的是短标签(404 Not Found),而不是正式的标签,这些标签可能没有在你的php.ini中启用

如果您有权更改php.ini,请分别将<?short_open_tag = Off更改为short_open_tag = 0short_open_tag = On

或者,在文件开头添加行short_open_tag = 1,但这不太理想,将所有<?php ini_set('short_open_tag','1'); ?>更改为<?

会更好

答案 2 :(得分:0)

要在本地主机上执行PHP,例如XAMP和WAMP,您必须在文档的开头使用<?php,否则它将像HTML中的<p>元素一样输出脚本。

答案 3 :(得分:0)

我认为您的服务器不支持短标签。 您应该尝试将<?替换为<?php

请参阅this documentation了解更多信息。
你当然可以允许短标签,但实际上并不推荐。