2017-02-05 2 views
0

Я делаю систему входа/регистрации. Единственная проблема, с которой я столкнулся, заключается в том, как сделать так, чтобы пользователи не могли регистрироваться с дублированными именами пользователей. Я огляделся и увидел много примеров, но мой код не работает.Как предотвратить дублирование имен пользователей, когда люди регистрируются с помощью Php?

Я хотел запретить пользователям иметь такое же имя пользователя, когда они регистрируются на моей странице. Любая помощь приветствуется.

MySQL Таблица:

Create_User: 
ID | upload_img | fullname | username | role | password  
1 | <img>  | Billy  | billyuser | User | test123 
2 | <img>  | Admin One | adminone | Admin | adminonpass 

HTML:

<form action="create_user.php" method="post" enctype="multipart/form-data"> 

     Profile Photo (Optional)<br> 
     (Max file size:2MB, file type:jpeg, jpg, png)<br><br> 
     <input type="file" name="fileToUpload" id="fileToUpload" required/><br><br> 
     Full Name: &nbsp; 
     <input type="text" name="fname" id="fname" size="40" maxlength="70" placeholder="Please enter your full name"><br><br> 
     Username: &nbsp; 
     <input type="text" name="uname" id="uname" size="35" maxlength="62" placeholder="Please enter your username"><br><br> 
     Role: &nbsp; 
     Customer<input type="radio" name="role" id="role" value="Customer"> 
     Administrator<input type="radio" name="role" id="role" value="Admin"><br><br>   

     Password: <br> 
     <input type="password" name="pword" id="pword" size="35" pattern=".{6,}" placeholder="Password" title="Six or more characters"><br><br> 
     <input type="password" name="cfmpword" id="cfmpword" size="35" placeholder="Confirm Password"><br><br> 


     <button type="submit" name="signbtn" style="border:none; background:white; padding:0px"> 
      <img src="button/Sign%20up.png"> 
     </button><br> 
     <a href="signin.html">Back to Sign In</a> 

    </form> 

Php:

<?php 

if (isset($_FILES["fileToUpload"]["name"])) { 

     $file=$_FILES["fileToUpload"]["name"]; 
     $target="uploadfile/" . $file; 
     $fname=$_POST['fname']; 
     $uname=$_POST['uname']; 
     $role=$_POST['role']; 
     $pword=$_POST['pword']; 

     $conn=mysqli_connect("localhost", "root", "" , "SportFacility"); 

     $sql_insert = "INSERT into create_user (upload_img, fullname, username, role, password) 
     values ('$file', '$fname' , '$uname' , '$role' , '$pword')"; 

     $result=mysqli_query($conn, $sql_insert); 

     $allowedType=array("image/jpeg", "image/jpg", "image/png"); 
     if(in_array ($_FILES["fileToUpload"]["type"] ,$allowedType)) 
     { 
      echo "<script type='text/jscript'>alert('File type is acceptable')</script>"; 
     } 
     else 
     { 
      echo "<script type='text/jscript'>alert('Invalid file type')</script>"; 
      exit(); 
     } 
     if($_FILES["fileToUpload"]["size"] < 2000000) 
     { 
      echo "<script type='text/jscript'>alert('File size is acceptable')</script>"; 
     } 
     else 
     { 
      echo "<script type='text/jscript'>alert('File is too large')</script>"; 
      exit(); 
     } 
     $directoryfile=move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target); 

     if($result) 
     { 
      header("Location: login.html"); 
     } 
     else 
     { 
      header("Location: register.html"); 
     } 

mysqli_close($conn); 

} 

if (isset($_POST['uname'])) 
     $uname=$_POST['uname']; 
     $conn=mysqli_connect("localhost", "root", "" , "SportFacility"); 
     $sqluser="SELECT username FROM create_user WHERE username='$uname' "; 
     $qresult=mysqli_query($conn, $sqluser); 
     $count=mysqli_num_rows($qresult); 
     if($count) 
     { 
      echo "Username is already taken"; 
     } 
     else 
     { } 
?> 
+0

Я считаю, что вы должны проверить $ рассчитывать на числа в $ кол проведет ряд результат запроса возвращается как: 'если ($ число> 0) {...} ' –

ответ

0

Во-первых, предотвратить Дублировать e usernames в базе данных с использованием индекса или ограничения UNIQUE. В MySQL это делается с помощью следующей команды:

ALTER TABLE `tableName` ADD UNIQUE `indexName` (`columnName`) 

Это предотвратит вашу базу данных, находясь в плохом состоянии (т.е. с несколькими пользователями с таким же названием). Но вам нужно проактивно справиться с этим в своем PHP-коде, чтобы пользователи не получали уродливое сообщение об ошибке MySQL, вы можете сделать это, сначала проверив, чтобы определить, было ли имя пользователя взято или нет с простым SELECT 1 FROM tableName WHERE column = value.

Наконец, никогда не используйте конкатенацию строк! Используйте параметризацию! Кто-то может легко взломать ваш сайт, поставив SQL-команды в HTML-форму!

+0

Это немного сложнее, чем это. Проверка существующих имен пользователей и вставка нового должна выполняться в рамках транзакции. –

+0

Кроме того, на практике уникальный индекс может быть на столбцах _two_, имени пользователя и арендаторе. –

+0

@TimBiegeleisen OP, похоже, не создает базу данных с несколькими арендаторами. В его вопросе или размещенной схеме не упоминается аренда. – Dai

0

Если вы хотите проверить двойное имя пользователя, то первым шагом будет проверка дублирования, прежде чем вставлять имя пользователя в таблицу.

файл PHP

$conn=mysqli_connect("localhost", "root", "" , "SportFacility"); 

if (isset($_FILES["fileToUpload"]["name"])) { 
    if (isset($_POST['uname'])) 
    $uname=$_POST['uname']; 
    $sqluser="SELECT username FROM create_user WHERE username='$uname' "; 
    $qresult=mysqli_query($conn, $sqluser); 
    $count=mysqli_num_rows($qresult); 
    if($count > 0) 
    { 
     echo "Username is already taken"; 
    } 
    else 
    { 

    $file=$_FILES["fileToUpload"]["name"]; 
    $target="uploadfile/" . $file; 
    $fname=$_POST['fname']; 
    $uname=$_POST['uname']; 
    $role=$_POST['role']; 
    $pword=$_POST['pword']; 

    $sql_insert = "INSERT into create_user (upload_img, fullname, username, role, password) 
    values ('$file', '$fname' , '$uname' , '$role' , '$pword')"; 

    $result=mysqli_query($conn, $sql_insert); 

    $allowedType=array("image/jpeg", "image/jpg", "image/png"); 
    if(in_array ($_FILES["fileToUpload"]["type"] ,$allowedType)) 
    { 
     echo "<script type='text/jscript'>alert('File type is acceptable')</script>"; 
    } 
    else 
    { 
     echo "<script type='text/jscript'>alert('Invalid file type')</script>"; 
     exit(); 
    } 
    if($_FILES["fileToUpload"]["size"] < 2000000) 
    { 
     echo "<script type='text/jscript'>alert('File size is acceptable')</script>"; 
    } 
    else 
    { 
     echo "<script type='text/jscript'>alert('File is too large')</script>"; 
     exit(); 
    } 
    $directoryfile=move_uploaded_file($_FILES["fileToUpload"]["tmp_name"], $target); 

    if($result) 
    { 
     header("Location: login.html"); 
    } 
    else 
    { 
     header("Location: register.html"); 
    } 

mysqli_close($conn); 

}