2011-06-27 11 views
6

Vì vậy, tôi có một biểu mẫu có 4 đầu vào, 2 văn bản, 2 ẩn. Tôi đã nắm lấy hai giá trị nhập văn bản từ tên, đó là (get_me_two, get_me_three) và tôi cũng đã nắm lấy hành động biểu mẫu đó là (get_me.php). Những gì tôi đang tìm kiếm để làm bây giờ là lấy 2 đầu vào ẩn, nhưng không phải là giá trị. Tôi muốn lấy các đầu vào.Lấy đầu vào bị ẩn dưới dạng chuỗi (Sử dụng trình phân tích cú pháp DOM HTML đơn giản PHP)

ví dụ: Dưới đây là hình thức của tôi:

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

Và những gì tôi muốn lấy từ ở đây là hai đầu vào ẩn, Không phải là giá trị, hoàn thành chuỗi.

Tôi không chắc chắn làm thế nào để lấy chúng bằng cách sử dụng: PHP đơn giản HTML DOM Parser, nếu ai biết một cách mà sẽ là tuyệt vời, nếu không, nếu có một thay thế cũng sẽ là tuyệt vời. Một khi tôi đã nắm lấy những tôi có kế hoạch đi qua các giá trị đầu vào 2 đến một trang khác với các chuỗi ẩn, và tất nhiên các hành động hình thức.

Ngoài ra, nếu có ai quan tâm, đây là mã đầy đủ của tôi, bao gồm chức năng dom html đơn giản.

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

Vì vậy, kết quả cuối cùng sẽ lấy 3 giá trị và sau đó là 2 đầu vào bị ẩn (chuỗi đầy đủ). Giúp đỡ sẽ được nhiều đánh giá cao vì nó giúp tôi một chút điên cố gắng để có được điều này thực hiện.

Trả lời

0

Nếu bạn sử dụng DomDocument, bạn có thể làm như sau:

<?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() hy vọng chính xác 0 tham số nhận điều này là cảnh báo –

4

Tôi không sử dụng SimpleDom (Tôi luôn đi toàn bộ-hog và sử dụng DOMDocument), nhưng bạn không thể làm điều gì đó như ->find('input[@type=hidden]')?

Nếu SimpleDOM không cho phép loại công cụ chọn đó, bạn có thể chỉ cần lặp lại các kết quả ->find('input') và chọn các kết quả ẩn bằng cách so sánh các thuộc tính.

+0

Got đầu vào ẩn đầy đủ sử dụng (nhờ): // Lấy đầu vào hiddens foreach ($ HTML-> tìm ('đầu vào [type = hidden] ') dưới dạng phần tử $) echo $ element; Bây giờ, tôi chỉ tự hỏi cách tốt nhất để lưu trữ các tệp * riêng lẻ này là gì và chuyển chúng đến một trang khác. Có cách nào để lưu trữ chúng trong một biến, mỗi đầu vào ẩn ?. –

+0

Lưu trữ chúng trong một mảng: '$ hidden = array ('meta_required' => xxx, 'meta_forward_vars => yyy);' và sử dụng để xây dựng lại các đầu vào bị ẩn khi đến lúc xây dựng biểu mẫu mới. Hoặc chỉ cần lưu kết quả 'find()' ở đâu đó và sử dụng nó làm nguồn của bạn thay vì một mảng mới. –

+0

Hmm, trong khi xem xét tôi muốn chuyển thông tin này đến một trang khác cho biểu mẫu của tôi đã được tạo kiểu trước, cách tốt nhất để lưu trữ thông tin này trong một phiên có loại nào đó? Không yên tĩnh chắc chắn làm thế nào tôi muốn lưu trữ các yếu tố riêng trong một phiên. –