以下代码应检查对超全局的控制并输出用户名的一个文本字段。相反,它给出了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>
答案 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 = 0
或short_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了解更多信息。
你当然可以允许短标签,但实际上并不推荐。