【问题标题】:how to let user know that name already exists如何让用户知道该名称已经存在
【发布时间】:2011-08-26 17:04:20
【问题描述】:

新程序员-我创建了一个函数来将用户添加到数据库。这个函数可以在 USER 类中找到。我已将 mysql 设置为将 user_name 作为唯一键。如果用户尝试输入一个已经存在的名称,它不会输入到 mysql 数据库中,但我的表单说好的,它已提交,然后移动到下一页。我想让用户知道该名称已经存在并在注册表单上创建一个错误。有没有办法将它附加到这个函数中?

 function add_member($name, $email, $password)
        {
            global $mysqli;

            $query = "INSERT INTO members
                      SET 
                      user_name = '".addslashes($name)."',
                      user_email = '".addslashes($email)."',
                      password = '". md5($password) ."'";

            $success = $mysqli->query ($query);       

            if (!$success || $mysqli -> affected_rows == 0)
            {
                echo "<p> An error occurred: you just are not tough enough!!! </p>";
                return FALSE;
            } 
            $uid = $mysqli -> insert_id;
            return $uid;
            if (!$found_error)
            {
            header("location: homepage.php");
            }

【问题讨论】:

  • 我个人不使用 MySQLi,所以我将其作为评论:您需要使用用户提供的电子邮件地址查询数据库。如果它返回多于零行,则它是重复的,并且您以一种很好的方式告诉他们:-)
  • 永远不要使用addslashes 转义数据库输入!永远不能。 (请改用mysqli::real_escape_string() 或prepared statements。对于奖励积分,请避免使用 md5 并使用加盐哈希)
  • @pst:更新评论以提及准备好的陈述
  • 据我所知,上述代码中“return $uid”之后的所有内容都不会执行,因为您的函数以无条件返回语句结束。这是一个错误吗?
  • 我发现这在学习 mysqli 准备好的语句时很有帮助:devzone.zend.com/article/686

标签: php


【解决方案1】:

为了防止重定向,您必须通知前端出现错误。

每当用户单击“提交”时,您的表单将始终尝试“移至下一页”。它将执行任何设置的操作。

在该操作中(我假设是流程中的下一页),您应该让页面处理错误 - 即:

<?php     //results.php
    if(false === add_member($name, $email, $password)){
       //you may want to write code that sends post data with error type here... 
       header("location:create_user.php");
    }
?>

请注意,使用 header-redirects 有点不雅,但是如何处理错误的最佳实践超出了这个问题的范围......

我的意思是,您必须在结果页面上发现错误,并让该页面处理失败的尝试。

【讨论】:

    【解决方案2】:

    您已经很接近了,但不要只进行插入,而是先尝试通过对名称进行选择来检查用户。如果记录数大于零,您就知道它已经存在。

    然后要么提出一个 javascript 警报,要么将其发送到另一个页面(如果它已经存在),否则继续进行插入。这样您就不必依赖数据库为您进行检查,然后您可以更好地控制接下来发生的事情。

    祝你好运,HTH -- 乔

    【讨论】:

      【解决方案3】:

      为什么不在用户输入他想要的用户名后进行 Ajax 调用来检查它是否可用。更准确地说,可以是这样的:

      <form id="registration_form" action="register">
          <input id="username" type="text" onchange="checkAvailability();"/> 
          <div id="availability"></div>
      </form>
      
      <script type="text/javascript>
          function checkAvailability()
          {
              $.ajax({
                  type: "GET",
                  url: "checkAvailability.php",
                  data: $("username").val(),
                  success: function(response) {
                      var status = $(response).find('status').text();
                      if (status == 'failed') $("#availability").html("This username is not available!");
                      else $("#availability").html("This username is available!");
                  },
                  dataType: "xml"
              });  
          }    
      </script>
      

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 1970-01-01
        • 2017-08-05
        • 2016-09-23
        • 1970-01-01
        • 1970-01-01
        相关资源
        最近更新 更多