【问题标题】:Confirm Password?确认密码?
【发布时间】:2009-10-26 02:25:18
【问题描述】:

这一切都是新手,请原谅我的无知。我想弄清楚如何在我的表单中添加“确认您的密码”字段。使用 PHP 和 mySQL。这是在 html 表单代码中输入的吗?如何将其设置为自动检查密码和确认密码字段是否匹配。

【问题讨论】:

  • 这与 MySQL 有什么关系?你想在数据库中存储两个密码字段并有一个约束来确保它们匹配吗?如果是这样,那将不是在 UI 中强制执行此约束的最佳方式...

标签: php


【解决方案1】:

只需获取表单中的密码和确认密码字段,提交 PHP 并测试是否相等:

if ($_POST["password"] === $_POST["confirm_password"]) {
   // success!
}
else {
   // failed :(
}

其中passwordconfirm_password 是密码的HTML 文本输入的ID。

【讨论】:

  • php 可以通过方法 POST 读取的唯一属性是使用对象的 name,而不是 ID - 因此 $_POST 接收 name 密码输入元素的值。
【解决方案2】:

您正在尝试做的是表单验证。在客户端(使用 javascript)进行验证是个好主意,这样您就可以在界面和服务器端为您的用户提供更快的响应(因为您的用户可以禁用 javascript - 并且因为您应该永远不要盲目信任用户输入。阅读Should you do validation on your server side了解有关此主题的更多信息)。

您只需要比较两个发布的值。如果正确,插入数据库。如果没有,不要做任何事情,并返回一条消息给用户说密码不正确。

我无法提供更多细节,因为您没有提供足够或详细的 php 环境信息(使用的框架、使用的库等)。

【讨论】:

  • "在您的服务器端(因为您的用户可以禁用 javascript)。" -- 这不是使用服务器端验证的理由。
  • 嗯,是的。客户端验证很有用,但服务器端验证可确保解决客户端的问题。
  • 假设类似“为什么我不能只写一个 javasctip 验证?”,我只是写了在服务器端进行验证以记住他需要这样做。我无法在一个简单的答案中提供有关安全性的所有信息。
  • @GmonC,您听起来好像缺少 Javascript 是验证服务器端的原因。我会改写它以更清楚地说明您无论如何都应该进行服务器端验证。
  • @strager:我刚刚编辑了答案,这是对我们正在进行的所有讨论的简单说明。由于用户对所有这些信息都不熟悉,因此我也在 SO 中添加了指向主题的链接。
【解决方案3】:

您可以使用 JavaScript 在 JavaScript 中检查它

    <html><title></title><head>
<script>
        function validate(){

    if(!document.getElementById("password").value==document.getElementById("confirm_password").value)alert("Passwords do no match");
    return document.getElementById("password").value==document.getElementById("confirm_password").value;
   return false;
    }
    </script>
</head>
<body>
    <form onSubmit="return validate()" action="nextPage.php">
    Password: <input type="text" id="password" name="password" /><br/>
    Reenter Password: <input type="text" id="confirm_password" name="confirm_password" />
    <input type="submit" value="submit"/>
    </form>
</body>
</html>

并且在服务器端你需要再次检查它以防客户端没有启用 JavaScript,

if($_GET['password']==$_GET['confirm_password'])

如果是 POST 方法,您必须使用 $_POST 而不是 $_GET

【讨论】:

  • 您想对密码使用 GET 吗?似乎 POST 将是要走的路...
  • 你的密码是对的,我们必须使用 POST 方法..我只是举了一个例子,只是使用这两种方法和验证的基本表单提交:)
【解决方案4】:

我更新了代码,表单提交时缺少冒号。

 <html>
   <title></title>
    <head>
    <script>
        function validate(){

            var a = document.getElementById("password").value;
            var b = document.getElementById("confirm_password").value;
            if (a!=b) {
               alert("Passwords do no match");
               return false;
            }
        }
     </script>
    </head>
    <body>
        <form onSubmit="return validate();" ">
        Password: <input type="text" id="password" name="password" /><br/>
        Re-enter Password: <input type="text" id="confirm_password" name="confirm_password" />
        <input type="submit" value="submit"/>
        </form>
    </body>
 </html>

【讨论】:

    【解决方案5】:

    你在使用某种框架吗?如果不是,它应该像在保存后检查两个字段都已设置并且 $confirmationPassword == $passWord 一样简单。然后在将密码存储到 SQL 之前对密码进行任何验证。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 2011-05-23
      • 2012-01-19
      • 1970-01-01
      • 1970-01-01
      • 2013-09-18
      • 2015-04-03
      • 2023-02-23
      相关资源
      最近更新 更多