2013-01-23 16 views
17

Sto provando a lavorare con i completamenti automatici di AJAX e sto riscontrando alcuni problemi nel far funzionare le due lingue in sinergia.PHP isset() con più parametri

Se si sostituisce tutte le issets con solo 1 $ _POST il frammento di seguito funzionerà, ma con l'aggiunta di un altro $ _POST ottengo un errore sulla linea 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>'; 
} 
} 


?> 

Qualche consiglio su questo che sta gettando questa l'errore sarebbe molto apprezzato. Grazie.

ho capito dovrei usare mysqli, sto solo cercando di ottenere la logica del primo :)

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(''); 

     }); 
    }); 
}); 
}); 
+1

Soltanto 'isset' ogni indice dell'array. Tra l'altro, "isset == true' è ridondante. – dualed

risposta

48

Il parametro (s) a isset() devono essere un riferimento variabile e non un'espressione (nel tuo caso una concatenazione); ma è possibile raggruppare più condizioni insieme come questo:

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

Questo torneranno true solo se sono impostate tutte argomenti isset() e non contengono null.

Nota che isset($var) e isset($var) == true hanno lo stesso effetto, quindi l'ultimo è un po 'ridondante.

Aggiornamento

La seconda parte della vostra espressione utilizza empty() come questo:

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

Questo è sbagliato per gli stessi motivi di cui sopra.In realtà, non c'è bisogno empty() qui, perché da quel momento si sarebbe già verificato se le variabili sono impostate, in modo da poter abbreviare l'espressione completa in questo modo:

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

o utilizzando un'espressione equivalente:

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

Considerazioni finali

Si dovrebbe considerare l'utilizzo di filter funzioni per gestire gli ingressi:

$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 

A proposito, è possibile personalizzare i filtri per verificare le varie parti dei valori inviati.

+0

Una nota - a partire da PHP 5.5.0 'empty()' supporta anche espressamente le espressioni. – Boaz

+0

Hai molto avanzato per me haha, sto letteralmente imparando PHP. Grazie –

6

I parametri di isset() dovrebbero essere separati da un segno di virgola (,) e non un segno di punto (.). Il tuo codice corrente concatena le variabili in un singolo parametro, invece di passarle come parametri separati.

Così il codice originale valuta le variabili come un unificato string valore:

isset($_POST['search_term'] . $_POST['postcode']) // Incorrect 

Mentre la forma corretta li valuta separatamente come variabili:

isset($_POST['search_term'], $_POST['postcode']) // Correct 
6

Hai solo bisogno:

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

isset && !empty è ridondante.

1

Utilizzare OR (||) operatore logico del php per php isset() con più operatori es

if (isset($_POST['room']) || ($_POST['cottage']) || ($_POST['villa'])) { 

} 
+0

Questo è sbagliato e genererebbe notifiche se '$ _POST ['room']' è impostato e il resto no. È necessario avvolgere tutti questi in un unico 'isset' e passare le ultime due variabili come argomenti, o è necessario avvolgerli in un' isset' di loro. –