2011-06-27 19 views
6

तो मेरे पास एक ऐसा फॉर्म है जिसमें 4 इनपुट, 2 टेक्स्ट, 2 छुपा हुआ है। मैंने नाम से दो टेक्स्ट इनपुट मानों को पकड़ लिया है, जो हैं (get_me_two, get_me_three) और मैंने फॉर्म एक्शन भी लिया है जो (get_me.php) है। जो मैं अब करना चाहता हूं वह 2 छिपे हुए इनपुट को पकड़ लेता है, लेकिन मूल्य नहीं। मैं इनपुट खुद को पकड़ना चाहता हूं।स्ट्रिंग के रूप में छिपे हुए इनपुट को पकड़ना (PHP सरल HTML डोम पार्सर का उपयोग करना)

उदाहरण के लिए:

<form action="get_me.php" method="post"> 
    <input type="text" name="get_me_two"> 
    <input type="text" name="get_me_three"> 
    <input type="hidden" name="meta_required" value="from"> 
    <input type="hidden" name="meta_forward_vars" value="0"> 
</form> 

और क्या मैं यहाँ से हड़पने के लिए चाहते हैं दो छिपा आदानों, नहीं वैल्यूज संपूर्ण स्ट्रिंग है: यहाँ मेरी फार्म है।

मुझे यकीन नहीं है कि इन्हें कैसे उपयोग किया जाए: PHP सरल HTML डोम पार्सर, अगर कोई ऐसा तरीका जानता है जो महान होगा, यदि नहीं, तो कोई विकल्प भी है जो बहुत अच्छा होगा। एक बार जब मैंने इन्हें पकड़ लिया है तो मैं छिपे तारों के साथ 2 इनपुट मानों को दूसरे पृष्ठ पर पास करने की योजना बना रहा हूं, और निश्चित रूप से फॉर्म एक्शन।

इसके अलावा, अगर कोई दिलचस्पी लेता है तो मेरा पूरा कोड है, जिसमें सरल HTML डोम कार्यक्षमता शामिल है।

<?php 

include("simple_html_dom.php"); 

// Create DOM from URL or file 
$html = file_get_html('form_show.php'); 
$html->load(' 
<form action="get_me.php" method="post"> 
<input type="text" name="get_me_two"> 
<input type="text" name="get_me_three"> 
<input type="hidden" name="meta_required" value="from"> 
<input type="hidden" name="meta_forward_vars" value="0"> 
</form>'); 

// Get the form action 
foreach($html->find('form') as $element) 
    echo $element->action . '<br>'; 

// Get the input name  
foreach($html->find('input') as $element) 
    echo $element->name . '<br>'; 
?> 

तो, अंतिम परिणाम 3 मानों को पकड़ लेगा, और फिर 2 छिपे हुए इनपुट (पूर्ण तार)। मदद की बहुत सराहना की जाएगी क्योंकि यह मुझे ऐसा करने के लिए थोड़ा पागल गाड़ी चला रहा है।

उत्तर

0

आप DomDocument का उपयोग करते हैं, तो आपको निम्न कर सकता है:

<?php 
    $hidden_inputs = array(); 
    $dom = new DOMDocument('1.0'); 
    @$dom->loadHTMLFile('form_show.php'); 

    // 1. get all inputs 
    $nodes = $dom->getElementsByTagName('input'); 

    // 2. loop through elements 
    foreach($nodes as $node) { 
     if($node->hasAttributes()) { 
      foreach($node->attributes as $attribute) { 
       if($attribute->nodeName == 'type' && $attribute->nodeValue == 'hidden') { 
        $hidden_inputs[] = $node; 
       } 
      } 
     } 
    } unset($node); 

    // 3. loop through hidden inputs and print HTML 
    foreach($hidden_inputs as $node) { 
     echo "<pre>" . htmlspecialchars($dom->saveHTML($node)) . "</pre>"; 
    } unset($node); 

?> 
+1

DOMDocument :: saveHTML() बिल्कुल 0 पैरामीटर चेतावनी के रूप में प्राप्त करने की अपेक्षा करता है –

4

मैं सरलडॉम का उपयोग नहीं करता (मैं हमेशा पूरे-होग पर जाता हूं और डोमडॉक्यूमेंट का उपयोग करता हूं), लेकिन क्या आप ->find('input[@type=hidden]') जैसे कुछ नहीं कर सकते?

यदि SimpleDOM उस प्रकार के चयनकर्ता की अनुमति नहीं देता है, तो आप ->find('input') परिणामों पर बस लूप कर सकते हैं और विशेषताओं की तुलना करके छिपे हुए लोगों को चुन सकते हैं।

+0

का उपयोग कर पूर्ण छिपा आदानों समझे (धन्यवाद): // प्राप्त इनपुट hiddens foreach ($ html-> लगता है ('इनपुट [टाइप = छुपा] ') $ तत्व के रूप में) echo $ तत्व; अब मैं सोच रहा हूं कि इन * व्यक्तिगत रूप से * स्टोर करने का सबसे अच्छा तरीका क्या है और उन्हें दूसरे पृष्ठ पर भेज दें। क्या इन्हें एक चर में स्टोर करने का कोई तरीका है, प्रत्येक इनपुट छिपा हुआ है? –

+0

उन्हें एक सरणी में संग्रहीत करें: '$ hidden = array ('meta_required' => xxx, 'meta_forward_vars => yyy);' और नए फॉर्म को बनाने के समय आने पर छिपे हुए इनपुट को पुनर्निर्माण के लिए इसका उपयोग करें। या बस 'find()' परिणामों को कहीं सेव करें और इसे एक नए सरणी के बजाय अपने स्रोत के रूप में उपयोग करें। –

+0

हम्म, जबकि मैं इस फॉर्म को अपने फॉर्म के लिए किसी अन्य पृष्ठ पर पास करना चाहता हूं जो कि पहले से स्टाइल है, क्या यह जानकारी किसी प्रकार के सत्र में संग्रहीत करना सबसे अच्छा है? शांत नहीं है कि मैं सत्र में व्यक्तिगत रूप से तत्वों को कैसे स्टोर करूंगा। –