2013-04-23 5 views
1

안녕하세요 저는 만든 CMS에서 여러 사용자를 만들려고합니다. 나는 그들의 데이터를 모두 테이블에 가지고 있고 일치하는 레코드가 있다면 mysql_num_rows을 사용하고 session_register()을 사용하여 세션을 설정했다. PDO 명령으로 변경했습니다.

변경된 모든 레코드의 usrID가 첨부되도록 CMS를 사용할 때 사용자를 추적 할 수 있기를 원합니다. 나중에 업데이트를 만든 사람을보고 작성자 등에 대한 정보를 표시하는 데 사용할 수 있습니다.

예를 들어 양식을 사용하여 새 레코드를 업데이트하거나 추가 할 때 숨겨진 입력을 세션 ID 그들이 로그인 할 때 사용자 기록에서 가져온 echo'd가 표시됩니다.

가장 좋은 방법은 무엇입니까? 이 로그인 코드의 구문을 올바르게 작성 했습니까?

$con = new PDO(DB_DSN, DB_USERNAME, DB_PASSWORD); 
$sql="SELECT * FROM $tbl_name WHERE the_username='$the_username' and the_password='$the_password'"; 

$result = $con->prepare($sql); 
$result->execute(); 
$number_of_rows = $result->fetchColumn(); 

if($number_of_rows==1){ 
    $info = $result->fetch(PDO::FETCH_ASSOC); 
    $_SESSION['username'] = $info['the_username']; 
    $_SESSION['id'] = $info['id']; 
    header('Location: admin.php'); 
}else{ 
echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>"; 
} 

넣는 것이 좋을까요?

if($number_of_rows==1 && $info = $result->fetch(PDO::FETCH_ASSOC)){MAKE SESSION} 

답변

1

PDO 기능을 사용하면 약간의 오류가 발생할 수 있습니다.

우선 동일한 데이터를 두 번 가져올 수 없습니다. 그리고 사실, 당신은 그런 더블 페치를 전혀 필요로하지 않습니다.

또한 어떤 이유로 PDO를 사용하는 유일한 이유 인 준비된 문을 사용하지 않습니다. 그럼, 적절한 코드가 될

$sql="SELECT * FROM $tbl_name WHERE the_username=? and the_password=?"; 
$result = $con->prepare($sql); 
$result->execute(array($the_username,$the_password)); 
# $number_of_rows = $result->fetchColumn(); <- don't need that 
$info = $result->fetch(); 
if($info){ 
    $_SESSION['username'] = $info['the_username']; 
    $_SESSION['id'] = $info['id']; 
    header('Location: admin.php'); 
}else{ 
    echo "Wrong username or password, please refresh and <a href=\"login.php\">try again.</a>"; 
} 
+0

우수 이것은 환상적이다. 나는 이것을 시험해 볼 것이다. 지금 어디서 잘못되었는지 알 수 있습니다. –

+0

확인을 표시 한 후 여전히 $ _SESSION을 설정하지 않음을 보여줍니다. 이유는 모르겠지만 이것이 모든 브라우저에서 내 _mysql _ * _ code와 동일한 일이 발생하기 때문에 이것이 서버 문제라고 생각합니다. 모든 것은 모든 문자 앞에 전송됩니다. –

0

예 코드 및 로직이 정상적으로 작동합니다. 그러나 session_register()를 사용하지 마십시오. PHP의 새 버전에서는 더 이상 사용되지 않습니다.

+0

안녕하세요, 그래서 나는이 같은 작동하지, 아니 오류로 로그인을 시도하고 다른 사람에게 얻을 않는다. 연결 정보가 모두 올바른 것입니다. 어떤 아이디어? –

+0

내가 무엇인지 알고 있다고 생각하십시오. –

+0

그래, 헤더에! (아직 session_is_registered (name)) 유형의 내용이 있으면 PDO로 변경해야합니다. –

관련 문제