joedborg
joedborg

Reputation: 18343

Validate that user submission has at least one whitelisted value and no blacklisted values

I know there are a lot of these, but I'm looking for something slightly different.

A straight diff won't work for me.

I have a list (array) of allowed tags i.e.

["engine", "chassis", "brakes", "suspension"]

Which I want to check with the list the user has entered. Diff won't work, because the user may not enter all the options i.e. ["engine"] but I still want this to pass. What I want to happen is fail if they put something like banana in the list.

Upvotes: 3

Views: 156

Answers (4)

CodeCaster
CodeCaster

Reputation: 151586

You can use array_intersect(), and check the size of the resulting array with the size of the input array. If the result is smaller, then the input contains one or more items not in the 'allowed' array. If its size is equal, all items in it are in the user's input, so you can use the array do do whatever you want.

Upvotes: 2

Quasdunk
Quasdunk

Reputation: 15220

$allowed_tags = array("engine","chassis","brakes","suspension");

$user_iput = array("engine", "suspension", "banana");

foreach($user_input as $ui) {
  if(!in_array($ui, $allowed_tags)) {
    //user entered an invalid tag
  }
}

Upvotes: 0

Rok Kralj
Rok Kralj

Reputation: 48725

Use array_diff();

$allowed=array("engine","chassis","brakes","suspension");
$user=array("engine","brakes","banana");
$unallowed=array_diff($user, $allowed);
print_r($unallowed);

This will return banana, as it is in $user, but not in $allowed.

Upvotes: 1

Rijk
Rijk

Reputation: 11301

array_diff(): http://nl.php.net/array_diff

Returns an array containing all the entries from array1 that are not present in any of the other arrays.

if ( array_diff( $input, $allowed ) ) {
    // error
}

Upvotes: 0

Related Questions