Определение значений записей в исходном коде HTML файла - PullRequest
1 голос
/ 03 мая 2011

Я пытаюсь создать что-то, что автоматически обнаруживает все значения POST в файле HTML через PHP.Например, когда вы посмотрите на источник веб-сайта с формой, вы увидите что-то вроде этого:

<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, который автоматически обнаруживает все эти POSTзначения, найденные в файле HTML, и сортировка их в массив.

Я думаю, я хотел бы использовать что-то вроде для начала:

<?

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


?>

Мне нужно найти все вхождения"name =" в переменной $file, а затем получить слова между кавычками.После этого сортируйте текст, найденный между кавычками, в массив.

Я хочу автоматически определять информацию POST, предоставляемую в HTML, и иметь скрипт PHP, который затем отправляет эти значения в эту форму.

Я понятия не имею, какую функцию я бы использовал для этого или как, поэтому я спрашиваю здесь.Пример кода очень ценится.Спасибо.

Ответы [ 3 ]

1 голос
/ 03 мая 2011

Вы можете загрузить 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.

0 голосов
/ 03 мая 2011

Не можете ли вы сделать

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

для всех ваших отмеченных мест?

Тогда вы можете перебрать документ для скрытых полей, которые имеют это значение? Я не уверен, что вы делаете, но вы уверены, что эти значения будут относиться к file_get_contents?

Также - убедитесь, что ваше действие настроено на текущую страницу

0 голосов
/ 03 мая 2011

Вы просто пытаетесь автоматизировать свои формы? Вы также можете сделать это:

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