2014-10-07 2 views
-1

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

Сценарий не работает, когда пользователь заполняет форму и направляется на эту страницу, она подходит к сообщению об ошибке внизу инструкции ELSE. Он не обновляет «last_login» в sql.

Мне было интересно, как я начинаю устранять этот сценарий, где можно разместить обработку ошибок?

session_start(); 
include 'dbconuser.php'; 
//post var 
$email_address = $_POST['email_address']; 
$password = $_POST['password']; 
//check both fields completed 
if((!$email_address) || (!$password)) 
{ 
    echo "Please enter ALL of the information!<br/>"; 
    include 'login.htm'; 
    exit(); 
} 

$password = md5($password); 
//connect and check data 
$sql = mysqli_query($connection, "SELECT * FROM users WHERE email_address='$email_address' AND password='$password' AND activated='1'"); 
$login_check = mysqli_num_rows($sql); 

if($login_check > 0) 
{ 
    while($row = mysqli_fetch_array($sql)) 
    { 
     foreach($row AS $key => $val) 
     { 
     $key = stripslashes($val); 
     } 

     // register session 
     $_SESSION['first_name'] = $first_name; 
     $_SESSION['last_name'] = $last_name; 
     $_SESSION['email_address'] = $email_address; 
     $_SESSION['user_level'] = $user_level; 

     mysqli_query($connection, "UPDATE users SET last_login=now() WHERE userid='$userid'");  
     header("Location: index.php"); 
    } 
} 
//error 
else 
{ 
    include 'login_error.htm'; 
    echo "You could not be logged in! Either the email_address and password do not match or you have not validated your membership!<br /> 
    Please try again!<br />"; 
} 
+0

смешивание mysql и mysqli? –

+3

У вас есть недопустимое сочетание 'mysqli _ *()' и устаревших 'mysql _ *()' вызовов функций. Обзор [Как предотвратить SQL-инъекцию в PHP] (http://stackoverflow.com/questions/60174/how-can-i-prevent-sql-injection-in-php) и начать преобразовывать все это в MySQLi. Используя примеры в связанном вопросе и документацию MySQLi ['prepare()/execute()') (http://php.net/manual/en/mysqli.prepare.php), настало время начать обучение для использования подготовленных операторов, которые будут исправлять вашу уязвимость в SQL-инъекции. –

+0

Im не один для SQL-инъекции, поэтому я не уверен, но кто-то может просто опубликовать что-то, где email_address есть что-то вроде «OR userid = 1; - – OIS

ответ

1

Смешивание mysql и mysqli Сначала измените запрос mysql (устарел) потому что вы используете остаются все mysql_*

$sql = mysql_query("SELECT * FROM users WHERE email_address='$email_address' AND password='$password' AND activated='1'"); 

session_register() и mysql_* устарела, так что используйте $_SESSION довольно session_register и использовать mysqli_* скорее mysql_*

+1

Нет, измените все остальные на 'mysqli _ *()'. Старый API mysql _ *() 'устарел, и MySQLi поддерживает подготовленные операторы (которые должны использоваться здесь) –

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