2014-07-24 4 views
-2

원하는 작업 : 세션이 있어야하는지 확인하십시오.PHP : mysql_query가 숫자 대신 false를 계속 반환합니다.

function evalLoggedUser($id,$e,$p) 
{ 
    $sql = "SELECT id FROM members WHERE id='$id' AND email='$e' AND password='$p' AND activated='1' LIMIT 1"; 
    $query = mysql_query($sql); 
    $numrows = mysql_num_rows($query); 
    if($numrows > 0) 
    { 
     return true; 
    } 
} 
if(isset($_SESSION["userid"]) && isset($_SESSION["email"]) && isset($_SESSION["password"])) 
{ 
    $log_id  = $_SESSION['userid']; 
    $log_email = $_SESSION['email']; 
    $log_password = $_SESSION['password']; 
    $user_ok = evalLoggedUser($log_id,$log_email,$log_password); 
} 

을 그리고이 오류 반환 : 되는 코드를 확인

경고 : mysql_num_rows도()를 파라미터 1 자원이 될 것으로 예상 부울 /home/diligenceh/domains/diligencehelps.com/ 주어진 으로 public_html/php_includes/login_check.php 그

$sql = "SELECT id FROM members WHERE id='$id' AND email='$e' AND password='$p' AND activated='1' LIMIT 1"; 

false를 반환 하더군요 라인 13에.

$sql = "SELECT id, email, password FROM members WHERE email='$e' AND password='$p' AND emailactivated='1' LIMIT 1"; 
$query = mysql_query($sql); 
$numrows = mysql_num_rows($query); 
$row = mysql_fetch_row($query); 
$db_id = $row[0]; 
$db_email = $row[1]; 
$db_pass_str = $row[2]; 
$_SESSION['userid'] = $db_id; 
$_SESSION['email'] = $db_email; 
$_SESSION['password'] = $db_pass_str; 

나는 아약스에서 $ 전자와 $ P 받고 있어요 : 세션 variables.I는 다음과 같은 구문을 사용하여 다른 파일에 세션 변수를 설정하여이 (내가 생각하는) 좋은 모든 것을 때문에 false를 반환하지 말아야 사용자가 로그인 폼에 제출 버튼과 함께 데이터를 보낼 때. 어쩌면 나는이 질문을 쓰는 것을 놓쳤을 것이다. 나는 더 많은 정보가 필요한지 물어 본다.

+4

오류 메시지를 읽으려면 mysql_error()를 사용해야합니다. 더 이상 사용되지 않는 확장 기능을 사용하고 있고 코드가 SQL 삽입에 개방되어 있습니다. –

+0

Alvaro, 쉽게 주입 할 수 있다는 것을 알고 있습니다.이 코드를 사용하면 가능한 한 쉽게 읽을 수 있습니다. – Donny

+0

잘 알고 계십시오 :) –

답변

0

mysql_query에 대한 PHP 설명서에 따라 유효한 자원이 반환됩니다. 그렇지 않으면 false이 반환됩니다.

if (($result = mysql_query($sql)) === false) { 
    die('Problem with the query: '.mysql_error()); 
} 
$numrows = mysql_num_rows($result); 

참고 : 당신이 mysql_num_rows도를 사용하기 전에

mysql_query()에서 결과를 확인해야합니다 당신이 $sql을 구축하는 방법은 SQL 주입에 대한 익은입니다. 그리고 다른 사람들이 지적했듯이, 준비된 진술을 사용하거나 적어도 당신의 가치를 피하십시오.

+0

코드를 사용하여 실수를 발견했습니다. 쿼리에 문제가 있습니다. 알 수없는 열 'activated'in where where ' 열이 활성화되지 않았기 때문에 emailactivated되었습니다. 당신의 도움을 주셔서 감사합니다. – Donny

관련 문제