2015-03-06 3 views
1

Я сделал небольшой код, чтобы проверить систему входа в систему он первой страницеПроверьте наличие значения в базе данных (логин)

<html> 
    <body> 
    <form action="check.php" method="post"> 
     <input type="text" name="username" /> 
     <input type="text" name="password" /> 
     <input type="text" name="email" /> 
     <input type="submit"> 
    </form> 
    </body> 
</html> 

И второй

<?php 
    $servername = ""; 
    $username = "root"; 
    $password = "ahmed2001"; 
    $db = "html"; 
    $conn = mysqli_connect($servername, $username, $password, $db); 
    if(!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
    } 
    $user = $_REQUEST['username']; 
    $pass = $_REQUEST['password']; 
    $email = $_REQUEST['email']; 

    $checkU = mysql_query("SELECT username FROM players WHERE username = $user"); 


    if ($checkU && mysql_num_rows($checkU) > 0) { 
    echo "You have logged in !"; 
    } else { 
    echo "Failed to log in !"; 
    } 
?> 

Но он всегда дает мне не удалось когда я копирую данные из базы данных?!

+1

После копирования запроса в mysql и проверьте, работает ли он нормально или нет. – phpfresher

+0

Hii @Nezoo ... После изменения 'mysql_query' на' mysqli_query', а затем попробуйте. Я думаю, это может быть вопрос ... – phpfresher

+0

Да база данных работает хорошо – Nezoo

ответ

3

Есть несколько вещей неправильно с вашим кодом.

Вы смешиваете библиотеки MySQL, которые не смешиваются друг с другом.

Плюс, недостающие котировки вокруг переменной $user в предложении where.

Строки должны быть заключены в кавычки, а также передавая соединение с базой данных для запроса вместе с его mysqli_ эквивалента mysql_query() и mysql_num_row(), функции, которые не перемешиваются с mysqli_ связи.

Также эта линия:

if ($checkU && mysqli_num_rows($checkU) > 0) 

заменить его просто с:

if (mysqli_num_rows($checkU) > 0) 

Rewrite:

<?php 
    $servername = ""; 
    $username = "root"; 
    $password = "ahmed2001"; 
    $db = "html"; 
    $conn = mysqli_connect($servername, $username, $password, $db); 
    if(!$conn) { 
    die("Connection failed: " . mysqli_connect_error()); 
    } 
    $user = $_REQUEST['username']; 
    $pass = $_REQUEST['password']; 
    $email = $_REQUEST['email']; 

    $checkU = mysqli_query($conn, "SELECT username FROM players WHERE username = '".$user."'") 
      or die(mysqli_error($conn)) 
    ; 


    if (mysqli_num_rows($checkU) > 0) { 
    echo "You have logged in !"; 
    } else { 
    echo "Failed to log in !"; 
    } 
?> 

Plus, в отношении инъекции SQL, use mysqli with prepared statements или PDO with prepared statements, они намного безопаснее.

Я заметил, что вы можете хранить пароли в текстовом виде. Если это так, то оно очень обескуражено.

Я рекомендую использовать функцию CRYPT_BLOWFISH или PHP 5.5's password_hash(). Для PHP < 5.5 используйте password_hash() compatibility pack.


Использование or die(mysqli_error($conn)) с mysqli_query().

Добавьте error reporting в начало файла, в котором будут найдены ошибки.

<?php 
error_reporting(E_ALL); 
ini_set('display_errors', 1); 

// rest of your code 

Sidenote: Сообщения об ошибках не должно быть сделано только в постановке, и никогда производства.

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

  • Проверьте типы и длину колонок.
  • Если есть данные о фактах, которые соответствуют данным входа в систему.
  • Использовать проверку ошибок/отчетность.

Sidenote: Вы проверяете только имя пользователя в своем запросе. Итак, я не знаю, почему вы проверяете только имя пользователя, а не комбинацию пароля.

Если это так, вам нужно добавить дополнительный запрос в свой пункт where.

т.е .:

WHERE username = '".$user."' AND password = '".$pass."' 

если password это имя столбца в таблице.

+0

Так что я хочу также добавить пароль, поэтому я сделал $ check = mysqli_query ($ conn, "SELECT username FROM players WHERE username = '". $ User. "И пароль ='". $ Pass "'") – Nezoo

+0

@ Nezoo Я рад это слышать, * cheers * –

+0

Так что я хочу также добавить пароль, поэтому я сделал $ check = mysqli_query ($ conn, "SELECT username FROM players WHERE username = '". $ User. "' И пароль = '". $ pass"' ") но я получил Ошибка анализа: ошибка синтаксиса, неожиданный T_CONSTANT_ENCAPSED_STRING в C: \ AppServ \ www \ check.php в строке 16 это строка 16 – Nezoo

0

Попробуйте это:

Вы должны инкапсулировать данные в «»

использовать также $ _POST при использовании после формы.


<?php 
    $servername = ""; 
    $username = "root"; 
    $password = "ahmed2001"; 
    $db = "html"; 
    $conn = mysqli_connect($servername, $username, $password, $db); 
    if(!$conn) { 
     die("Connection failed: " . mysqli_connect_error()); 
    } 
    $user = $_POST['username']; 
    $pass = $_POST['password']; 
    $email = $_POST['email']; 

    $checkU = mysql_query("SELECT username FROM players WHERE username='$user'"); 


    if ($checkU && mysql_num_rows($checkU) > 0) 
    { 
    echo "You have logged in !"; 
    } else { 
    echo "Failed to log in !"; 
    } 
    ?> 
+0

Ничего не получилось – Nezoo

+0

Hiii @Schalk Keun ... Предоставление переменной в одинарных кавычках не будет обрабатываться через нее, вместо этого мы можем использовать ее как 'mysql_query (" SELECT username FROM players WHERE username = ". $ пользователь); ' – phpfresher

+0

Верно. Я по-прежнему предлагаю, чтобы значение поиска было инкапсулировано в «», чтобы предотвратить ошибки поиска со значениями, содержащими пробелы. так, может быть: 'mysql_query ('SELECT username FROM players WHERE username ="'. $ User. '"');' –

0

После попробовать с этим кодом ..

<?php 
    $servername = ""; 
    $username = "root"; 
    $password = "ahmed2001"; 
    $db = "html"; 
    $conn = mysqli_connect($servername, $username, $password); 
if(!$conn) { 
     die("Connection failed: " . mysqli_connect_error()); 
     } 
$db=mysqli_select_db($conn,$db) or die("Database Not Found"); 

if(isset($_POST['submit'])) 
{ 
    $user = $_POST['username']; 
    $pass = $_POST['password']; 
    $email = $_POST['email']; 

    $checkU = mysqli_query($conn,"SELECT username FROM players WHERE username =".$user) or die("Query Execution Error"); 
    if (mysqli_num_rows($conn,$checkU) > 0) { 
    echo "You have logged in !"; 
    } else { 
    echo "Failed to log in !"; 
    } 
} 
?> 
<html> 
    <body> 
    <form action="check.php" method="post" action=""> 
     <input type="text" name="username" /> 
     <input type="text" name="password" /> 
     <input type="text" name="email" /> 
     <input type="submit" name="submit" value="Submit"> 
    </form> 
    </body> 
</html> 
+0

Я пропустил'} 'в ответе .. Отредактировал его. Пожалуйста, повторите проверку ... – phpfresher

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