2016-03-06 16 views
1

Я хочу проверить, выполнено ли имя пользователя до отправки формы.Проверка наличия имени пользователя перед отправкой формы

Насколько я понимаю, я должен использовать AJAX для получения данных из моей базы данных в javascript. Как отправить имя пользователя в файл PHP?

Это моя форма:

<form id="loginForm" action="register.php" method="post"> 
 
    <p>Register:</p> 
 
    <p style="text-align: left;">Full name: <br><input type="text" name="name" required/></p> 
 
    <p style="text-align: left;">Email: <br><input type="text" name="email" required/></p> 
 

 
    //Username 
 
    <p style="text-align: left;">Username: <br><input id="username" type="text" name="username" onkeyup="validateUsername(value);" required/></p> 
 
    <span id="usernameError" style="display:none;border:1px solid red;">Username can only contain a-z, 0-9 and must be at least 6 characters loong</span> 
 
    <span id="usernameTaken" style="display:none;border:1px solid red;">Username taken</span> 
 

 
    <p style="text-align: left;">Password: <br><input type="password" name="password" required/></p> 
 
    <input type="submit" value="Register"> 
 
</form>

Это validateUsername() функция:

function validateUsername(username) { 
 
    var re = /[a-zA-Z0-9]/; 
 
    alert(username.length); 
 
    if(re.test(username) && username.length > 5) { 
 
     document.getElementById('username').style.backgroundColor = "green"; 
 
     document.getElementById('usernameError').style.display= "none"; 
 
     --error; 
 
    } else { 
 
     document.getElementById('username').style.backgroundColor = "red"; 
 
     document.getElementById('usernameError').style.display= "block"; 
 
     ++error; 
 
    } 
 
    //here i want to check if the user name is taken 
 
}

Если пользователь имя взято, я хочу отобразить диапазон «usernameTaken». В противном случае я хочу скрыть это.

Вот PHP-файл, который проверяет, является ли имя пользователя уже находится в базе данных:

<?php 
 
session_start(); 
 
define('DB_NAME', 'madsanker_dk_db'); 
 
define('DB_USER', 'madsanker_dk'); 
 
define('DB_PASSWORD', 'MyPassword'); 
 
define('DB_HOST', 'mysql43.unoeuro.com'); 
 

 
$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD); 
 

 
if (!$link) { 
 
    die('Could not connect: ' .mysqli_error()); 
 
} 
 

 
$db_selected = mysqli_select_db($link, DB_NAME); 
 

 
if (!$db_selected) { 
 
    die('Could not connect: ' .mysqli_connect_error()); 
 
} 
 

 
$username = //The username; 
 
$username = mysqli_real_escape_string($link,$username); 
 

 
$sql = "SELECT * FROM mainLogin WHERE username = '$username'"; 
 

 
$result = mysqli_query($link, $sql); 
 
$count = mysqli_num_rows($result); 
 

 
if($count == 0) { 
 
    //if the username is NOT taken 
 
    return true; 
 
} else { 
 
    //if the username IS taken 
 
    return false; 
 
} 
 
mysqli_close($link); 
 
?>

Как это делается?

+0

U можно использовать Ajax отправить имя пользователя Php, используя идентификатор элемента или JQuery – devpro

+0

где это ваша проблема в этом коде? Вы протестировали это имя пользователя в правиле ajax. –

+0

PHP должен вернуть какой-то документ, это не функция возврата. Самый простой пример - просто напечатать '' true ''или' 'false''. ** ** ** -ый вызов ** ** -синхронный, поэтому отключите кнопку отправки в функции проверки и затем снова включите ее, когда обратный вызов из ajax говорит, что все хорошо, например. 'if (this.response ===" true ");' (или после некоторого разумного тайм-аута, например, 2 секунды) –

ответ

0

JS-JQUERY AJAX

$.ajax({ 
    url: 'register.php', data: {action: 'isUserNameTaken', params: [username]}, 
    type: 'post', 
    success: function(data) { 
     //Do Something 
    } 
}); 

PHP

<?php 
 
function isUserNameTaken($username) { 
 
    //Do Something; 
 
} 
 

 
if(!empty($_POST['action'])) { 
 
    $action = $_POST['action']; 
 
    switch($action) { 
 
     case 'isUserNameTaken': 
 
      $username = ''; 
 

 
      if(!empty($_POST['params'])) { 
 
       $username = $_POST['params'][0]; 
 
      } 
 

 
      isUserNameTaken($username); 
 

 
      break; 
 
    } 
 
} 
 
?>

+0

'isset &&! Empty' является бессмысленным, используйте только'! Empty'. – deceze

+0

@deceze Спасибо за ваш комментарий, я отредактировал свой ответ, хотя, честно говоря, я не разработчик PHP, я только что нашел, что вопрос сделал быстрое исследование и хотел поделиться результатами, которые я придумал :) –

-1

Вы могли бы сделать это следующим образом: На стороне клиента:

function validateUsername(){ 
    if(//test username input for length...) { 
    $.ajax({ 
     type: 'POST', 
     url: 'validate.php', 
     data: { username: username }, 
     success: function(response) { 
       if(response==0){ 
       //username is valid 
       } 
       elseif(response==1){ 
       //username is already taken 
       } 
       elseif(response==2){ 
       //connection failed 
       } 

     } 
    }); 
    } 
    else{ 
    //display "username is too short" error 
    } 

} 

validate.php:

<?php 
session_start(); 
define('DB_NAME', 'madsanker_dk_db'); 
define('DB_USER', 'madsanker_dk'); 
define('DB_PASSWORD', 'MyPassword'); 
define('DB_HOST', 'mysql43.unoeuro.com'); 

$link = mysqli_connect(DB_HOST, DB_USER, DB_PASSWORD); 

if (!$link) { 
    die('Could not connect: ' .mysqli_error()); 
    echo json_encode(2); 
} 
else{ 
    $db_selected = mysqli_select_db($link, DB_NAME); 

    if (!$db_selected) { 
     die('Could not connect: ' .mysqli_connect_error()); 
     echo json_encode(2); 
    } 
    else{ 
     $username = $_POST["username"]; 
     $username = mysqli_real_escape_string($link,$username); 

     $sql = "SELECT * FROM mainLogin WHERE username = '$username'"; 

     $result = mysqli_query($link, $sql); 

     $count = mysqli_num_rows($result); 
     if($count == 0) { 
     //if the username is NOT taken 
     echo json_encode(0); 
     }else { 
      //if the username IS taken 
      echo json_encode(1); 
     } 
     mysqli_close($link); 
    } 


} 

?> 

Вы можете также сделать эту функцию validateUsername, вызвав ее с OnKeyUp функции в JQuery так каждый раз, когда пользователь вводит что-то в поле ввода, будет проверено имя пользователя.

+2

Почему вы хотите добавить jQuery только для простого запроса ajax, когда он больше не используется? – mehulmpt

+0

Ну, используя onkeyup, вы можете проверять базу данных каждый раз, когда пользователь вводит что-то в нее, Mads Anker не хочет отправлять форму, а затем проверить имя пользователя правильно? Так что это можно сделать. –

+1

Это была бы ужасная идея @Tom. Вы не хотели бы делать собственный сервер.Запросы SQL могут быть немного дорогими, и когда каждый тысяча пользователей на сайте (например, предположительно) делает это как 10 с раз в секунду, это будет фатальным для сервера. – mehulmpt

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