Shameel Kadannamanna
Shameel Kadannamanna

Reputation: 386

How to shorten multiple isset functions in PHP

Look at my script:

if((isset($_POST['unma']) && isset($_POST['livi'])) && (isset($_POST['cont']) && 

    isset($_POST['phone']))){
        if(
            (
                (
                    (
                        (isset($_POST['fnma']) && isset($_POST['lnma']))
                        &&
                        (isset($_POST['occ']) && isset($_POST['hom']))
                    )
                    &&
                    (
                        (isset($_POST['town']) && isset($_POST['dist']))
                        &&
                        (isset($_POST['dispmb']) && isset($_POST['fbc']))
                    )
                )
                &&
                (
                    (
                        (isset($_POST['gp']) && isset($_POST['twt']))
                        &&
                        (isset($_POST['ins']) && isset($_POST['flc']))
                    )
                    &&
                    (
                        (isset($_POST['ile']) && isset($_POST['cam']))
                        &&
                        (isset($_POST['cam_co']) && isset($_POST['prof_phr']))
                    )
                )
            )
            &&
            isset($_POST['awards'])
        ){
                // Codes here
        }

How can I short this isset functions. I found an solution with foreach but they are not checking the post isset, rather they are checking if the posted values are not empty

Upvotes: 0

Views: 291

Answers (5)

Giacomo1968
Giacomo1968

Reputation: 26066

Knowing that isset can take multiple values, you could do this:

if (isset($_POST['unma'], $_POST['livi'], $_POST['cont'], $_POST['phone'], $_POST['fnma'], $_POST['lnma'], $_POST['occ'], $_POST['hom'], $_POST['town'], $_POST['dist'], $_POST['dispmb'], $_POST['fbc'], $_POST['gp'], $_POST['tat'], $_POST['ins'], $_POST['flc'], $_POST['ile'], $_POST['cam'], $_POST['cam_co'], $_POST['prof_phr'], $_POST['awards'])) {
    // Codes here
}

But that seems nightmarish. I would make the $_POST keys an array & then do the following:

// Set an array of post values.
$post_values = array('unma','livi','cont','phone','fnma','lnma','occ','hom','town','dist','dispmb','fbc','gp','tat','ins','flc','ile','cam','cam_co','prof_phr','awards');

// Set '$post_valid' to an array.
$post_valid = array();

// Roll through the post values.
foreach ($post_values AS $post_key => $post_value) {
  // If the value is  set, set '$post_valid' to TRUE or else set it to FALSE.
  // $post_valid = isset($_POST[$post_key]) ? TRUE : FALSE; // Not really needed. Simple `isset` should work.
  $post_valid[$post_key] = !empty($_POST[$post_key]);
}

// Now if '$post_valid' values are all true, do something.
$post_valid_values = array_values($post_valid);
if (!empty($post_valid_values) && (count($post_valid_values) == count($post_values))){
  // Codes here
}

Upvotes: 0

Ares
Ares

Reputation: 5903

You can use

if (isset($_POST['a'], $_POST['b'], $_POST['c'], ...))

and so on. If any of the variables is not set then you will get false.

Upvotes: 2

ɹɐqʞɐ zoɹǝɟ
ɹɐqʞɐ zoɹǝɟ

Reputation: 4370

put required fields in a array and check for it using loop,it is easy and easy to add required fields.

$req_values = array('fnma','lnma','occ','hom','town','dist','dispmb','fbc','gp','twt','ins','flc','ile','cam','cam_co','prof_phr');


foreach($req_values as $key) {
  if (empty($_POST[$key])) {
           echo $key .'is required';
           exit;
      }
}

Upvotes: 0

Cyclonecode
Cyclonecode

Reputation: 30001

I think something like this would work:

 // add all names of the values that needs to be set in the `$_POST` array
 $values = array('fnma', 'lnma');

 function checkSet($array) {
   foreach($array as $value) {
     if(!isset($_POST[$value])) return false;
   }
   return true;
 }
 if(checkSet($values)) {
   // your code
 }

Upvotes: 0

deceze
deceze

Reputation: 522081

$expectedKeys = ['fnma', 'lnma', ...];
if (!array_diff_key(array_flip($expectedKeys), $_POST)) {
    // all keys are set
}

Upvotes: 0

Related Questions