2012-03-25 9 views
-2

ちょっと私は、HTMLファイルにいくつかの変更を加えたスクリプトを呼び出そうとしていましたが、スクリプトを実行すると、非オブジェクトを呼び出しています。明らかに私は間違ったことをしましたが、何ですか?ここにスクリプトがあります。私のPHPスクリプトで非オブジェクトエラーを取得する

/*Dom controllers*/ 
    $dom = new DOMDocument(); 
    $dom->loadHTML('index.html'); 
    $id = $dom->getElementById('contact_us'); 
    $p = $dom->appendChild(new DOMElement('p')); 
    $op = $dom->getElementsByTagName('p'); 

    /* Dem POST vars used by dat Ajax mah ziggen, yeah boi*/ 
    if (isset($_POST['Home']) && isset($_POST['About']) && isset($_POST['Contact']) && isset($_POST['sexyText'])){ 
    $home = $_POST['Home']; 
    $about = $_POST['About']; 
    $contact = $_POST['Contact']; 
    $text = $_POST['sexyText']; 
    trim($home); 
    trim($about); 
    trim($contact); 
    trim($text); 
    } 

    function post(){ 
     global $dom, $id, $home, $about, $contact, $text, $textp, $p, $op; 
       $textp = $dom->createTextNode($text); 
       $p->appendChild($textp); 
       $id->replaceChild($p, $op); 
       $dom->saveHTMLFile('index.html'); 
    } 


    post(); 
    echo 1; 


?> 

エラーはreplaceChild関数で発生します。この時点で

+0

145行目で$ thisを忘れてしまったのですか、エラーメッセージとその行をどうしますか? –

+0

どの行ですか?無効なHTMLファイルを解析するのに失敗した 'loadHTML()'に私の賭けがあるかもしれませんが、エラーメッセージについてさらに多くの文脈が必要です。 –

+0

どの行にエラーがありますか? –

答えて

1
  $id->replaceChild($p, $op); 

$opは実際にあなたのgetElementsByTagNameの呼び出しによって返されたのDOMNodeList、です。 replaceChild呼び出しにノードリストを使用することはできません。DOMNodeではなくDOMNodeListが必要です。

+0

ああ、意味があります。 – VinceOmega

+0

だから私は '$ id-> replaceChild($ p、$ id-> firstChild);'のようなことをやっていると思います。 – VinceOmega

+0

'$ op-> item(0)'ですが、安全のため$ opに実際にノードのリストがあるかどうか確認してください。一致タグが見つからない場合はまだdomnodelistになります。長さが0のリストのみです。 –

関連する問題