2011-10-07 11 views
9

0 को संचरित/मान्य करने के लिए मेरे पास निम्न सरणी है और यह जानना है कि केवल पूर्णांक की अनुमति देने के लिए इस सरणी को मान्य करने और संतृप्त करने का सबसे अच्छा तरीका क्या होगा?PHP इंटीग्रर्स

if(is_array($_POST['taxonomy'])) { 
    $term_ids = array_map('esc_attr', $_POST['taxonomy']); 
} 

कौन इस तरह दिखता है मुद्रित जब:

Array 
(
    [0] => 13 
    [1] => 12 
) 

मैं जानता हूँ कि esc_attr तो बहुत सुरक्षित नहीं है कुछ थोड़ा और बढ़ा दी चाहते हैं।

कोई भी मदद महान होगी।

चीयर्स,

डेव

+0

कोई फर्क नहीं पड़ता INTs करने के लिए उन्हें कास्ट क्या ... –

+0

यदि यह एक स्ट्रिंग मैं बस का उपयोग करेंगे (पूर्णांक), लेकिन था कुछ है एक सरणी के लिए उपयोग के समान? आपके उत्तर – daveaspinall

+0

के लिए धन्यवाद, आप लूप –

उत्तर

12

यह $_POST डेटा है के बाद से, आप ctype_digit के लिए जाँच करने के लिए चाहता हूँ (यानी एक स्ट्रिंग केवल अंक युक्त):

$sanitizedValues = array_filter($_POST['taxonomy'], 'ctype_digit'); 

नोट यह है कि बस गैर-संख्यात्मक मानों को छोड़ देता है।

+0

ने अभी यह कोशिश की और ऐसा लगता है कि हर किसी के लिए धन्यवाद, धन्यवाद, बहुत मददगार! हालांकि यह कितना सुरक्षित है? अगर कोई इस सरणी में कुछ इंजेक्ट करना था? (हमारे पास हैकिंग के साथ कुछ समस्याएं हैं इसलिए मैं सभी कोडों के माध्यम से जा रहा हूं और किसी भी छेद को जोड़ रहा हूं)। चीयर्स – daveaspinall

+0

इसके साथ आप यह सुनिश्चित कर सकते हैं कि '$ sanitizedValues' में केवल स्ट्रिंग हैं जिनमें केवल संख्याएं हों। न कुछ ज्यादा, न कुछ कम। – deceze

+0

बहुत अच्छा, और बहुत साफ है। चीयर्स @ डिसेज और हर कोई जिसने उत्तर पोस्ट किया। – daveaspinall

1
foreach($array as $key => $value) { 
    $array[$key] = (int) $value; 

    if($array[$key] != $value) { 
     // error 
    } 
} 
+0

POST डेटा कभी भी 'int' नहीं है, यह सभी तार है। – deceze

+0

इस नंबर की तरह दिखता है: सरणी ( [0] => 13 [1] => 12 ) – MasterCassim

+1

हाँ, पर वे * तार *, नहीं 'int's कर रहे हैं। – deceze

3

एक वैकल्पिक PHPs filter फ़ंक्शन का उपयोग होगा:

$array = array(
    13, 12, '1', 'a' 
); 

$result = filter_var($array, FILTER_VALIDATE_INT, array(
    'flags' => FILTER_REQUIRE_ARRAY, 
    'options' => array('min_range' => 1) 
)); 

var_dump($result); 

/* 
array(4) { 
    [0]=> 
    int(13) 
    [1]=> 
    int(12) 
    [2]=> 
    int(1) 
    [3]=> 
    bool(false) 
} 
*/ 
+0

अधिक वर्बोज़ लेकिन तकनीकी रूप से अधिक उपयुक्त। +1 :) – deceze

+0

क्षमा करें दोस्तों, दोनों के बीच क्या अंतर है? – daveaspinall

+0

यदि यह एक ऐसा क्षेत्र है जिसे आप मान्य कर रहे हैं, तो मुझे लगता है कि यह सिर्फ स्वाद का विषय है। यद्यपि यदि आपके पास फ़िल्टर फ़ंक्शंस को सत्यापित करने में बहुत कुछ है, तो आपको कुछ काम बचा सकता है (उदाहरण के लिए [filter_input_array] (http://php.net/manual/function.filter-input-array.php) देखें)। और मुझे लगता है, अगर आपको या किसी और को यह समझना है कि आप 3 महीने बाद क्या कर रहे हैं, तो फ़िल्टर फ़ंक्शन अधिक स्पष्ट रूप से दिखाता है कि क्या हो रहा है। – Yoshi