7

つまり、4つの入力、2つのテキスト、2つの非表示を持つフォームがあります。名前から2つのテキスト入力値(get_me_two、get_me_three)を取得し、フォームアクション(get_me.php)も取得しました。私が今やろうとしているのは、2つの隠された入力を取得することですが、値は取得しません。入力自体を取得したいと思います。

EG:これが私のフォームです:

<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パーサーを使用してこれらを取得する方法がわかりません。誰かが素晴らしい方法を知っている場合、そうでない場合でも、別の方法があれば素晴らしいでしょう。これらを取得したら、2つの入力値を、非表示の文字列を含む別のページに渡すことを計画しています。もちろん、フォームアクションも同様です。

また、誰かが興味を持っているなら、ここに私の完全なコードがあります。これには、単純なhtmldom機能が含まれています。

<?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つの非表示の入力(完全な文字列)を取得します。これを成し遂げようとして私を少し狂わせているので、助けていただければ幸いです。

4

2 に答える 2

4

私はSimpleDomを使用していません(私はいつも完全に独り占めしてDOMDocumentを使用しています)が、あなたは次のようなことをすることができませんでした->find('input[@type=hidden]')か?

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

于 2011-06-27T17:00:03.243 に答える
2

を使用する場合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);

?>
于 2011-06-27T17:12:54.370 に答える