2012-10-04 2 views
0
<?php 
session_start(); 
include 'db.php'; 
include 'header.html'; 

if(!empty($_SESSION['LoggedIn']) && !empty($_SESSION['email'])) { 
    header("location:profile.php"); 

} elseif(!empty($_POST['email']) && !empty($_POST['pass'])) { 
    $email = mysql_real_escape_string($_POST['email']); 
    $pass = md5(mysql_real_escape_string($_POST['pass'])); 

    $sql = mysql_query("SELECT id, name, email, pass FROM users WHERE email='$email' AND pass='$pass'"); 

    $row = mysql_fetch_array($sql); 
    $id = $row['id']; 
    $email1 = $row['email']; 
    $name = $row['name']; 

    $num = mysql_num_rows($sql); 
    if($num == 1) { 
    $_SESSION['id'] = $id; 
    $_SESSION['email'] = $email1; 
    $_SESSION['name'] = $name; 
    $_SESSION['LoggedIn'] = 1; 
    $update = mysql_query("UPDATE users SET lastlogin=NOW() WHERE email='$email1'"); 

    header("location:profile.php"); 

    } else { 
    echo "<h1>Error</h1>"; 
    echo "<p>Sorry! Either your account could not be found or you have entered the wrong email or password. Please try again.</p>"; 
    } 
} 
?> 

이 스크립트는 localhost 환경에서 완벽하게 작동하지만 호스트에 업로드하면 로그인 한 후 profile.php로 이동하지 않습니다. 또한 리디렉션되지 않습니다. 세션이 설정되었거나 비어 있지 않은 경우 profile.php. 어떤 아이디어?PHP 로그인 스크립트는 로컬에서 작동하지만 호스트에서는 작동하지 않습니다.

두 번째 질문은 'lastlogin'을 현재 시간으로 업데이트하는 데 올바른 코드입니까? 데이터베이스 구조는 무엇을해야합니까? 그것은 내 데이터베이스에서 업데이 트되지 않습니다.

도움 주셔서 감사합니다.

+0

스크립트 상단에'error_reporting (E_ALL)'을 입력하십시오. – Yang

+0

'NOW()'는 "2006-04-12 13:47:36"형식으로 날짜와 시간을 반환합니다. 나는 이것이 당신이 필요로하는 것이라고 생각합니다. –

+0

@metal_fan 그랬지만 오류는보고되지 않았습니다. FakeHeal 덕분에 해당 부분을 계속 테스트 할 수 있습니다 – robk27

답변

0

광범위하게 검색하여 알아 냈습니다. 그것은

header(location: profile.php) 

라인을 수행 할 수 있도록 헤더는 이미

include header.html 

라인과 함께 전송되고 있었다. 나는 지금까지이 문제에 대해 들어 본 적이 없었다. 이 문제를 해결하기 위해 방금 전에 이동했습니다

<?php 
... 
include header.html 
?> 

HTML 시작하기 바로 전에 PHP 코드 하단에 있습니다. 이제 include 헤더 행은 그 일을 할 수 있으며 헤더는 여전히 페이지에로드됩니다.

감사합니다.

+0

내 localhost에서 여전히 작동하는 이유는 확실하지 않습니다. – robk27

0
header("location: profile.php"); 
       ^//space should present because in some host environment it creates problem 
+0

전체 URI를 사용해야합니다. –

+0

파일이 동일한 서버에있는 경우 전체 URI가 필요하지 않습니다. @Dagon –

+0

[header] (http://www.php.net/manual/en/function.header.php) 매뉴얼 페이지에 다음과 같이 쓰여 있습니다. "참고 : HTTP/1.1은 절대 URI를 인수로 요구합니다 to»Location : scheme, hostname, 절대 경로를 포함하지만 어떤 클라이언트는 상대 URI를 받아 들인다. 일반적으로 $ _SERVER [ 'HTTP_HOST'], $ _SERVER [ 'PHP_SELF'] 및 dirname()을 사용하여 상대방 자신 : " –

0

당신이 가장 가능성이 POST를 사용하여 양식에서 로그인 스크립트로 리디렉션하는 경우, 당신은 대신 $ _SESSION의 $ _POST [ '를']를 사용하지 않겠습니까?

그냥 생각해보십시오.

+0

죄송합니다. 양식 부분을 게시하지 않았습니다. 그것은이 스크립트 바로 아래에 있으며 POST가 비어 있지 않은지 확인하고 로그인 확인을 실행하고 데이터를 세션에 넣을 수 있도록 PHP SELF에 양식 작업이 있습니다. – robk27

0

항상 header

+0

ok가 수행합니다. – robk27

1

코드 후 exit();를 사용하는이가 lastlogin 업데이트를위한 매우 좋아하지만, 당신이 얻을 오류가 무엇입니까? 어떤 종류의 오류가 발생했는지 알려주십시오. 논리적으로 코드가 옳은 것 같습니다. 구문 오류 일 수 있습니다. 페이지 상단에 error_reporting (E_ALL)을 추가하고 실제로 어떤 오류가 발생했는지 확인하십시오.

+0

또한에서 오류를 확인하십시오. mysql_query(). – Barmar

+0

오류가 발생하지 않았습니다. 로그인 한 후에는 프로필 페이지로 이동하지 않고이 로그인 페이지에 머물러 있습니다. 내 로컬 호스트에서 프로필 페이지로 이동합니다. 블루 호스트 사용 – robk27

+0

try 헤더가 아닙니다. – Gaurav

관련 문제