#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», он имеет в виду «входные данные формы»