2013-12-06 3 views
0

Это мой код для входа в систему. Запрос возврата не выполнен. Я не знаю, какой синтаксис неверен. Любая помощь ? Нужно ли мне выбирать все в моем столе? На моей странице входа есть только имя пользователя, пароль и роль. Но в моем столе есть другие вещи, как указано на моей $ _SESSION ниже. Нужно ли мне переписывать все в моем столе или что-то в этом роде? Потому что мое кодирование не может прочитать запрос. Синтаксической ошибки нет, но когда я пытаюсь войти в систему, запрос не отображается.Выберите оператор в логине. Запрос не выполнен

<?php 
session_start(); 
require 'database.php'; 

//to store validation errors 
$errmsg_arr = array(); 

//validation error flag 
$errflag = false; 

//function to sanitize values from the form. Preventing the SQL injection 
function clean ($str){ 
    $str = @trim($str); 
    if (get_magic_quotes_gpc()){ 
     $str = striplashes ($str); 
    } 
    return mysql_real_escape_string($str); 
} 

//sanitize POST values 
$myusername = clean ($_POST['username']); 
$mypassword = clean ($_POST['password']); 
$role = clean ($_POST['role']); 

//input validations 
if ($myusername = ''){ 
    $errmsg_arr[] = 'Insert your username'; 
    $errflag = true; 
} 
if ($mypassword = ''){ 
    $errmsg_arr[]= 'Insert you password'; 
    $errflag = true; 
} 

//if there are input validation, redirect back to home 
if ($errflag){ 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    session_write_close(); 
    header("location:index.php"); 
    exit(); 
} 

$qry = "SELECT user_id, username, name, password, role FROM student WHERE username = '$myusername', password = '".md5($_POST['password'])."' AND role = '$role' "; 
$result = mysql_query($qry); 

if ($result){ 
    if (mysql_num_rows($result)== 1){ 

     session_regenerate_id(); 
     $student = mysql_fetch_assoc($result); 
     $_SESSION['SESS_USER_ID']= $student['user_id']; 
     $_SESSION['SESS_NAME']= $student['name']; 
     $_SESSION['SESS_GENDER']= $student['gender']; 
     $_SESSION['SESS_MATRIC']= $student['matric']; 
     $_SESSION['SESS_COLLEGE']= $student['college']; 
     $_SESSION['SESS_FACULTY']= $student['faculty']; 
     $_SESSION['SESS_COURSE']= $student['course']; 
     $_SESSION['SESS_EMAIL']= $student['email']; 
     $_SESSION['SESS_PHONE']= $student['phone'];  
     session_write_close(); 
     header("location: profile.php"); 
     exit(); 
    }else { 
     header ("location: login_failed.php"); 
     exit(); 
    } 
}else { 
    die ("Query failed"); 
} 
?> 
+3

** [Не используйте mysql_ *; используйте mysqli_ * или PDO] (http://stackoverflow.com/questions/12859942/why-shouldnt-i-use-mysql-functions-in-php?rq=1). ** –

+0

Вы проверяете возвращаемые значения вызовов вашей базы данных; но если они не удались, вы можете использовать 'mysql_error()' для получения фактического сообщения об ошибке из базы данных. – andrewsi

ответ

1

В вашей статье WHERE у вас есть username='$myusername', password=, которые должны быть username='$myusername' AND password=

Если был проверен на провал попытки запроса, вы, вероятно, могли бы найти, что сами, например,

$result = mysql_query($qry) or die(mysql_error()); 

Также имейте в виду, что mysql_* функции officially deprecated и, следовательно, не должны использоваться в новом коде. Вместо этого вы можете использовать PDO или MySQLi. См. this thread on SO для получения дополнительной информации.

В дополнение к этому, md5 не является безопасным методом для хэш-паролей!

2

Попробуйте использовать and вместо , между именем пользователя и паролем

WHERE username = '$myusername' and password = '".md5($_POST['password'])."' AND role = '$role' 

вместо

WHERE username = '$myusername', password = '".md5($_POST['password'])."' AND role = '$role' 

PHP

$result = mysql_query($qry) or die (mysql_error()); 
if (mysql_num_rows($result) > 0){ 

    session_regenerate_id(); 
    $student = mysql_fetch_assoc($result); 
    $_SESSION['SESS_USER_ID']= $student['user_id']; 
    $_SESSION['SESS_NAME']= $student['name']; 
    $_SESSION['SESS_GENDER']= $student['gender']; 
    $_SESSION['SESS_MATRIC']= $student['matric']; 
    $_SESSION['SESS_COLLEGE']= $student['college']; 
    $_SESSION['SESS_FACULTY']= $student['faculty']; 
    $_SESSION['SESS_COURSE']= $student['course']; 
    $_SESSION['SESS_EMAIL']= $student['email']; 
    $_SESSION['SESS_PHONE']= $student['phone'];  
    session_write_close(); 
    header("location: profile.php"); 
    exit(); 
}else { 
    header ("location: login_failed.php"); 
    exit(); 
} 

ПРИМЕЧАНИЕ: Используйте mysqli_ * функции или PDO вместо mysql_ * функции (устаревшее)

+0

для запроса, проблема решена. СПАСИБО ! Но теперь есть ошибка, когда говорят, что логин завершился неудачно, даже имя пользователя и пароль верны. – user3051803

+0

if ($ result) { if (mysql_num_rows ($ result) == 1) {'и использовать как' if (mysql_num_rows ($ result)> 0) {' –

0

попробовать этот код

<?php 
session_start(); 
require 'database.php'; 

//to store validation errors 
$errmsg_arr = array(); 

//validation error flag 
$errflag = false; 

//function to sanitize values from the form. Preventing the SQL injection 
function clean ($str){ 
    $str = @trim($str); 
    if (get_magic_quotes_gpc()){ 
     $str = striplashes ($str); 
    } 
    return mysql_real_escape_string($str); 
} 

//sanitize POST values 
$myusername = clean ($_POST['username']); 
$mypassword = clean ($_POST['password']); 
$role = clean ($_POST['role']); 

//input validations 
if ($myusername = ''){ 
    $errmsg_arr[] = 'Insert your username'; 
    $errflag = true; 
} 
if ($mypassword = ''){ 
    $errmsg_arr[]= 'Insert you password'; 
    $errflag = true; 
} 

//if there are input validation, redirect back to home 
if ($errflag){ 
    $_SESSION['ERRMSG_ARR'] = $errmsg_arr; 
    session_write_close(); 
    header("location:index.php"); 
    exit(); 
} 

try{ 
    $qry = "SELECT user_id, username, name, password, role FROM student WHERE username = '$myusername' AND password = '".md5($_POST['password'])."' AND role = '$role' "; 
$result = mysql_query($qry); 

    if (mysql_num_rows($result)== 1){ 

     session_regenerate_id(); 
     $student = mysql_fetch_assoc($result); 
     $_SESSION['SESS_USER_ID']= $student['user_id']; 
     $_SESSION['SESS_NAME']= $student['name']; 
     $_SESSION['SESS_GENDER']= $student['gender']; 
     $_SESSION['SESS_MATRIC']= $student['matric']; 
     $_SESSION['SESS_COLLEGE']= $student['college']; 
     $_SESSION['SESS_FACULTY']= $student['faculty']; 
     $_SESSION['SESS_COURSE']= $student['course']; 
     $_SESSION['SESS_EMAIL']= $student['email']; 
     $_SESSION['SESS_PHONE']= $student['phone'];  
     session_write_close(); 
     header("location: profile.php"); 
     exit(); 
    }else { 
     header ("location: login_failed.php"); 
     exit(); 
    } 

}catch(Exception $e){ 
    echo $e->getMessage(); 
} 
+0

Не могли бы вы добавить объяснение того, какие изменения вы сделали? – andrewsi

+0

да, во-первых, я изменил запрос в разделе где я добавил «и» между именем пользователя и паролем, а во-вторых, я добавил try/catch, если есть какая-либо ошибка в отношении значения ресурса базы данных, catch будет печатать ошибку –

+0

проблема решен спасибо! но теперь я не могу войти в систему, даже если я правильно ввел имя пользователя, пароль и роль (согласно моей базе данных). Помогите ? – user3051803

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