Question

I got this loop right here with arrays to check whether the username, password matches. My problem is that I have to display a pop up message that will say "Invalid username/password" when they don't match and just return to the form. But what's happening is that it goes through the loop and displays my pop up message every cycle. Here is my code:

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>";
                }
        }
}
Was it helpful?

Solution

Don't print the message in the loop, just test whether the name exists. And stop looping as soon as you find it. Also, since $uname and $password don't change, you should set them outside the loop.

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

OTHER TIPS

set a variable (in my case $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";

You should show one alert if one user and password not matched you can not do it for multiple user. just put break after echoing alert.

Another thing you should assign $user and $pass outside the loop. it should not assign each time in loop.

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

you should not check it like that. you have alert for each time if user and password matched and if not matched both cases. you should run this script everytime for each user If you want to alert for all users then you can do it like this:

           $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;

It will alert for all users in $login array.

Licensed under: CC-BY-SA with attribution
Not affiliated with StackOverflow
scroll top