2014-09-15 2 views
0

이 코드가 있습니다. 사용자가 로그인하면 members.php로 리디렉션됩니다. 리디렉션하는 대신 빈 페이지가 표시되지만 login.php는 그대로 유지됩니다.사용자가 로그인해야하며 리디렉션되지 않습니다.

아무도 도와 줄 수 있습니까? 스크립트가 종료하고 아무것도 이미 클라이언트로 전송되지 않았 음을 조건으로, 클라이언트에 Location 헤더를 전송하는

<?php 
mysql_connect("xx", "xx", "xx") or die(mysql_error()); 
mysql_select_db("xx") or die(mysql_error()); 

if(isset($_COOKIE['ID_my_site'])) 
{ 
    $username = $_COOKIE['ID_my_site']; 
    $pass = $_COOKIE['Key_my_site']; 
    $check = mysql_query("SELECT * FROM users WHERE username = '$username'")or die(mysql_error()); 
    while($info = mysql_fetch_array($check)) 
    { 
     if ($pass != $info['password']) 
     { 
     } 
     else 
     { 
      header("Location: members.php"); 
     } 
    } 
} 

if (isset($_POST['submit'])) { // if form has been submitted 
    if(!$_POST['username'] || !$_POST['pass']) { 
     die('You did not fill in a required field.'); 
    } 
    if (!get_magic_quotes_gpc()) { 
     $_POST['email'] = addslashes($_POST['email']); 
    } 
    $check = mysql_query("SELECT * FROM users WHERE username = '".$_POST['username']."'")or die(mysql_error()); 
    $check2 = mysql_num_rows($check); 
    if ($check2 == 0) { 
     die('That user does not exist in our database. <a href=add.php>Click Here to Register</a>'); 
    } 

    while($info = mysql_fetch_array($check)) 
    { 
     $_POST['pass'] = stripslashes($_POST['pass']); 
     $info['password'] = stripslashes($info['password']); 
     $_POST['pass'] = md5($_POST['pass']); 
     if ($_POST['pass'] != $info['password']) { 
      die('Incorrect password, please try again.'); 
     } 
     else 
     { 
      $_POST['username'] = stripslashes($_POST['username']); 
      $hour = time() + 3600; 
      setcookie(ID_my_site, $_POST['username'], $hour); 
      setcookie(Key_my_site, $_POST['pass'], $hour); 
      //then redirect them to the members area 
      header("Location: members.php"); 
     } 
    } 
} 
else 
{  
?> 
<form action="<?php echo $_SERVER['PHP_SELF']?>" method="post"> 
<table border="0"> 
<tr><td colspan=2><h1>Login</h1></td></tr> 
<tr><td>Username:</td><td> 
<input type="text" name="username" maxlength="40"> 
</td></tr> 
<tr><td>Password:</td><td> 
<input type="password" name="pass" maxlength="50"> 
</td></tr> 
<tr><td colspan="2" align="right"> 
<input type="submit" name="submit" value="Login"> 
</td></tr> 
</table> 
</form> 
<?php 
} 
?> 
+0

향후 관련 방문자를 위해 보존 될 수 있도록 여기에 관련 코드를 공유 할 수 있습니까? 로그에 오류가 표시됩니까? PSA : mysql_ 함수를 사용하여 종료하십시오. * 그들은''mysqli_'' 또는''PDO''로 변환하십시오. –

+0

@JayBlanchard 알았어. 내가 그랬어. –

+1

나는 로그인 할 때 더 나은 방법을 찾길 강력히 제안한다. 코드에서 사용되지 않는 함수와 오래된 MD5 (* circa 1992 *)를 사용하고 고장난 것으로 간주합니다. 이것으로 시간을 낭비하지 마십시오. 이를 패치하는 것보다는 안전한 방법을 검색하고 구성하는 시간을 줄일 수 있습니다. –

답변

0

좋은 연습 die();이다 : 다음은 코드입니다. 헤더를 설정하는 경우

http://php.net/manual/en/function.header.php

는 항상 출력 버퍼링을 사용하는 것이 가장 좋습니다. 확인하려면

while($info = mysql_fetch_array($check)) 
{ 
    if ($pass != $info['password']) 
    { 
    } 
    else 
    { 
     header("Location: members.php"); 
     die(); 
    } 
} 

http://php.net/manual/en/function.ob-start.php

ob_start(); 

전이나 코드 후에는 PHP가 후행 공백 무시하게됩니다 그 이후 마지막 ?>를 제외하는 것이 좋습니다는 아무 공백이 없습니다. 실제 출력은 일반 HTML 태그, 파일에, 또는 PHP에서 빈 줄에 의해 중, 전송 전에

는 호출해야하는 헤더()를 기억하십시오. 함수 또는 다른 파일 액세스 함수를 포함하거나 필요로하는 코드를 읽고 header()가 호출되기 전에 공백 또는 빈 행이 출력되는 것은 매우 일반적인 오류입니다. 단일 PHP/HTML 파일을 사용할 때 같은 문제가 존재합니다.

+2

당신은 죽을 필요가 있습니다(); - 그냥 재밌 네요 :) – Lee

+0

@lee PHP 게임에서 당신이이기 든 죽을 지(); :) – Cleric

+0

죄송합니다. 이것은 잘못되었습니다. 헤더 명령 다음에 die()를 사용하지 않아도됩니다. 헤더를 보낼 수없는 경우 좋은 연습 일뿐입니다. –

관련 문제