2012-11-29 7 views
-1

이 로그인 스크립트를 PDO로 변경했습니다. 이제는 사용자 이름을 전달하지만 fetchAll 행은 멈 춥니 다. 제발 도와주세요. 감사PDO 로그인 스크립트가 작동하지 않습니다.

<?php 
session_start(); 
include_once"includes/config.php"; 

if (isset($_POST['admin_login'])) { 
    $admin_user = trim($_POST['admin_user']); 
    $admin_pw = trim($_POST['admin_pw']); 

    if ($admin_user == NULL OR $admin_pw == NULL) { 
    $final_report.="Please complete all the fields below.."; 
    } else { 
    $check_user_data = $db->prepare("SELECT * FROM `admin` 
     WHERE `admin_user`='$admin_user'"); 
    $check_user_data->execute(); 

    if ($check_user_data->fetchColumn() == 0) { 
     $final_report.="This admin username does not exist.."; 
    } else { 
     $get_user_data = $check_user_data->fetchAll($check_user_data); 

     if ($get_user_data['admin_pw'] == $admin_pw) { 
     $start_idsess = $_SESSION['admin_user'] = "".$get_user_data['admin_user'].""; 
     $start_passsess = $_SESSION['admin_pw'] = "".$get_user_data['admin_pw'].""; 
     $final_report.="You are about to be logged in, please wait a few moments..."; 
     header('Location: admin.php'); 
     } 
    } 
    } 
} 
?> 

답변

2
  • 리턴 값 false 대한()를 준비하거나 실행 확인되지 않음. SQL 오류를 확인하고 처리해야하며 blithely를 계속하는 대신 코드를 중지해야합니다.

  • 준비된 문에서 쿼리 매개 변수를 사용하지 않고 쿼리에 $ _POST 내용을 부적절하게 보간합니다. PDO로 전환하여 SQL 주입 공격에 취약해질 수 있다는 이점이 누락되었습니다.

  • 비밀번호를 일반 텍스트로 저장하는 것은 안전하지 않습니다. You're Probably Storing Passwords Incorrectly을 참조하십시오.

  • admin_pw 열만 사용하는 경우 실제로 SELECT *이 필요합니까? 힌트 : 안돼.

  • PDOStatement::fetchAll()은 행에 대해 하나의 배열이 아닌 배열의 배열을 반환합니다. fetchAll()에 대한 설명서의 예제를 읽으십시오.

+0

저는 PDO가 새롭습니다. 어떻게 변경해야합니까? 감사합니다. – user1858570

+0

@ user1858570 PDO의 장점을 최대한 살리기 위해 자습서를 읽는 것이 도움이 될 수 있습니다. 내 머리 (글쎄, 즐겨 찾기 목록,하지만 어쨌든)의 상단에서 내가 http://wiki.hashphp.org/PDO_Tutorial_for_MySQL_Developers –

+0

고마워, 정말 도움이 보이는 기사를 볼 수 있지만, 나는 내 스크립트를 얻을 수 있는지 모르겠다. 내가 필요로하는 방식을 바꿨다. – user1858570

관련 문제