2014-12-14 3 views
1

Я пытаюсь создать систему входа в систему с несколькими массивами, но только первая учетная запись работает правильно. Остальные 2 показывают неправильный пароль/имя 1 - это имя, 2 - псевдоним для входа, а 3 - пароль.Система входа в систему MultiArray

<?php 
$names=array(
1=>[ 
    1=>'test', 
    2=>'test', 
    3=>test 
], 
2=>[ 
    1=>'test1', 
    2=>'test1', 
    3=>'test1' 
], 
3=>[ 
    1=>'test2', 
    2=>'test2', 
    3=>'test2' 
] 
); 
foreach($names as $number) 
if($_POST){ 
    if($_POST['user']==$number[2] && $_POST['pass']==$number[3]){ 
     echo 'Welcome, ' . $number[1]; 
     break; 
    } 
    else{ 
     echo 'Wrong Username/Password. Please, try again!'; 
     break; 
    } 
} 
?> 
+1

Вашего 'else' оператор выход из цикла, как только неигровой встречаются, поэтому он никогда не будет пройти первую запись в' $ names'. Вам нужно удалить инструкцию 'else'. –

+0

Кроме того, '$ names [1] [3]' - константа, которая будет преобразована в строку. Вы должны заключить его в кавычки. – Hidde

ответ

1

Когда цикл переходит в else цикл будет break и прекращает поиск, если вы удалите перерыв он будет держать вторя wrong/username password до тех пор, пока пользователь не найден. Вы можете сделать это, как этот

$login = false; 
foreach($names as $number){ 
    if($_POST){ 
     if($_POST['user']==$number[2] && $_POST['pass']==$number[3]){ 
      echo 'Welcome, ' . $number[1]; 
      $login = true; 
      break; 
     } 
    } 
} 

if(!$login) 
{ 
    echo 'wrong username/password'; 
} 
1

со стороны вашего контура изменения кода, чтобы выглядеть код ниже .

$i=0; // added value to loop for post values too, assume input boxes for username and password are consecutive 
 
foreach($names as $number) 
 
if($_POST){ 
 
    if($_POST['user'][$i] == $number[2] && $_POST['pass'][$i] == $number[3]){ 
 
     echo 'Welcome, ' . $number[1]; 
 
     break; 
 
    } 
 
    else{ 
 
     echo "Wrong Username/Password. $number[1] Please , try again!"; 
 
     
 

 
    } 
 
}

1

Или с помощью возвращаемого значения, как это:

function checkUser($names) { 
    foreach($names as $number) { 
    if($_POST['user']==$number[2] && $_POST['pass']==$number[3]) 
     return 'Welcome, ' . $number[1];  
    } 
    return 'Wrong Username/Password. Please, try again!'; 
} 
if ($_POST) echo checkUser($names); 
0

я сделать это легкий путь. Благодаря @Simon MᶜKenzie за идею:

$i=1337; 
foreach($names as $number) 
if($_POST){ 
    if($_POST['user']==$number[2] && $_POST['pass']==$number[3]){ 
     echo 'Welcome, ' . $number[1] . '!'; 
     $i=1; 
     break; 
    }else{ 
    $i=0; 
    } 
} 
if($i==0){ 
    echo 'Wrong Username/Password. Please, try again!'; 
} 
Смежные вопросы