我正试图使用PHP为一个网站创建一个基本的登录/注册。下面的代码显示我需要config.php,我测试了它,它可以顺利地连接到我的网站。当我进入页面并输入值时,无论我为电子邮件和密码输入什么,它都会显示它们总是匹配的。当我尝试输出email1和email2的值时,它什么也不输出。我认为当你按下提交按钮时,表格没有收集数据。如果有人能看到我做错了什么,我将不胜感激!
<?php
require('config.php');
if(isset($_POST['submit'])) {
$email1 = $POST['email1'];
$email2 = $POST['email2'];
$pass1 = $POST['pass1'];
$pass2 = $POST['pass2'];
if($email1 == $email2)
{
echo "Emails match.<br />";
if($pass1 == $pass2)
{
echo "Passwords match.<br />";
}
else
{
echo "Sorry, your passwords do not match.<br />";
exit();
}
}
else
{
echo "Sorry, your emails do not match.<br /><br />";
}
}
else {
$form = <<<EOT
<form action="register.php" method="POST">
First Name: <input type="text" name="name" /><br />
Last Name: <input type = "text" name = "lname" /><br />
User Name: <input type = "text" name = "uname" /><br />
Email: <input type = "text" name = "email1" /><br />
Confirm Email: <input type = "text" name = "email2" /><br />
Password: <input type = "password" name = "pass1" /><br />
Confirm Password: <input type = "password" name = "pass2" /><br />
<input type = "submit" value = "Register" name = "submit" />
</form>
EOT;
echo $form;
}
?>
问题是您忘记了所有$POST
的的下划线
将它们全部更改为$_POST
这是一个超全局,其中9个中有8个需要下划线,与$GLOBALS
不同
- $GLOBALS<===此项不需要下划线
- $服务器
- $_GET
$_POST
<===把它们都改成这个- $_FILES
- $_COOKIE
- $_SESSION
- $_请求
- $_ENV
如果错误报告已设置/打开,则会多次向您发出错误信号:
注意:未定义的变量:POST in…
要启用它,您可以在打开<?php
标签后添加以下内容:
error_reporting(E_ALL);
ini_set('display_errors', 1);
注意:错误报告只能在暂存中进行,而不能在生产中进行。
旁注:
由于显然从同一页运行整个代码,因此如果需要,可以简单地将action="register.php"
更改为action=""
。
密码
我还注意到,您可能将密码存储为纯文本。不建议这样做。
使用以下选项之一:
- CRYPT_BLOWFISH
crypt()
bcrypt()
scrypt()
- 在OPENWALL上
- PBKDF2
- PHP.net上的PBKDF2
- PHP 5.5的CCD_ 11函数
- 兼容性包(如果PHP<5.5)https://github.com/ircmaxell/password_compat/
其他链接:
- PBKDF2用于PHP
- 如果你使用纯文本作为密码存储方法,恐怕你的网站被泄露只是时间问题