2014-01-11 4 views
0

Я пытаюсь написать регистрационную форму, и когда пользователь нажимает кнопку «отправить», я хочу проверить, существует ли имя пользователя - и если да, то показывать всплывающее окно, в котором говорится, что «имя пользователя уже существует - измените его». , когда пользователь закрывает это всплывающее окно с помощью Javascript - я хочу, чтобы остальные поля, которые пользователь вставил, оставались на своем месте (я имею в виду, что только имя пользователя будет удалено - но первое имя, например, останется)Проверьте, существует ли имя пользователя php - и сохраняются значения

вот код, который я написал:

$con=mysqli_connect("localhost","root","","shnitzale"); 
     // Check connection 
     if (mysqli_connect_errno()) 
      { 
      echo "Failed to connect to MySQL: " . mysqli_connect_error(); 
      } 

     $check="SELECT count (username) as num FROM registered_clients WHERE username=$_GET[User]"; 
     if (!mysqli_query($con, $check)) 
     { 
      echo "Username already exist"; 
     } 
     else 
     { 
      $sql="INSERT INTO registered_clients (Username, Password, First_name, Last_name, 
       Day, Month, Year, Gender, Address, City, Phone_Number1, Phone_number2, Email) 
       VALUES 
       ('$_GET[User]','$_GET[Password]','$_GET[Fname]','$_GET[Lname]','$_GET[Day]'," 
        . "'$_GET[Month]','$_GET[Year]','$_GET[gender]','$_GET[Address]','$_GET[City]'," 
        . "'$_GET[Phone1]','$_GET[Phone2]','$_GET[Email]')"; 

      if (!mysqli_query($con,$sql)) 
      { 
       die('Error: ' . mysqli_error($con)); 
      } 

      echo "Thank you $_GET[Fname] $_GET[Lname]"; 
     } 
      mysqli_close($con); 

все это в отдельном PHP файл, который я иду, чтобы после того, как я нажимаю кнопку «Отправить», Я понимаю, что мне нужно проверить валидацию имя пользователя прежде чем я доберусь до этой страницы, но я действительно не знаю, как ... Спасибо!

+2

Вы используете нефильтрованные данные '$ _GET' непосредственно в своем запросе. Широкий доступ к SQL-инъекциям! – jszobody

+0

Ответил ли какой-либо из ответов на ваш вопрос? – jszobody

ответ

0

Ваш текущий контроль имя пользователя не работает в связи с этим:

if (!mysqli_query($con, $check)) 
{ 
    echo "Username already exist"; 
} 

Это никогда не произойдет. Ваш текущий запрос всегда возвращает правильный результат, даже если имена пользователей не найдены. num будет просто 0.

Вот один из способов сделать это:

$username = mysqli_real_escape_string($con, $_GET['User']); // Do some minimal sanitization at least! 
$check = "SELECT username FROM registered_clients WHERE username='$username'"; 
$result = mysqli_query($con, $check); 
if(mysqli_num_rows($result)) { 
    echo "Username already exists"; 
} 

Таким образом, вы тянете фактические имена пользователей, найденные, и считать их. В качестве альтернативы вы все равно можете использовать свой запрос count (username) as num, но тогда вам нужно будет получить результаты запроса и посмотреть значение num.

Обратите внимание, что ваш запрос INSERT по-прежнему широко открыт для SQL-инъекции. Прежде чем использовать их в своем запросе, необходимо очистить все эти параметры $_GET.

+0

На самом деле это '$ username = mysqli_real_escape_string ($ _ GET ['User']);' должно быть '$ username = mysqli_real_escape_string ($ con, $ _GET ['User']);' pass '$ con' в качестве параметра подключения , В противном случае это вызовет ошибку. В соответствии с руководством http://www.php.net/mysqli_real_escape_string –

+0

@ Fred-ii- хороший звонок, спасибо. обновлено. – jszobody

+0

Добро пожаловать. Только mysql_real_escape_string не требовал подключения к БД. –

0

Вам либо нужен AJAX http://www.w3schools.com/ajax/, либо проверьте, доступно ли имя пользователя без загрузки другой страницы, или вы можете установить действие регистрационной формы на страницу регистрации и снова вставить все действительные данные формы.

Не забудьте самостоятельно дезинформировать данные пользователя!

0

Если вы хотите сделать это с помощью AJAX: Создать отдельную страницу (сейчас плохо называть) usernamecheck.php

/* 
    $database_connection = database connection and stuff 
    Also, does your table have a primary key 'id'? I'd highly recommend it. 
*/ 

$username = mysqli_real_escape_string($database_connection, $_GET['username']; // Use $_GET or $_POST depending on the AJAX request. 
if (strlen($username) > 3){ // Only check if the username string is bigger than 4 characters. No point in checking an empty username. 
    $UserCheck = mysqli_query("SELECT id FROM registered_clients WHERE username = '$username' LIMIT 1"); 
    if (mysqli_num_rows($UserCheck) > 0){ 
     die('<p style="color: red;">The username '.$username.' is already taken.</p>'); 
    } else { 
     die('<p style="color: green;">The username '.$username.' is available.</p>'); 
    } 
} 

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

Вы также можете изменить вывод сценария на 1 или 0, чтобы вы могли его забрать в javascript.

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