2013-01-23 12 views
17

मैं AJAX के पूर्ण हो जाता है के साथ काम करने की कोशिश कर रहा हूं और मुझे तालमेल में काम करने के लिए दो भाषाओं में हो रही के साथ कुछ समस्याएं हो रहा है के साथ।पीएचपी isset() से अधिक पैरामीटर

जब मैं केवल 1 $ _POST के साथ सभी issets की जगह टुकड़ा नीचे काम करेंगे, लेकिन एक और $ _POST मैं लाइन 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>'; 
} 
} 


?> 

कारण है कि यह इस फेंक रहा है पर कोई सलाह पर एक त्रुटि प्राप्त जोड़कर त्रुटि की सराहना की जाएगी। धन्यवाद।

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

एक 'सरणी सूचकांक प्रति isset' साथ php isset() के लिए php के OR (||) तार्किक ऑपरेटर का प्रयोग करें। जिस तरह से 'isset == true' अनावश्यक है। – dualed

उत्तर

48

पैरामीटर (रों) isset() को होना चाहिए:

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

जबकि सही रूप चर के रूप में अलग से उन्हें मूल्यांकन करता है एक परिवर्तनीय संदर्भ और एक अभिव्यक्ति नहीं (आपके मामले में एक संयोजन);

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

यह true केवल तभी isset() करने के लिए सभी तर्क स्थापित कर रहे हैं और null शामिल नहीं है वापस आ जाएगी: लेकिन आप एक साथ इस तरह समूह से कई की स्थिति कर सकते हैं।

ध्यान दें कि isset($var) और isset($var) == true का एक ही प्रभाव है, इसलिए बाद में कुछ हद तक अनावश्यक है।

अद्यतन

अपने अभिव्यक्ति के दूसरे भाग empty() इस तरह का उपयोग करता है:

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

यह उपर दिए गए कारणों के लिए गलत है।वास्तव में, आप, यहाँ empty() की जरूरत नहीं है, क्योंकि उस समय तक आप पहले से ही जाँच की है कि क्या चर सेट कर रहे हैं के लिए होता है, ताकि आप तो जैसे पूरा अभिव्यक्ति शॉर्टकट कर सकते हैं:

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

या एक बराबर अभिव्यक्ति का उपयोग करते हुए:

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

अंतिम विचार

आप filter कार्यों का उपयोग कर आदानों का प्रबंधन करने पर विचार करना चाहिए:

$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 

बीटीडब्ल्यू, आप सबमिट किए गए मानों के विभिन्न हिस्सों की जांच के लिए अपने फ़िल्टर को कस्टमाइज़ कर सकते हैं।

+0

एक नोट - PHP 5.5.0 'खाली()' के रूप में स्पष्ट रूप से अभिव्यक्तियों का समर्थन करता है। – Boaz

+0

आपने मेरे लिए अभी तक बहुत उन्नत है हाहा, मैं सचमुच सिर्फ PHP सीख रहा हूं। धन्यवाद –

6

isset() के मापदंडों होना चाहिए

मैं समझता हूँ कि मैं mysqli का उपयोग करना चाहिए, मैं सिर्फ तर्क पहले :)

जे एस पाने के लिए कोशिश कर रहा हूँ एक अल्पविराम चिह्न से अलग (,) और एक बिंदु चिह्न नहीं (.)। आपका वर्तमान कोड वैरिएबल को एक पैरामीटर में जोड़ता है, उन्हें अलग पैरामीटर के रूप में पास करने के बजाय।

तो मूल कोड एक एकीकृत string मूल्य के रूप में चर का मूल्यांकन करता है:

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

तुम बस जरूरत है:

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

isset && !empty अनावश्यक है।

1

कई ऑपरेटर , उदा,

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

} 
+0

यह गलत है, और नोटिस उत्पन्न करेगा यदि '$ _POST ['कमरा'] सेट है और शेष नहीं है। आपको इन सभी को एक 'जारीकर्ता' में लपेटने की आवश्यकता है और अंतिम दो चर को तर्क के रूप में पास करना होगा, या आपको उन्हें अपने 'जारीकर्ता' में लपेटने की आवश्यकता है। –

संबंधित मुद्दे