9

HTMLフォームから入力値を抽出するのに少し問題があります。私が知っているように、私のコードには何も問題はありませんが、何が問題なのかを見つけることができません。

<?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

Windows 7 で XAMPP 1.7.3 を使用しています。サーバーでテストしましたが、エラーは表示されませんでした。どんな助けでも大歓迎です。

4

2 に答える 2

7

DOMDocument::getElementById()ドキュメントから:

この関数を機能させるには、いくつかのID属性を設定するかDOMElement::setIdAttribute、属性をタイプIDとして定義するDTDを設定する必要があります。後者の場合、この関数を使用する前に、DOMDocument::validateまたは使用する前にドキュメントを検証する必要があります。DOMDocument::$validateOnParse


HTMLはフラグメントにすぎないため、DTDを指定しないため、ID属性を自分で指定する必要があります。基本的な例は次のようになります。

$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
于 2012-08-13T16:27:35.457 に答える
5

doc ページのコメントに記載されているようにgetElementById、期待どおりに実行するには、doctype を宣言する必要があります。

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

...code continues ...

ドキュメントにgetElementByIdよると、要素のどの属性が一意の識別子として使用されているかを理解するには、DTD を指定する必要があります。Doctype を宣言すると、これが実現します。setIdAttributeを使用して、(DTD を指定せずに) 明示的に設定することもできます。

ドキュメンテーション

于 2012-08-13T16:30:00.333 に答える