所以我有一个有4个输入,2个文本,2个隐藏的表单。我从名称中抓取了两个文本输入值,它们是(get_me_two,get_me_three),我还抓住了表单操作(get_me.php)。我现在要做的是抓住2个隐藏的输入,但不是值。我想自己抓住输入。
E.G:这是我的表格:
<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>
我想从这里抓取的是两个隐藏的输入,不是值,完整的字符串。
我不确定如何使用这些: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 :(得分:4)
我不使用SimpleDom(我总是全力以赴并使用DOMDocument),但你不能做->find('input[@type=hidden]')
之类的事情吗?
如果SimpleDOM不允许那种选择器,你可以简单地遍历->find('input')
结果并通过自己比较属性来挑选隐藏的结果。
答案 1 :(得分:1)
如果您使用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);
?>