Обнаружение значений post в исходном коде HTML в файле

#php #html #post #detect #file-get-contents

#php #HTML #Публикация #обнаружение #file-get-contents

Вопрос:

Я пытаюсь создать что-то, что автоматически определяет все значения 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-скрипт, который затем отправляет эти значения в эту форму.

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

Ответ №1:

Вы можете загрузить HTML-код в DOMDocument и использовать DOMXPath для запроса к нему, чтобы конкретно найти атрибуты name.

Например:

 $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->valuen";
}
  

Имейте в виду, что, как подразумевает комментатор, могут быть атрибуты name для элементов, отличных от входных данных, и могут быть входные данные в формах с методом, отличным от post. Соответствующим образом измените свой запрос XPath (например, ‘//input[@name]’ находит все входные данные с атрибутом name, затем используйте $node->getAttribute('name') вместо $node->value .

Комментарии:

1. Запрос XPath будет выглядеть примерно так //form[@method="post"]/*[@name]

2. Могу я привести пример, пожалуйста?

Ответ №2:

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

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

Комментарии:

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

Ответ №3:

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

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

для всех ваших прокомментированных местоположений?

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

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

Комментарии:

1. Когда он говорит «значения post», он имеет в виду «входные данные формы»