棘手的标题,对不起,我不知道PHP内容的正确用语。
但我试图在错误代码的情况下将$ msg从空文件转换为某些文本。
当前代码:
<?php
$msg = '';
if ($pass === ("123")) {
echo $msg;
} else {
$msg = 'Wrong code';
}
$pass = ($_POST['code']);
?>
<form autocomplete="off" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']);>" method="post" target="_self" accept-charset="UTF-8">
<input type="password" name="code"/>
</form>
我在这里做错了什么?
答案 0 :(得分:1)
有几种方法可以做到这一点。
将“成功”分配给$msg
,它会在成功时回显该成功,否则如果失败则回显$msg = 'Wrong code';
,同时检查POST数组是否为空并且所有内容都设置在其中。
另外,你现在拥有它的方式,会抛出一些关于未定义变量/索引的注意事项,并且POST数组位于错误的位置以及123
周围的括号,因为它们不应该存在你不需要它们;这只是额外的代码,对于($_POST['code'])
来说是相同的。
<?php
error_reporting(E_ALL);
ini_set('display_errors', 1);
$msg = 'Success'; // or put it as empty, the choice is yours
if(!empty($_POST['code'])){
$pass = $_POST['code'];
if ($pass === "123") {
echo $msg;
} else {
echo $msg = 'Wrong code';
}
}
?>
<form autocomplete="off" action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post" target="_self" accept-charset="UTF-8">
<input type="password" name="code"/>
<input type="submit" name="submit">
</form>
或者你可以这样做并使用isset()
作为$msg
变量:
$msg = '';
if(!empty($_POST['code'])){
$pass = $_POST['code'];
if ($pass === "123") {
$msg = 'Success';
} else {
$msg = 'Wrong code';
}
}
if(isset($msg)){
echo $msg;
}
我希望您不打算存储纯文本密码。
使用以下其中一项:
password_hash()
功能。关于列长的重要说明:
如果您决定使用password_hash()
或兼容包(如果PHP <5.5)https://github.com/ircmaxell/password_compat/,请务必注意,如果您当前的密码列的长度低于60 ,它需要更改为(或更高)。手册建议长度为255。
您需要更改列的长度并重新开始使用新哈希才能使其生效。否则,MySQL将无声地失败。
其他感兴趣的链接:
答案 1 :(得分:0)
解决方案:
您的代码在$
的分配部分缺少msg
符号。所以我在帖子的底部为你列出了一些步骤。
运行此操作后,您将收到警告E_NOTICE : type 8 -- Undefined variable: pass -- at line 3
。因为您没有定义$pass
。您使用===
检查类型和值,并返回false,这意味着条件转到else部分并分配$msg
,在整个块之后$msg
打印{{1}作为输出。
Wrong code
当您在$msg = '';
if ($pass === "123") {
echo $msg;
} else {
$msg = 'Wrong code';
}
echo $msg; //Wrong code
平台上编码时,您需要维护一些变量声明约定。
PHP变量规则:在线指南
PHP
符号开头,后跟变量名称答案 2 :(得分:0)
您的代码:
<?php echo htmlspecialchars($_SERVER['PHP_SELF']);>
缺少结束?
语法:
<?php [code goes here] ?>
除此之外,你使用===不仅测试值,还测试类型。根据你通过$ pass [你的代码中没有显示]的方式,该测试可能成功或失败,因为“123”和123不相同和/或某些自动转换是由'多余'括号触发的你正在使用它。如果不确定,请将其投放到字符串和/或使用==
代替===
比较。