2013-11-15 334 views
1

我如何編輯下面的PHP以允許額外或多個用戶名和密碼。例如User1的密碼爲JHFDE3,User2的密碼爲LKFW34等。從我讀過的內容來看,一個關聯數組可能是最好的。沒有數據庫,它是硬編碼,只需登錄並能夠查看一個PHP頁面。PHP用戶名/密碼登錄

對於下面的特定代碼,我將如何使它成爲一個關聯數組?謝謝。

<?php 
session_start(); //initiates the sessions 
if ($_POST['submit']) //checks to make sure the login form has been submitted 
    { 
    $user = "XXXXX"; 
    $pass = "XXXXXXX"; 
    if ($_POST['pass'] == $pass && $_POST['user'] == $user) //checks if the password submitted by the user matches the password stored in the $pass variable 
     { 
     $_SESSION['access'] = 1; //if login is successful create a session that can be authenticated 
     header("Location: " . $_SERVER['PHP_SELF']); //reload the page. The page will now not load the login form (see the first if condition) 
    } else //if password is incorrect reload the login form 
     { 
     header("Location: " . $_SERVER['PHP_SELF']); 
    } 
} else if (!$_SESSION['access']) //if the "access" session is not accessible show the form (not logged in) 
    { 
?> 
+0

因此該代碼可以使用單個用戶...但它的工作代碼,對不對? – Hackerman

+1

一般來說,我們歡迎提出問題的問題,首先您可以在PHP手冊網站上搜索「關聯數組」。你也需要一個'foreach'。這就是說,你真的應該使用一個數據庫 - 也許http://usercake.com/會被使用?我沒有用過它,但似乎在這裏提到了一點點。 – halfer

+1

如果這不是學生作業,硬編碼密碼是一個壞主意。 即使它是一項任務,它也正在設置壞習慣。 – Steve

回答

1

試試這個:

-------------------------- UPDATE --------- -------------------------

<?php 
session_start(); //initiates the sessions 

//begin testing 
$_POST['user'] = 'username1'; 
$_POST['submit'] = true; 
$_POST['password'] = 'pass3'; 
//end testing 

if (isset($_POST['submit'])) //checks to make sure the login form has been submitted 
    { 

    $users = array('username1','username2','username3'); 
    $passwords = array('pass1','pass2','pass3'); 
    if(in_array($_POST['user'], $users)) 
    { 
     $key = array_search($_POST['user'], $users); 

     if($passwords[$key]==$_POST['password']) 
     { 
     $_SESSION['access'] = 1; //if login is successful create a session that can be authenticated 
     //header("Location: " . $_SERVER['PHP_SELF']); 
     echo "welcome back ".$_POST['user']; 
     } else //if password is incorrect reload the login form 
     { 
     //header("Location: " . $_SERVER['PHP_SELF']); 
      echo "Password incorrect, error, redirecting to login"; 
     } 


    } 

    } 
else 
{ 
    echo "Login form"; 
} 
?> 

輸出:

Password incorrect, error, redirecting to login 

但是,如果你改變$ _ POST值['password']爲'pass1',如下所示:

$_POST['password'] = 'pass1'; 

你有這樣的輸出:

welcome back username1 

Saludos;)

+0

非常感謝您的建議。工作很好。但是,當我實現你的代碼時它會產生錯誤。我仔細檢查了任何可能的拼寫錯誤,仔細閱讀了關於in_array調用的內容,仍然找不到爲什麼會產生PHP錯誤。作爲參考,我使用的是默認的PHP版本5.2.17。任何其他建議都會很棒。謝謝。 –

+0

代碼更新...在我的本地主機上測試;) – Hackerman

+0

羅伯特 - 非常感謝你。你的耐心和知識解決了這個問題。我可以創建幾個用戶,每個用戶都有自己的密碼。在您的第一個建議後,我遇到了一個問題(錯誤),也導致會話未設置,例如頁面重新載入提示登錄。我已經解決了這個問題,現在,在您的幫助下,它的工作非常完美。再次感謝你。如果您希望看到完整的代碼,請告訴我。 謝謝其他人也貢獻了。 ;) –

0

如果只有兩個用戶不應該很難解決,你可以做一些事情如下;

<?php 
//change the variable values accordingly 
$user1='user1'; 
$user2='user2'; 
$pass1='pass1'; 
$pass2='pass2'; 
if ($_POST['submit']) { 
//check if they are equal to your info 
if(($_POST['user']==$user1) && $_POST['pass'] == $pass1){ 
     $_SESSION['access'] = 1; 
     header("Location: " . $_SERVER['PHP_SELF']); 
} else if(($_POST['user']==$user2) && $_POST['pass'] == $pass2){ 
     $_SESSION['access'] = 1; 
     header("Location: " . $_SERVER['PHP_SELF']); 
} else {//not valid at all 
//do what you want for login fail 
} 

} 
?>