2014-10-07 2 views
-1

나는 로그인 한 사용자를 확인하는 PHP 스크립트를 작성하고 있습니다. 전자 메일 주소와 암호를 모두 입력했는지 확인하고, SQL에 연결하고 데이터를 확인하고, 세션을 등록하고, 업데이트하는 작업을 포함합니다. 로그인 시간.PHP에 대한 올바른 오류보고

사용자가 양식을 작성하고이 페이지로 이동하면 스크립트가 작동하지 않으며 ELSE 문 다음의 오류 메시지로 바로 이동합니다. 그것은 sql의 'last_login'을 업데이트하지 않습니다.

이 스크립트의 문제를 어떻게 해결할 수 있을지 궁금해했습니다. 어디에서 오류 처리를 할 수 있습니까? 모든 mysql_*

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

session_register()mysql_*을 계속 사용하는 원인

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 _ *()'함수 호출의 잘못된 조합이 있습니다. [PHP에서 SQL 삽입을 방지하는 방법] (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을 주입하지 않으므로 확실하지는 않지만 누군가 전자 메일 주소가 'OR userid = 1'과 같은 형식으로 게시 할 수도 있습니다 - – OIS

답변

1

mysql 혼합 및 mysqli 먼저 (이상 사용되지 않습니다) mysql에 쿼리를 변경하는 것은 그래서 오히려 session_register$_SESSION을 사용하고 mysqli_*를 사용 중지되었습니다 오히려 mysql_*

+1

아니요, 다른 모든 것들을 mysqli _ *()로 변경하십시오. 이전의'mysql _ *()'API는 더 이상 사용되지 않으며 MySQLi는 준비된 명령문을 지원합니다 (여기서는 사용해야합니다) –