简单PHP注册表只收集NULL值


Simple PHP Registration Form Only Collects NULL Values?

我正试图使用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

  • 如果你使用纯文本作为密码存储方法,恐怕你的网站被泄露只是时间问题