2012-05-15 2 views
0

다음은 모든 내 페이지의 맨 위에 포함 된 파일 인 header.php의 시작입니다. 지금은 브라우저에 포함 된 모든 페이지가 비어 있습니다. 무엇을 잘못 할 수 있습니까? (데이터베이스의 로그인 자격 증명, 여기에 X로 대체 : ES, 정확합니다.)데이터베이스에서 비밀번호를 확인하려고 할 때 페이지가 비어집니다.

session_start(); 

if (isset($_POST['log_out'])) { 
    session_unset(); 
    session_destroy(); 
    $_SESSION = array(); 
} 

if (isset($_POST['username']) && isset($_POST['password'])) { 

    $salt1 = "ghjfdghpuaqXC" 
    $salt2 = "GHLUYKRGrtuuh" 
    $password = sha1($salt1 . $_POST['password'] . $salt2); 

    $db_hostname = 'xxxxxxxx'; 
    $db_username = 'xxxxxxxx'; 
    $db_password = 'xxxxxxxx'; 
    $db_database = 'xxxxxxxx'; 

$db_server = mysql_connect($db_hostname, $db_username, $db_password); 

if (!$db_server) die("Unable to connect to MySQL: " . mysql_error()); 

    mysql_select_db($db_database) 
     or die("Unable to select database: " . mysql_error()); 

    $query = "SELECT password FROM users WHERE name = '" . $_POST['username'] . "'"; 
    $passwordindatabase = mysql_query($query); 

    if ($password == $passwordindatabase) { 
     $_SESSION['logged_in'] = true; 
     $_SESSION['user'] = $_POST['username']; 
     unset($_POST['username']); 
     unset($_POST['password']); 
    } 
} 
+0

구문 분석 오류? 그렇지 않으면, error_reporting (-1); 스크립트 상단에 ini_set ('display_errors', 'On'); –

+0

감사합니다. 오류보고를 사용하더라도 페이지는 여전히 비어 있었지만 다음 번에는이를 명심 할 것입니다. – Johanna

+0

오류가 없기 때문에이 경우 중요하지 않습니다 ... 죽음의 흰색 화면을 볼 때 기본 응답 일뿐입니다 :) –

답변

0

mysql_query는 MySQL의 리소스를 반환합니다. 이 리소스는 먼저 일부 PHP 값으로 '변환'되어야합니다. 문자열 또는 배열.

리소스 (mysql_query에서 반환)를 문자열 (암호)과 비교하려고합니다. 그것들은 물론 절대로 일치하지 않을 것입니다. 따라서 먼저 리소스를 문자열로 변환해야합니다. 선택한 여러 열이 향후 쿼리의 경우, 내가 먼저 배열로 변환합니다하십시오 (!) 참고로

$resultstring = $resultarray['password'];

: 그런 다음 암호가이 배열로부터 꺼낼 수

$resultarray = mysql_fetch_assoc($passwordindatabase);

절대적으로$_POST['username']과 같은 원시 POST 결과를 데이터베이스에 입력하기 전에 mysql_real_escape_string으로 이스케이프 처리해야합니다.

+0

고마워요. 이것과 두 개의 누락 된 세미콜론을 추가하면 페이지가 표시됩니다. 또한 mysql_real_escape_string에 대한 알림을 주셔서 감사합니다. 데이터베이스에서 비밀번호를 검색하고 비교할 수는 없지만 전체 웹 페이지의 업데이트 된 코드로 새로운 질문을 작성합니다. – Johanna

3

난 당신이 출력

$passwordindatabase = mysql_fetch_row(mysql_query($query)); 
0

를 사용하는 비밀번호 쿼리를 mysql_fetch_row() 함수 또는 mysql_fetch_assoc를 사용해야합니다 같아요 라인

$passwordindatabase = mysql_query($query); 

if ($password == $passwordindatabase) { 

의미가 없습니다. 당신은 사용해야합니다 :

$ passwordindatabase 그냥 결과가 아니라 쿼리가 포함되어 있습니다! 한 다음, 그 결과를받은 후, 당신은 다음과 같이 정확한 결과 변수를 지정해야합니다 :

if (mysql_num_rows($passwordindatabase != 0) { 
    $row = mysql_fetch_assoc($result); 
    $passwordindatabase = $row["password"]; 
} 
관련 문제