2011-08-26 35 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 - 喬

相關問題