在PHP中循环使用foreach的逻辑

时间:2014-01-21 05:51:20

标签: php loops foreach alert

我在这里使用数组来检查用户名,密码是否匹配。 我的问题是,我必须显示弹出消息,当它们不匹配时会说“无效的用户名/密码”,只返回到表单。但正在发生的是它经历了循环并在每个周期显示我的弹出消息。这是我的代码:

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>";
                }
        }
}

3 个答案:

答案 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数组中的所有用户。