2014-10-04 2 views
0

Я пытаюсь создать сценарий входа, но я остановился на проверке входных значений. Вот мой HTML-код формы login.php:Как проверить запрос подтверждения

<form method="post" action="loginpro.php"> 
Username: 
<input id="field" type="text" name="username" required> 
User email: 
<input id="field" type="text" name="email" requerid> 
Password: 
<input id="field" type="password" name="password" required> 
<input id="button" type="submit" value="Log in"> 
</form> 

И это мой loginpro.php файл:

<?php if(isset($_POST['username']) && $_POST['username'] !== '' && isset($_POST['email']) && $_POST['email'] !== '' && isset($_POST['username']) && $_POST['username'] !== ''){ 
require("../admin/libsec/connect.php"); 
$username = $_POST['username']; 
$email = $_POST['email']; 
$password = $_POST['password']; 
$hashed_passoword = hash('sha384', $password); 
$query = "SELECT * FROM user WHERE username = '{$username}' AND email = '{$email}' AND password '{$hashed_passoword}';"; 
$result = mysqli_query($con,$query); 
// How to check if is query good so i can set session or if is not good to redirect to another page? 
} 
?> 
+1

Очень приятно, чтобы вы разрешили SQL-инъекцию. Имя пользователя 'admin '--' будет вводить меня в качестве пользователя« admin », не зная пароля. Благодаря! (Psst, вы должны избегать переменные или использовать подготовленные операторы и связывать переменные!) – h2ooooooo

+0

Я знаю, что должен использовать mysqli_real_escape_string, и я сначала хочу решить эту проблему. – fr33jumper

+0

дезинфицируйте свои входы с помощью готовых stmnts и проверьте 'if количество строк> 0' этого запроса, а затем разрешить это иначе –

ответ

0

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

И не используйте конкатенацию строк для создания SQL-запросов! Это большой риск для безопасности. Вместо этого взгляните на Prepared Statements.

1

Вы можете использовать num_rows() в этом случае, чтобы увидеть, если ваш запрос дали строки:

<?php 
session_start(); 
if(
    (isset($_POST['username']) && $_POST['username'] !== '') && 
    (isset($_POST['email']) && $_POST['email'] !== '') && 
    (isset($_POST['username']) && $_POST['username'] !== '') 
){ 

    require("../admin/libsec/connect.php"); 
    $username = $con->real_escape_string($_POST['username']); 
    $email = $con->real_escape_string($_POST['email']); 
    $password = $con->real_escape_string($_POST['password']); 
    $hashed_passoword = hash('sha384', $password); 
    $query = "SELECT * FROM user WHERE username = '{$username}' AND email = '{$email}' AND password = '{$hashed_passoword}'; "; 
    $result = mysqli_query($con,$query) or die(mysqli_error($con)); 
    // How to check if is query good so i can set session or if is not good to redirect to another page? 

    if(mysqli_num_rows($result) > 0) { 
     // user found 
     $_SESSION['logged_in'] = true; 
     header('Location: home.php'); 
    } else { 
     // redirect the user back to login 
     header('Location: login.php'); 
    } 
} 

?> 

Sidenote: Кстати, так как вы используете MySQLi, почему бы не использовать подготовленные заявления.

+0

Я попытался, но он показал мне это предупреждение: mysqli_num_rows() ожидает, что параметр 1 будет mysqli_result, boolean задан в blablabla ... \ loginpro.php в строке 17 – fr33jumper

+1

@ fr33jumper сбой mysqli_query, используйте 'echo $ query' и запустите in phpmyadmiin, чтобы проверить наличие ошибок – Ghost