我在这里使用数组来检查用户名,密码是否匹配。 我的问题是,我必须显示弹出消息,当它们不匹配时会说“无效的用户名/密码”,只返回到表单。但正在发生的是它经历了循环并在每个周期显示我的弹出消息。这是我的代码:
if (isset($_POST['submit']))
{
$login = array
(
0=>array
( 'username'=>'Art',
'password'=>'p@ssw0rd',
'user_id'=>'1'
),
1=>array
( 'username'=>'Berto',
'password'=>'1234',
'user_id'=>'2'
),
2=>array
( 'username'=>'Carrie',
'password'=>'5678',
'user_id'=>'3'
),
3=>array
( 'username'=>'Dino',
'password'=>'qwer',
'user_id'=>'4'
),
4=>array
( 'username'=>'Ely',
'password'=>'asdf',
'user_id'=>'5'
)
);
foreach($login as $sub_array)
{
$uname = $_POST['user'];
$pass = $_POST['password'];
if ($uname == $sub_array['username'] && $pass == $sub_array['password'])
{
$message = ( $sub_array['user_id'] );
echo "<script type='text/javascript'>
alert('Your user ID is : $message');
</script>";
}
else
{
echo "<script type='text/javascript'>
alert('Invalid username/password.');
</script>";
}
}
}
答案 0 :(得分:2)
不要在循环中打印消息,只测试名称是否存在。并在找到后立即停止循环。此外,由于$uname
和$password
不会更改,因此您应将它们设置在循环之外。
$found_user = false;
$uname = $_POST['user'];
$pass = $_POST['password'];
foreach ($login as $sub_array) {
if ($uname == $sub_array['username'] && $pass == $sub_array['password']) {
found_user = true;
$message = $sub_array['user_id'];
break;
}
}
if ($found_user) {
$message = ( $sub_array['user_id'] );
echo "<script type='text/javascript'>
alert('Your user ID is : $message');
</script>";
} else {
echo "<script type='text/javascript'>
alert('Invalid username/password.');
</script>";
}
答案 1 :(得分:0)
设置变量(在我的情况下为$val
)
foreach($login as $sub_array)
{
$uname = $_POST['user'];
$pass = $_POST['password'];
if ($uname == $sub_array['username'] && $pass == $sub_array['password'])
{
$val=1;
break;
}
else
{
$val=0;
}
}
}
if(!empty($login))
{
if($val==1){
$message = ( $sub_array['user_id'] );
echo "<script type='text/javascript'>
alert('Your user ID is : $message');
</script>";
}
else
{
echo "<script type='text/javascript'>
alert('Invalid username/password.');
</script>";
}
}
else
echo"empty array";
答案 2 :(得分:0)
如果一个用户和密码不匹配,您应该显示一个警报,而不能为多个用户执行此操作。只是在回应警报后放下休息。
您应该在循环外指定$user
和$pass
。它不应该每次循环分配。
if (isset($_POST['submit']))
{
$login = array
(
0=>array
( 'username'=>'Art',
'password'=>'p@ssw0rd',
'user_id'=>'1'
),
1=>array
( 'username'=>'Berto',
'password'=>'1234',
'user_id'=>'2'
),
2=>array
( 'username'=>'Carrie',
'password'=>'5678',
'user_id'=>'3'
),
3=>array
( 'username'=>'Dino',
'password'=>'qwer',
'user_id'=>'4'
),
4=>array
( 'username'=>'Ely',
'password'=>'asdf',
'user_id'=>'5'
)
);
$uname = $_POST['user'];
$pass = $_POST['password'];
foreach($login as $sub_array)
{
if ($uname == $sub_array['username'] && $pass == $sub_array['password'])
{
$message = ( $sub_array['user_id'] );
echo "<script type='text/javascript'>
alert('Your user ID is : $message');
</script>";
break;
}
else
{
echo "<script type='text/javascript'>
alert('Invalid username/password.');
</script>";
break;
}
}
}
你不应该那样检查。如果用户和密码匹配且两种情况都不匹配,则每次都有警报。您应该每次为每个用户运行此脚本 如果您想提醒所有用户,那么您可以这样做:
$uname = $_POST['user'];
$pass = $_POST['password'];
$output = "<script type='text/javascript'>";
foreach($login as $sub_array)
{
if ($uname == $sub_array['username'] && $pass == $sub_array['password'])
{
$message = ( $sub_array['user_id'] );
$output .= "alert(\"Your user ID is : $message \")";
}
else
{
$output .= " alert('Invalid username/password.')";
}
}
}
$output .= "</script>";
echo $output;
它将警告$ login数组中的所有用户。