2016-03-06 2 views
0

Мне интересно, если и как я могу проверить, используется ли имя пользователя.Проверьте, используется ли имя пользователя

Я слышал, что вы можете сделать это с помощью jQuery, но я просто хочу что-то простое, так как я новичок.

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

Вот мой простой код для формы регистрации и PHP

<form action="" method="POST"> 
 
    
 
    <p><label>name&nbsp;&nbsp; : </label> 
 
\t <input id="password" type="text" name="name" placeholder="name" /></p> 
 
\t 
 
    <p><label>User Name : </label> 
 
\t <input id="username" type="text" name="username" placeholder="username" /></p> 
 
\t 
 
\t <p><label>E-Mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : </label> 
 
\t <input id="password" type="email" name="email"/></p> 
 
    
 
    <p><label>Password&nbsp;&nbsp; : </label> 
 
\t <input id="password" type="password" name="password" placeholder="password" /></p> 
 
    
 
    
 
    
 
    <a class="btn" href="login.php">Login</a> 
 
    <input class="btn register" type="submit" name="submit" value="Register" /> 
 
    </form> 
 
</div> 
 
<?php 
 

 
\t require('connect.php'); 
 
    // If the values are posted, insert them into the database. 
 
    if (isset($_POST['username']) && isset($_POST['password'])){ 
 
     $username = $_POST['username']; 
 
\t \t $email = $_POST['email']; 
 
     $password = $_POST['password']; 
 
     $name = $_POST['name']; 
 
    
 
     $query = "INSERT INTO `user` (username, password, email, name) VALUES ('$username', '$password', '$email', '$name')"; 
 
     $result = mysql_query($query); 
 
     if($result){ 
 
     
 
     } 
 
    } 
 

 
?>

+0

Вы можете делать вещи. сначала сделайте 'имя пользователя как уникальное поле в таблице', а второй перед вставкой проверьте, что имя пользователя уже существует в таблице или не использует запрос' select'. –

+0

спасибо @Anant, но мне нужно, чтобы он сказал мне как сообщение о том, что имя пользователя используется –

+0

, так что вы можете сказать ему после проверки –

ответ

0

Для начала вы не хотите, чтобы полагаться только на что-то подобное уникальное поле для этого, конечно, вы захотите добавить этот атрибут в свой столбец имени пользователя в своей базе данных, но выше того, что вы хотите иметь над ним какую-то фронтальную защиту, а не полагаться на свою базу данных, бросающую ошибку на INSERT INTO, вы также захотите используя mysqli для всего этого, а не для старой версии mysql. Это уязвимы к эксплуатации и уже не в обычной практике, вот что каждый из ваших файлов должен выглядеть следующим образом:

connect.php

<?php 
$conn = mysqli_connect("localhost","username","password","database"); 

// Check connection 
if (mysqli_connect_errno()) 
    { 
    echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
    } 
?> 

register.php

<form action="insertuser.php" method="POST"> 
    Username: 
    <input type="text" name="username" placeholder="Username" /> 
    <br /> 
    Password: 
    <input type="password" name="password" placeholder="Password" /> 
    <br /> 
    Name: 
    <input type="text" name="name" placeholder="Name" /> 
    <br /> 
    Email address: 
    <input type="text" name="email" placeholder="Email address" /> 
    <br /><br /> 
    <input type="submit" value="Register" /> 
</form> 
<?php 
// If there's an error 
if (isset($_GET['error'])) { 
    $error = $_GET['error']; 
    if ($error == "usernametaken") { 
     echo "<h4>That username is taken!</h4>"; 
    } elseif ($error == "inserterror") { 
     echo "<h4>Some kind of error occured with the insert!</h4>"; 
    } else { 
     echo "<h4>An error occured!</h4>"; 
    } 
    echo "<br />"; 
} 
?> 
Already have an account? <a href="login.php">Login here</a> 

insertuser.p л.с.

<?php  
    // Stop header errors 
    ob_start(); 
    // Check if form has been posted 
    if (isset($_POST['username'])){ 
     // Requre database connection file 
     require('connect.php'); 
     // Clean the variables preventing SQL Injection attack 
     $username = mysqli_real_escape_string($conn, $_POST['username']); 
     $email = mysqli_real_escape_string($conn, $_POST['email']); 
     $password = mysqli_real_escape_string($conn, $_POST['password']); 
     $name = mysqli_real_escape_string($conn, $_POST['name']); 
     // Check if the username exists 
     // Construct SELECT query to do this 
     $sql = "SELECT id FROM user WHERE username = '".$username."';"; 
     $result = mysqli_query($conn, $sql); 
     $rowsreturned = mysqli_num_rows($result); 
     // If the username already exists 
     if ($rowsreturned != 0) { 
      echo "Username exists, redirecting to register.php with an error GET variable!"; 
      // Redirect user 
      header('Location: register.php?error=usernametaken'); 
     } else { 
      // Construct the INSERT INTO query 
      $sql = "INSERT INTO user (username, password, email, name) VALUES ('".$username."', '".$password."', '".$email."', '".$username."');"; 
      $result = mysqli_query($conn, $sql); 
      if($result){ 
       // User was inserted 
       echo "User inserted!"; 
       /* DO WHATEVER YOU WANT TO DO HERE */ 
      } else { 
       // There was an error inserting 
       echo "Error inserting, redirecting to register.php with an error GET variable!"; 
       // Redirect user 
       header('Location: register.php?error=inserterror'); 
      } 
     } 
    } 
?> 

удачи с тем, что вы работаете, и я надеюсь, что это помогает!

Джеймс

0
if (isset($_POST['username']) && isset($_POST['password'])){ 
    $username = $_POST['username']; 
    $email = $_POST['email']; 
    $password = $_POST['password']; 
    $name = $_POST['name']; 

    $query = "select username from user where username = '$username'"; 
    $res = mysql_query($query); 
    $rows = mysqli_num_rows($res); 
    if ($rows > 0) { 
     print 'Username already exists...'; 
    } else { 
     $query = "INSERT INTO `user` (username, password, email, name) VALUES ('$username', '$password', '$email', '$name')"; 
     $result = mysql_query($query); 
     if($result){ 

     } 
    } 

} 
0

Вот еще один пример :), Сукчес.

<?php 

    //Set empty variables. 
    $usernameError = $emailError = $passwordError = $nameError = $okmsg = ""; 
    $username = $password = $email = $name = ""; 

    if (isset($_POST['submit'])) { 

     //Check if empty labels form 
     if (empty($_POST['name'])) { 
      $userError = "The 'name' is required."; 
      echo '<script>window.location="#registrer"</script>'; 
     } else { $name = $_POST['name']; } 

     if (empty($_POST['email'])) { 
      $emailError = "El 'Email' es requerido."; 
      echo '<script>window.location="#registrer"</script>'; 
     } else { 
      $email = $_POST['email']; 
      //Check only contain letters and whitespace. 
      if (!filter_var($email, FILTER_VALIDATE_EMAIL)) { 
       $emailError = "El 'Email' is not valid. "; 
       echo '<script>window.location="#registrer"</script>'; 
      } 
     }       

     if (empty($_POST['password'])) { 
      $passwordError = "The 'password' is requiered."; 
      echo '<script>window.location="#registrer"</script>'; 
     } else { 
      $password = $_POST['password']; 
     } 

    } 
     //Check if correctly filled 
     if ($name && $username && $email && $password) { 

      require('connect.php'); 

      //Query SQL 
      $sql = "SELECT * FROM user WHERE username='$username'"; //String SQL 
      $query = mysqli_query($ConDB, $sql);//Query 
      //Securite 
      $username = mysqli_real_escape_string($ConDB, $username); 
      $password = mysqli_real_escape_string($ConDB, $username); 
      $passw = sha1($password);//For securite. 
      $name = mysqli_real_escape_string($ConDB, $username); 
      $email = mysqli_real_escape_string($ConDB, $username); 

      if ($existe = mysqli_fetch_object($query)) { 

       $usernameError = "The 'Username' is already exists."; 
       echo '<script>window.location="#registrer"</script>'; 

      } else { 

       $sql = "INSERT INTO user (username, password, email, name) VALUES ('$username', '$passw', '$email', '$name')"; 

       mysqli_query($ConDB, $sql); 


       $okmsg = "Register with succes."; 

       mysqli_close($ConDB);//Close conexion. 

       echo '<script>window.location="#registrer"</script>'; 
      } 



     } 

?> 

<a name="registrer"></a> 

<form action="" method="POST"> 

    <p><label>name&nbsp;&nbsp; : </label> 
    <input id="password" type="text" name="name" placeholder="name" /></p> 
    <?php echo $nameError; ?> 

    <p><label>User Name : </label> 
    <input id="username" type="text" name="username" placeholder="username" /></p> 
    <?php echo $usernameError; ?> 

    <p><label>E-Mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : </label> 
    <input id="password" type="email" name="email"/></p> 
    <?php echo $emailError; ?> 

    <p><label>Password&nbsp;&nbsp; : </label> 
    <input id="password" type="password" name="password" placeholder="password" /></p> 
    <?php echo $passwordError; ?> 


    <a class="btn" href="login.php">Login</a> 
    <input class="btn register" type="submit" name="submit" value="Register" /> 
    <?php echo $okmsg; ?> 
</form> 

-- 
-- DATA BASE: `user` 
-- 
SET SQL_MODE = "NO_AUTO_VALUE_ON_ZERO"; 
SET time_zone = "+00:00"; 

CREATE TABLE user (
    id int(11) unsigned not null auto_increment primary key, 
    name varchar(50) not null, 
    email varchar(80) not null unique, 
    username varchar(30) not null unique, 
    password varchar(40) not null 
)engine=InnoDB default charset=utf8 collate=utf8_general_ci; 
0

Вы можете попробовать использовать JQuery AJAX для того, что вы хотите.

Во-первых, добавьте в ваш registration.php файл

<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
    // when user submit the form 
    $('form').on('submit', function(event){ 
     $.ajax({ 
      url: "check_username.php", 
      type: "POST", 
      dataType: "JSON", 
      data: { 
       username: $("#username").val() // get the value from username textbox 
      }, 
      success: function(data){ 
       if(data.status == "exists"){ 
        alert('Username already existed'); 
       } 
       else{ 
        $('form').submit(); 
       } 
      }, 
     }); 
     event.preventDefault(); 
    }); 
</script> 


Так что теперь ваш файл registration.php будет выглядеть следующим образом

регистрации.PHP

<form action="" method="POST"> 
    <p> 
     <label>name&nbsp;&nbsp; : </label> 
     <input id="password" type="text" name="name" placeholder="name" /> 
    </p> 
    <p> 
     <label>User Name : </label> 
     <input id="username" type="text" name="username" placeholder="username" /> 
    </p> 
    <p> 
     <label>E-Mail&nbsp;&nbsp;&nbsp;&nbsp;&nbsp;&nbsp; : </label> 
     <input id="password" type="email" name="email"/> 
    </p> 
    <p> 
     <label>Password&nbsp;&nbsp; : </label> 
     <input id="password" type="password" name="password" placeholder="password" /> 
    </p> 
    <a class="btn" href="login.php">Login</a> 
    <input class="btn register" type="submit" name="submit" value="Register" /> 
</form> 
<script src="https://ajax.googleapis.com/ajax/libs/jquery/2.1.1/jquery.min.js"></script> 
<script> 
    // when user typing in 'username' textbox 
    $('form').on('submit', function(event){ 
     $.ajax({ 
      url: "check_username.php", 
      type: "POST", 
      dataType: "JSON", 
      data: { 
       username: $("#username").val() // get the value from username textbox 
      }, 
      success: function(data){ 
       if(data.status == "exists"){ 
        alert('Username already existed'); 
       } 
       else{ 
        $('form').submit(); 
       } 
      }, 
     }); 
     event.preventDefault(); 
    }); 
</script> 


Затем создайте файл PHP с именем check_username.php проверить имя пользователя, представленное пользователем, если он уже существует в базе данных или по-прежнему доступны.

check_username.php

<?php 
    // Check if 'username' textbox is not empty 
    if(!empty($_POST['username'])){ 
     $username = trim(mysqli_real_escape_string($_POST['username'])); 
     // Check the database if the username exists 
     $query = "SELECT username FROM `user` WHERE username = '".$username."'"; 
     $result = mysqli_query($query); 
     if(mysqli_num_rows($result) > 0){ 
      // if username already exist 
      // insert into array, to be sent to registration.php later 
      $response['status'] = 'exists'; 
     } 
     else{ 
      // if username available 
      $response['status'] = 'available'; 
     } 
    } 

    header('Content-type: application/json'); 
    echo json_encode($response); 
    exit; 
?> 


Вот как это работает:
1. Когда пользователь нажимает на кнопку регистра, JQuery будет вызывать check_username.php.

2. Теперь в check_username.php он проверит базу данных, если предоставленное имя пользователя уже существует или по-прежнему доступно.

3. Независимо от того, какой результат существует или доступен, check_username.php отправит результат обратно на registration.php, поскольку строка содержит «существует» или «доступна».

4. registration.php сейчас получите результат и проверит результат, отправленный check_username.php, если он содержит «существует» или «доступен». Если строка «существует», тогда будет активировано предупреждение. Если строка «доступна», форма будет отправлена.

Смежные вопросы