2011-08-26 56 views
0

新程序员 - 我创建了一个将用户添加到数据库的功能。这个功能可以在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"); 
      } 
+0

我没有亲自使用MySQLi,所以我会将它作为注释:您需要使用用户提供的电子邮件地址查询数据库。如果它返回的行数多于零,则它是重复的,并且以一种很好的方式告诉它们:-) – Bojangles

+3

不要**使用'addslashes'来转义数据库输入!永远不能。 (使用'mysqli :: real_escape_string()'或[prepared statements](http://php.net/mysqli_prepare)来代替,并且为了避免使用md5并使用腌过的散列) – knittl

+0

@pst:更新注释以提供准备好的语句 – knittl

回答

0

为了防止重定向,你必须通知你的前端,还有的是一个错误。

无论何时用户点击“提交”,您的表单都会尝试“移至下一页”。它会做任何行动。

在这一行动(我假设是在这个过程中的下一个页面),你应该有页面处理错误 - 即:

<?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"); 
    } 
?> 

注意,标题运用重定向是有些不雅,但如何处理错误的最佳做法超出了这个问题的范围...

我的观点是,您必须捕获结果页面上的错误,并让该页面处理失败的尝试。

0

为什么在用户输入他想要的用户名以检查它是否可用之后,您不会进行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> 
0

你接近,但不是只是在做刀片,尝试做一个选择上的名字第一次检查用户。如果记录数大于零,则知道它已经存在。

然后,要么提出一个JavaScript警报或发送到antother页面,如果它已经存在,否则继续前进,并插入。通过这种方式,您不依赖数据库来为您做检查,然后您可以更好地控制接下来会发生的情况。

祝你好运,HTH - 乔

相关问题