检测HTML源代码中的post值是否为文件

时间:2011-05-03 03:43:50

标签: php html post detect file-get-contents

我正在尝试通过PHP自动检测HTML文件中的所有POST值。例如,当您查看包含表单的网站的来源时,您会看到如下内容:

<form id="someForm" action="register.php" method="post">

    Name:
    <input type="text" name="username"><br> <!-- a post value "username" -->
    Email:
    <input type="text" name="email"><br> <!-- a post value "email" -->
    Password:
    <input type="password" name="password"><br> <!-- a post value "password" -->

    <input type="submit" value="Submit"> <!-- submit button -->

</form>

所以我想写一个PHP脚本,它自动检测HTML文件中找到的所有POST值,并将它们分类到一个数组中。

我想我会用一些类似的东西开始:

<?

  $file = file_get_contents("http://example.example/register.html");


?>

我需要在$file变量中搜索所有出现的“name =”,然后获取引号之间的单词。之后,将引号之间找到的文本排序为数组。

我想自动检测HTML中提供的POST信息,并有一个PHP脚本,然后将这些值发布到该表单。

我不知道我将使用哪种功能或如何使用,所以我在这里问。示例代码非常受欢迎。感谢。

3 个答案:

答案 0 :(得分:1)

您可以将HTML加载到DOMDocument并使用DOMXPath查询它以专门查找名称属性。

例如:

$file = file_get_contents('url');

$dom = new DOMDocument;
$dom->loadHTML($file);

$xpath = new DOMXPath($dom);
$nodes = $xpath->query('//@name'); //Find /all/ name attributes everywhere.
foreach ($nodes as $node) {
   echo "$node->value\n";
}

请记住,正如评论者所暗示的那样,除了输入之外,元素上可以有名称属性,并且表格中的输入可以使用除post之外的方法。相应地修改您的XPath查询('// input [@name]'查找具有name属性的所有输入,然后使用$node->getAttribute('name')而不是$node->value

答案 1 :(得分:0)

您是否只想尝试自动化表单?你也可以这样做:

foreach($_POST as $key => $value)
{
    echo $key . ": " . $value . "<br />";
}

答案 2 :(得分:0)

你能做到吗

<input type="hidden" name="username_post" value="<?php if (isset($_POST['username'])) { echo $_POST['username']; } ?>" />

所有评论的位置?

然后你可以在文档中循环显示具有此值的隐藏字段吗?我不确定你在做什么,但你确定这些值会通过file_get_contents来实现吗?

另外 - 确保您的操作设置为当前页面