PHP isset() with multiple parameters

ajax, mysql, php

Solution

The parameter(s) to `isset()` must be a variable reference and not an expression (in your case a concatenation); but you can group multiple conditions together like this:

if (isset($_POST['search_term'], $_POST['postcode'])) {
}

This will return `true` only if all arguments to `isset()` are set and do not contain `null`.

Note that `isset($var)` and `isset($var) == true` have the same effect, so the latter is somewhat redundant.

Update

The second part of your expression uses `empty()` like this:

empty ($_POST['search_term'] . $_POST['postcode']) == false

This is wrong for the same reasons as above. In fact, you don't need `empty()` here, because by that time you would have already checked whether the variables are set, so you can shortcut the complete expression like so:

isset($_POST['search_term'], $_POST['postcode']) && 
    $_POST['search_term'] && 
    $_POST['postcode']

Or using an equivalent expression:

!empty($_POST['search_term']) && !empty($_POST['postcode'])

Final thoughts

You should consider using `filter` functions to manage the inputs:

$data = filter_input_array(INPUT_POST, array(
    'search_term' => array(
        'filter' => FILTER_UNSAFE_RAW,
        'flags' => FILTER_NULL_ON_FAILURE,
    ),
    'postcode' => array(
        'filter' => FILTER_UNSAFE_RAW,
        'flags' => FILTER_NULL_ON_FAILURE,
    ),
));

if ($data === null || in_array(null, $data, true)) {
    // some fields are missing or their values didn't pass the filter
    die("You did something naughty");
}

// $data['search_term'] and $data['postcode'] contains the fields you want

Btw, you can customize your filters to check for various parts of the submitted values.

Problem

I'm trying to work with AJAX autocompletes and I am having a few problems with getting the two languages to work in synergy. When I replace all the issets with only 1 $_POST the snippet below will work, however by adding another $_POST I get an error on line 5. ``` <?php require_once '../Configuration.php'; if (isset($_POST['search_term'] . $_POST['postcode']) == true && empty ($_POST['search_term'] . $_POST['postcode']) == false) { $search_term = mysql_real_escape_string($_POST['search_term'] . $_POST['postcode']); $query = mysql_query("SELECT `customer_name`,`postcode` FROM `Customers` WHERE `customer_name` LIKE '$search_term%' "); while(($row = mysql_fetch_assoc($query)) !== false) { //loop echo '<li>',$row['customer_name'] . $row['postcode'] '</li>'; } } ?> ``` Any advice on why it is throwing this error would be much appreciated. Thanks. I understand I should be using mysqli, I am just trying to get the logic first :) Js: Primary.js: ``` $(document).ready(function() { $('.autosuggest').keyup(function() { var search_term = $(this).attr('value'); var postcode = $_GET['postcode']; //alert(search_term); takes what is typed in the input and alerts it $.post('ajax/search.php', {search_term:search_term, postcode:postcode}, function (data) { $('.result').html(data); $('.result li').click(function() { var result_value = $(this).text(); $('.autosuggest').attr('value', result_value); $('.result').html(''); }); }); }); }); ```

Original source