2012-05-26 3 views
0

안녕하세요, 저는 로그인 스크립트에 PDO를 삽입하여 SQL 인젝터로부터 안전하게 보호하려고합니다. 그러나 메신저 내가 그 메신저는 사용자가 실제 있는지 확인하기 위해 행을 계산하려고하기 때문에 생각 흰색 페이지를 ..... 점점 PHP 간단한 로그인 스크립트 흰색 페이지

// Here we inculde the function page 
include 'functions/functions.php'; 
// Here we connect to the db 
$db = mysqlconnect(); 

$password = md5($_POST['mypassword']); 
$statement = $db->prepare("SELECT * FROM users WHERE username = ? AND password = ?"); 
$statement->execute(array($_POST['myusername'], $password)); 


// Replace counting function based on database you are using. 
$count = $statement->rowCount(); 
// If result matched $myusername and $mypassword, table row must be 1 row 

if($count == 1){ 
    // Register $myusername, $mypassword and redirect to file "login_success.php" 

$_SESSION['username'] = $myusername ; 


//Test if it is a shared client 
if (!empty($_SERVER['HTTP_CLIENT_IP'])){ 
    $ip=$_SERVER['HTTP_CLIENT_IP']; 
//Is it a proxy address 
}elseif (!empty($_SERVER['HTTP_X_FORWARDED_FOR'])){ 
    $ip=$_SERVER['HTTP_X_FORWARDED_FOR']; 
}else{ 
    $ip=$_SERVER['REMOTE_ADDR']; 
} 


$updateinfo=mysql_query("UPDATE `users` SET lastip ='$ip' WHERE `username` = '".$_SESSION['username']."'"); 
mysql_query("INSERT INTO user_log 
(username, ip) VALUES('".$_SESSION['username']."', '$ip') ") 
or die(mysql_error()); 





header("Location: home.php"); 
} else { 
    echo "Wrong Username or Password"; 
} 


echo"<p> </p>"; 

임되지 않은 오류가 발생하는 것은 단지 흰색 페이지입니다.

또한 여기에 내가 안구에 붙어 코드에서 일의 부부가있다

function mysqlconnect(){ 
    global $db; 
    $host = 'localhost'; 
    $port = 3306; // This is the default port for MySQL 
    $database = ''; 
    $username = ''; 
    $password = ''; 

    // Construct the DSN, or "Data Source Name". Really, it's just a fancy name 
    // for a string that says what type of server we're connecting to, and how 
    // to connect to it. As long as the above is filled out, this line is all 
    // you need :) 
    $dsn = "mysql:host=$host;port=$port;dbname=$database"; 

    // Connect! 
    $db = new PDO($dsn, $username, $password); 

} 
+1

'global' 키워드 사용을 중지하십시오. 그리고'md5()'를 어떻게 사용하고 있습니까? 그리고 오류보고를 사용하도록 설정 했습니까? – PeeHaa

+0

예 오류 오류보고가 켜져 있습니다. 그리고 $ db를 반환하십시오. 쇼는 db가 선택되어 있지 않습니다 (int 함수 파일이있을 때) 그리고 사용자 비밀번호가 md5이기 때문에 md5를 사용합니다 ... – user1405062

+1

당신은 여전히 ​​mysql_query를 사용하고 있습니다. 무엇을 성취하려고합니까? db로 연결하는 데 PDO를 사용하고 있는데, 그 외의 mysql_query를 사용하는 것을 볼 수 있습니다. –

답변

1

을 포함하는 내 기능 페이지입니다.

전체 스크립트를 여기에 붙여 넣으면 session_start()이 누락됩니다. home.php에 무엇이 있는지 모르지만 콘텐츠 생성이 $ _SESSION [ 'username']의 값에 따라 다르면 헤더 리디렉션 후에 비어있을 수 있으므로 결코 발생하지 않습니다.

session_start()에 대한 설명서를보십시오.

대부분의 데이터베이스의 경우, PDOStatement :: rowCount의()가 SELECT 문에 의해 영향을받는 행의 수를 반환하지 않습니다 명시된 바와 같이 또한

.

이런 경우를 생각해보십시오. 나는이 일을 혼자서 궁금해했던 과거의 좋은 시간을 보냈습니다.

rowCount에 대한 설명서의 예 2를 한 눈에 볼 수 있습니다.

물론 @Paul이 이미 지적했듯이 PDO로 마이그레이션하는 경우 더 이상 mysql_query()을 사용하지 않아야합니다.

+0

서버에 session_start가 준비되어 있습니다. 페이지에 붙여 넣기를하면 100 초 동안 헤더를 모두 보낼 준비가되었습니다. – user1405062

+0

이미 보낸 헤더에 대해 잔소리하는 경우이 줄에서 발생합니다. 'header ("Location : home.php");'당신은 그 라인 앞에 어딘가에서 브라우저로 출력해야만합니다. – budwiser