2012-08-31 2 views
0

로그인 스크립트를 함께 작성 했으므로 포럼에서 코드 및 코드를 복사하여 붙여 넣으려는 시도와 오류가 발생했습니다.PHP 로그인 스크립트의 객체 이동 된 페이지

지금까지 스크립트가 잘 작동하고 있는데 로그인 할 때 아무런 문제가 없습니다. 유일한 문제는 필드를 채우지 않고 로그인하려고 할 때 발생하는 것으로, 이상한 오류가 발생하고 나를 리디렉션합니다.

객체에 빈 페이지가이 문서는 여기

명 어쨌든 시도하고 빈 필드로 로그인 왜 내가보고하지 않는 한 그것은 큰 문제가 아니에요을 발견 할 수있다

을 이전 하지만 그건 내가 원하는거야. 나중에 참조 할 수있는 방법을 알고 싶습니다.

<?php 
session_start(); 

$data=array("user1"=>array("url"=>"page1.php","password"=>"12345"), 
      "user2"=>array("url"=>"page2.php","password"=>"12345"), 
     "user3"=>array("url"=>"page3.php","password"=>"12345") 
     ); 

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

    $user = strtolower($_POST['username']); 
    $pass = strtolower($_POST['password']); 

    if($data[$user]['password'] == $pass) {  
     $_SESSION['username'] = $user . " " . $pass; 
     header('Location: ' . $data[$user]['url']); 
    } else { 
     echo '<script type="text/javascript">window.onload = function() { document.getElementById("loginError").innerHTML = "' . "Invalid login details. Please try again." . '"; }</script>'; 
     logIn(); 
    } 
} else { 
    logIn(); 
} 
?> 
+0

'isset'을'! empty'로 변경하면 모든 것이 수정됩니다. 나는 다른 누군가가 와서 이유를 설명 할 것이라고 확신한다. –

+0

감사합니다 댄, 거의 내 문제를 해결합니다. 두 필드가 공백으로 남겨지면 아무 것도하지 않겠지 만 사용자 이름이 채워지고 공백으로 남겨지면 여전히 동일한 문제가 발생합니다. 나는 당신이 제안한 것을 이해한다고 생각합니다. 나는 isset이 그들이 정의되어 있는지 확인하는 체크라고 가정하고있다! empty는 Not Empty를 체크 할 것이다. 또는 나는 완전히 틀린 haha ​​일 수 있었다. – user1172903

+0

즉,'isset'과'! empty' 둘 다 변경하지 않았습니다. –

답변

1

확인 또는`헤더 것을 변경 : 다음

내 코드의 로그인 부분이다 ('위치 :'$ 데이터 [$ 사용자] [ 'URL'].); 리디렉션 할 때 절대 경로이며 상대 경로는 아닙니다. 내 대답 PHP on IIS7 - Receiving "Object Moved" html page instead of actually redirecting에 대한 증거로 관련 게시물을 참조하십시오.

는 빈 암호 문제가 수표를 변경 수정하려면 다음은 문자열을 비교하면

if(isset($_POST['username']) && !empty($_POST['username']) && 
    isset($_POST['password']) && !empty($_POST['password'])) { 
    //Do code here 
} 
else 
{ 
    logIn(); 
} 
+0

고마워요. 나는 정확한 스레드를 실제로 우연히 발견했지만, 나는 PHP에 대해 매우 익숙해 져서 대부분의 정보가 내게로 날아 갔다. 당신의 솔루션은 완벽하게 작동했습니다! – user1172903

+0

empty()는 이미 isset()을 수행하고 있습니다 ... 이것은 여분의 코드가 추가 된 것을 제외하고 제가 37 분 전에 저의 코멘트에 쓴 것입니다. 이런 식으로하지 마십시오. http://php.net/manual/en/function.empty.php –

0

사용하려는 === 또는 !== :

... 
$user = strtolower(trim($_POST['username'])); 
$pass = strtolower(trim($_POST['password'])); 

if($user !== '' && $pass !== '') { 
    //continue with login logic 
    if($data[$user]['password'] === $pass) { 
    ... 
} 
else{ 
//print error 
} 
+0

'null! == '''그러나 유효한 사용자 이름이 아닙니다 ... –

+0

입력 해 주셔서 감사합니다. JLC007의 답변과 함께 가기로했습니다. 그래도 잘 작동하고 이해하기가 더 쉽습니다. – user1172903

+0

@DanGrossman 'trim'은 null 값을 처리합니다. 빈 문자열을 반환합니다. – alfasin

-1

내가 더 로그인이없는 생각 () 함수가 정의되어 있는지 확인하십시오. 아직 HTML 코드를 게시하십시오.

+0

로그인 기능이 있습니다. 관련이 없다는 것을 알았 기 때문에 게시하지 않았습니다. 어쨌든 문제는 해결되었습니다. – user1172903

-1

존재하지 않는 배열 색인의 암호와 URL을 읽기 전에 사용자 이름이 배열에 있는지 확인해야합니다.

session_start(); 

$data=array("user1"=>array("url"=>"page1.php","password"=>"12345"), 
      "user2"=>array("url"=>"page2.php","password"=>"12345"), 
      "user3"=>array("url"=>"page3.php","password"=>"12345") 
      ); 

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

    $user = strtolower($_POST['username']); 
    $pass = strtolower($_POST['password']); 

    if (isset($data[$user]) && $data[user]['password'] == $pass) { 
     $_SESSION['username'] = $user . ' ' . $pass; 
     header("Location: " . $daa[$user]['url']); 
    } else { 
     echo '<script type="text/javascript">window.onload = function() { document.getElementById("loginError").innerHTML = "' . "Invalid login details. Please try again." . '"; }</script>'; 
     logIn(); 
    } 

} else { 
    logIn(); 
} 
관련 문제