2011-06-27 17 views
6

私は4つの入力、2つのテキスト、2つのフォームを持っています。私は(get_me_two、get_me_three)である名前から2つのテキスト入力値を取得し、(get_me.php)であるフォームアクションを取得しました。今私が探しているのは、2つの隠された入力を取得することですが、値は取得しません。私は入力そのものをつかみたい。隠し入力を文字列として取得する(PHPシンプルなHTML DOMパーサを使用)

例えばは:

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

そして、私はここからつかむしたい2つの隠し入力、ない値、文字列全体です:ここに私のフォームです。

これらを取得する方法がわかりません:PHP Simple HTML DOM Parser、誰かが偉大な方法を知っていれば、もしそうでない場合は、それも素晴らしいだろう。私がこれらをつかんだら、私は2つの入力値を隠れた文字列、そしてもちろんフォームアクションを持つ別のページに渡すことを計画しています。

また、誰かが興味があれば、単純なhtml dom機能を含む私のフルコードです。

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

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

私はSimpleDomを使用しません(私はいつも豚肉を使いDOMDocumentを使います)、->find('input[@type=hidden]')のようなことはできませんでしたか?

SimpleDOMでそのようなセレクタが許可されていない場合は、->find('input')の結果をループして、属性を自分で比較して非表示のものを選択するだけです。あなたがDomDocumentを使用する場合は、次の操作を行うことができ

+0

は(感謝)を使用して、完全な非表示の入力を手に入れた: //入力が foreachの($ HTML->は( '入力を見つけるhiddens取得[type = hidden] ')$ elementとして) echo $ element; ここでは、これらを個別に保存して別のページに渡すための最良の方法を知りたいだけです。これらを変数に格納する方法はありますか?各入力は隠されていますか? –

+0

'$ hidden = array( 'meta_required' => xxx、 'meta_forward_vars => yyy);'という配列に格納して、新しいフォームをビルドするときに隠れた入力を再構築するために使用します。あるいは、 'find()'の結果をどこかに保存して、新しい配列ではなくソースとして使用してください。 –

+0

ええと、私はこの情報を既にスタイルが設定されているフォームの別のページに渡したいと考えていますが、この情報を何らかのセッションに保存するのが最善でしょうか?私がどのようにセッション内で個々に要素を保存するかについては静かではない。 –

関連する問題