2011-06-27 13 views
6

Mam więc formularz, który ma 4 wejścia, 2 teksty, 2 ukryte. Pobrałem dwie wartości wejściowe tekstu z nazwy, które są (get_me_two, get_me_three), a także pobrałem akcję formularza, która jest (get_me.php). Teraz chciałbym pobrać 2 ukryte dane wejściowe, ale nie wartości. Chcę pobrać dane wejściowe.Chwytanie ukrytych danych wejściowych w postaci ciągu znaków (przy użyciu PHP Simple HTML DOM Parser)

np: Oto moja postać:

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

I co chcę złapać stąd ma dwa wejścia, ukryte wartości nie, kompletny ciąg.

Nie jestem pewien, jak złapać te za pomocą: PHP Prosty HTML DOM Parser, jeśli ktoś zna sposób, który byłby świetny, jeśli nie, czy istnieje alternatywa, która również byłaby świetna. Kiedy już to zrobię, planuję przekazanie dwóch wartości wejściowych na inną stronę z ukrytymi ciągami i oczywiście akcję formularza.

Ponadto, jeśli ktokolwiek jest zainteresowany, to mój pełny kod, który zawiera prostą funkcję domena html.

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

Tak więc, wynik końcowy pobierałby 3 wartości, a następnie 2 ukryte dane wejściowe (pełne ciągi). Pomoc byłaby bardzo ceniona, ponieważ doprowadza mnie to do szaleństwa, próbując to zrobić.

Odpowiedz

0

Jeśli używasz DomDocument, można wykonać następujące czynności:

<?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() oczekuje dokładnie 0 parametrów wykonanie tego jako ostrzeżenie –

4

Nie używam SimpleDom (zawsze chodzę na całość i używam DOMDocument), ale czy nie mogłeś zrobić czegoś takiego jak ->find('input[@type=hidden]')?

Jeśli SimpleDOM nie zezwala na ten rodzaj selektora, można po prostu zapętlić wyniki ->find('input') i wybrać ukryte, porównując atrybuty samodzielnie.

+0

Masz pełne ukrytych wejść korzystania (dzięki): // Pobierz wejście hiddens foreach ($ formacie HTML> find ('wejście [type = hidden] ") jako element $) echo $ element; Teraz właśnie się zastanawiam, jaki jest najlepszy sposób przechowywania tych * pojedynczych * i przekazania ich na inną stronę. Czy istnieje sposób na zapisanie ich w zmiennej, każde wejście ukryte ?. –

+0

Przechowuj je w tablicy: '$ hidden = array ('meta_required' => xxx, 'meta_forward_vars => yyy);' i użyj tego, aby odbudować ukryte dane wejściowe, gdy przychodzi czas na zbudowanie nowego formularza. Lub po prostu zapisz wyniki 'find()' gdzieś i użyj tego jako źródła zamiast nowej tablicy. –

+0

Hmm, biorąc pod uwagę, że chcę przekazać tę informację do innej strony w moim formularzu, który jest już wstępnie napisany, czy najlepiej jest przechowywać te informacje w jakiejś sesji? Nie jestem pewien, jak zapisałbym poszczególne elementy w sesji. –

Powiązane problemy