2013-07-19 16 views
5

Tworzyłem system logowania/rejestrowania i zbliżam się do zakończenia mojej części rejestru dotyczącej kodu. Jedynym problemem, który napotykam, jest to, jak sprawić, aby użytkownicy nie mogli rejestrować się z powielonymi nazwami użytkowników. Chcę, żeby działał, aby moja baza danych nie akceptowała tych informacji, i poinformuje użytkownika o błędzie. Każda pomoc jest doceniana.Jak zapobiec powtarzaniu nazw użytkowników podczas rejestracji? PHP/MySQL

My PHP

<?php 
include ('database_connection.php'); 
if (isset($_POST['formsubmitted'])) { 
$error = array();//Declare An Array to store any error message 
if (empty($_POST['name'])) {//if no name has been supplied 
    $error[] = 'Please Enter a name ';//add to array "error" 
} else { 
    $name = $_POST['name'];//else assign it a variable 
} 

if (empty($_POST['e-mail'])) { 
    $error[] = 'Please Enter your Email '; 
} else { 


    if (preg_match("/^([a-zA-Z0-9])+([a-zA-Z0-9\._-])*@([a-zA-Z0-9_-])+([a-zA-Z0-9\._-]+)+$/", $_POST['e-mail'])) { 
     //regular expression for email validation 
     $Email = $_POST['e-mail']; 
    } else { 
     $error[] = 'Your EMail Address is invalid '; 
    } 


} 


if (empty($_POST['Password'])) { 
    $error[] = 'Please Enter Your Password '; 
} else { 
    $Password = $_POST['Password']; 
} 


if (empty($error)) //send to Database if there's no error ' 

Odpowiedz

7

Można zrobić to w ten sposób, gdy użytkownik pisać nazwę użytkownika, na przykład i kliknij Wyślij można napisać ten kod lub dodać go do kodu z modyfikacją:

<?php 
$connect = mysql_connect('whatever','whatever','whatever'); 
$database = mysql_select_db('your dbname'); 
$username = $_POST['username']; 
if(isset($username)){ 
$mysql_get_users = mysql_query("SELECT * FROM table_name where username='$username'"); 

$get_rows = mysql_affected_rows($connect); 

if($get_rows >=1){ 
echo "user exists"; 
die(); 
} 

else{ 
echo "user do not exists"; 
} 



} 
?> 
+0

Przepraszam za czekanie, ale to rozwiązało doskonale mój problem! Właśnie umieściłem go w moim kodzie około 10 minut temu i nie będzie już akceptować zduplikowanych nazw użytkowników i wyświetli błąd. – Zippylicious

+0

bardzo dziękuję za + rep za mnie, i cieszę się, że ta odpowiedź zadziałała dla ciebie, ale chcę ci coś powiedzieć, kiedy utworzysz kolumnę użytkownika, możesz uczynić ją wyjątkową, na przykład utwórz użytkowników stołu (nazwa użytkownika varchar (350) not null unique), powodzenia :) –

1

myślę coś w tym jest to, czego szukasz:

if (isset($_POST['user'])) 
{ 
    $user = $_POST['user']; 

    if (mysql_num_rows(yourFunctionForQueryingMySQL("SELECT * FROM tablename WHERE user='$user'"))) 
      echo "Name is taken"; 
    else echo "Name available"; 
} 
1

są dwie rzeczy powinieneś zrobić.

  1. Wprowadź nazwę użytkownika jako klucz podstawowy w tabeli bazy danych. Można to łatwo zrobić za pomocą phpmyadmin.

  2. Sprawdź przed wstawieniem.

W drugim kroku przedstawiamy algorytm. Możesz go zaimplementować na swój sposób, używając pdo, mysqli lub nawet mysql (chociaż nie jest to teraz zalecane).

Algorytm na końcu kodu (to znaczy, jeśli nie ma błędów) ...

Wybierz rekordy spełniające nazwę użytkownika dostarczony pocztą.

Jeśli istnieje, podaj błąd.

Jeśli nie istnieje, włóż go.

Nadzieję, że pomaga.

0

Musisz (możesz) uczynić warunek, który zabrania rejestracji, jeśli nazwa użytkownika już istnieje.

$sql="SELECT username FROM tablename WHERE username='".$username."'";//looking through existing usernames 
    $resul=mysql_query($sql); 
    $num = mysql_num_rows($resul); 

    if ($num !=0){ //If there is already such username... 

    die("There is user with that username."); // ...kill the script! 
} else //continue with the script 
0

Użyłem PDO i metody klasy, może być do pewnego użytku.

//function for checking if the user already exists in the database 
public function userExists($username){ 

//prepared statements for added security 
$query = $this->db->prepare("SELECT COUNT(`id`) FROM `users` WHERE `username`= ?"); 
$query->bindValue(1, $username); 

try{ 
    //execute the query 
    $query->execute(); 
    $rows = $query->fetchColumn(); 

    //if a row is returned...user already exists 
    if($rows == 1){ 
     return true; 
    }else{ 
     return false; 
    } 
//catch the exception 
}catch (PDOException $e){ 
    die($e->getMessage()); 
} 
}//end function userExists 

uwaga Sporządzone sprawozdanie za - zdecydowanie krok naprzód

0

można zrobić tak:

<?php 

//---put this code before "if (empty($error))"------ 

$username = $_POST['username']; 
//---if your table user is "table_user" and fieldname username is "username" 
$query = 'SELECT username FROM table_user WHERE username = "' . $username . '" LIMIT 1'; 
$result = mysql_query($query) 
$totalNumRowResult = mysql_num_rows($result); 

if($totalNumRowResult > 0) { 
    $error[] = 'User exist'; 
} 

?> 

nadzieję, że pomoże.

Powiązane problemy