2012-08-31 27 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是一個檢查,看看他們是否定義,而!空將檢查是否爲空。或者我可能完全錯了哈哈。 – 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'負責空值 - 它將返回空字符串。 – 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(); 
}