2012-08-13 18 views
8

मुझे HTML फ़ॉर्म से इनपुट के मूल्य निकालने में कोई समस्या है। जैसा कि मुझे पता है, मेरे कोड में कुछ भी गलत नहीं है, लेकिन मुझे नहीं पता कि समस्या क्या है।DOM getElementbyId ठीक से काम नहीं करता

<?php 
error_reporting(E_ALL); 
    ini_set('display_errors', 1); 

$t =<<<D 
<form id="frm-send" method="post" action="index.php" > 
<input type="text" name="data[postusername]" id="postusername" value="user" />  
<input type="checkbox" name="data[save]" id="data[save]" value="1" /> 
<input type="hidden" name="secret" id="secret" value="0d35635c0cb11760789de6c4fe35e046311f724b" /> 
<input type="submit" name="btnSubmit" id="btnSubmit" value="Send" /> 
<input type="hidden" name="data[checkgetrequest]" value="true" id="data[checkgetrequest]" /> 
<input type="hidden" name="frm-id" value="13448477965028bfb44222d" id="frm-id" /> 
</form> 
<input type="text" id="getfocus_txt_13448477965028bfb44222d" name="getfocus_txt_13448477965028bfb44222d" /> 


D; 
    $dom = new domDocument; 
    $dom->loadHTML($t); 
    $dom->preserveWhiteSpace = true; 
    $frmid = $dom->getElementById('frm-id') ; 
    echo $frmid->getAttribute('value'); 


?> 

यह मुझे एक त्रुटि दिखाता है:

Fatal error: Call to a member function getAttribute() on a 
non-object in E:\Apache\msg.php on line 22 

मैं विंडोज 7 पर XAMPP 1.7.3 का उपयोग कर रहा हूँ। मैंने इसे अपने सर्वर पर परीक्षण किया और इससे मुझे कोई त्रुटि नहीं मिली। किसी भी मदद की सराहना की जाएगी।

+0

त्रुटि की पुष्टि की: http://codepad.org/ RAknUJ5a –

+0

मुझे कोडपैड पर एक ही चीज़ मिल गई, लेकिन मेरे सर्वर पर यह सही तरीके से काम करता है। कोडेपैड <5.3, आईआईआरसी .... @ डेथ है, आप किस PHP संस्करण के साथ काम कर रहे हैं? –

+0

@ क्रिस एफपी 5.3.1 --- – undone

उत्तर

4

doc page पर टिप्पणी में बताया गया है, तो आप एक doctype getElementById के लिए अपेक्षा के अनुरूप

t =<<<D 
<!DOCTYPE html> 
<form id="frm-send" method="post" action="index.php" > 

...code continues ... 

प्रलेखन प्रति प्रदर्शन करने की घोषणा करनी चाहिए, एक DTD के लिए निर्दिष्ट किया जाना चाहिए getElementById यह समझने के लिए कि तत्व की कौन सी विशेषता अद्वितीय पहचानकर्ता के रूप में उपयोग की जाती है। एक डॉक्टरेट घोषित करने से यह पूरा हो जाता है। आप यह भी स्पष्ट रूप से setIdAttribute का उपयोग करके (एक DTD दिए बिना) इस सेट कर सकते हैं,

प्रलेखन

+0

नहीं, क्या आप समझा सकते हैं कि मेरा कोड सर्वर पर क्यों काम करता है? – undone

+0

नहीं, मैं अपने सर्वर पर (PHP 5.4 के साथ) क्यों नहीं कर सकता, डॉक्टरेट की आवश्यकता नहीं है। मैं पता लगाने की कोशिश कर रहा हूं, क्योंकि मुझे लगता है कि यह अजीब बात है कि ** ** ** को एक डॉक्टरेट घोषित नहीं करना है। 'लोड HTML' कहलाता है जब मेरे सर्वर का PHP उदाहरण डीटीडी प्राप्त कर रहा है? अनुमान लगा? –

+0

मेरा सर्वर PHP 5.2 है और मैंने एक और PHP 5.3 और सभी कार्यों के साथ परीक्षण किया !!! – undone

6
DOMDocument::getElementById() docs से

:

For this function to work, you will need either to set some ID attributes with DOMElement::setIdAttribute or a DTD which defines an attribute to be of type ID. In the later case, you will need to validate your document with DOMDocument::validate or DOMDocument::$validateOnParse before using this function.


के बाद से अपने HTML केवल एक टुकड़ा है, यह एक DTD है, तो आप हुक्म आईडी स्वयं जिम्मेदार बताते हैं के साथ छोड़ दिया जाता है निर्दिष्ट नहीं है। एक बुनियादी उदाहरण देखने के लिए की तरह होगा:

$html = '<div><p id="a">Para A</p><p id="b">Para B</p></div>'; 

$dom = new DOMDocument; 
$dom->loadHTML($html); 

// Set the ID attribute to be "id" for each (non-ns) element that has one. 
foreach ($dom->getElementsByTagName('*') as $element) { 
    if ($element->hasAttribute('id')) { 
     $element->setIdAttribute('id', true); 
    } 
} 

$p = $dom->getElementById('b'); 
echo $p->textContent; // Para B