2013-11-15 336 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 
} 

} 
?>