Форум программистов, компьютерный форум, киберфорум
PHP для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.80/5: Рейтинг темы: голосов - 5, средняя оценка - 4.80
-45 / 55 / 32
Регистрация: 13.04.2018
Сообщений: 521
1

DOMDocument

27.10.2018, 23:22. Показов 947. Ответов 4
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Добрый вечер.Парсю сайт,а именно форму,чтобы отправлять сообщение,сайтов в бд много,а именно мне нужна форма обратной связи, поэтому я сначала произвожу поиск на наличие правильного пути,вот таким образом
PHP
1
2
3
$doc = new DOMDocument();
for ($i = 0; $i < count(config::PATH); $i++) { 
$handle = file_get_contents('http://'.$array[0]['url'].'/'.config::PATH[$i]);
Затем,я беру action формы,и проверяю через регулярку,нет ли там 404
PHP
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
$doc = new DOMDocument();
for ($i = 0; $i < count(config::PATH); $i++) { 
$handle = file_get_contents('http://'.$array[0]['url'].'/'.config::PATH[$i]);
$res = @$doc->loadHTML($handle);
    if($res) {
        $searchNodes = $doc->getElementsByTagName("form");
        foreach ($searchNodes as $vl) {
            if($vl->hasAttribute('action')) {
                $action = $vl->getAttribute('action');
                if(preg_match('/404/i', $action)) {}
                else {
                    $inputs = $vl->getElementsByTagName('input');
                        foreach ($inputs as $input) {
                        $inputName = $input->getAttribute('name');
                        $inputValue = $input->getAttribute('value');
                        echo $inputName."<br />";
                        
                    }
                }
            }
        }
    }
}
Потом ,мне нужно взять только поля тех форм,которые прошли проверку через регулярку,но у меня почему-то выводятся поля всех форм,даже те,которые не прошли регулярку
это делается вот тут
PHP
1
2
3
4
5
6
7
8
9
else {
                    $inputs = $vl->getElementsByTagName('input');
                        foreach ($inputs as $input) {
                        $inputName = $input->getAttribute('name');
                        $inputValue = $input->getAttribute('value');
                        echo $inputName."<br />";
                        
                    }
                }
я понимаю почему так происходит,из за того,что мы обращаемся к переменно $vl,изначально которую мы получили,подскажите пожалуйста,как вывести поля тех форм,которые прошли проверку.Может быть через Xpath.Спасибо
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
27.10.2018, 23:22
Ответы с готовыми решениями:

Не работает DOMDocument
$dom = new DOMDocument; $dom-&gt;loadHTML($found); $div =...

DOMDocument::getElementsByTagName('a') пропускает элементы
Добрый день $DOM = new DOMDocument(); $DOM -&gt; loadHTML($page); $body = $DOM -&gt;...

DOMDocument не находит элементы внутри javascript
Ищу типа все элементы вида input $doc = new DOMDocument(); @$doc-&gt;loadHTML ( $result );...

Получить значение tipo из xml файла посредством domDocument
Добрый день, уважаемые пользователи ! Подскажите пожалуйста как достать значение tipo из xml файла...

4
Заблокирован
28.10.2018, 02:30 2
Вывод один - регулярка не работает.
Да и зачем вообще регуляркой делать такую простейшую проверку?)

Давай ты сделаешь вот так:
PHP
1
2
$action = $vl->getAttribute('action'); // сюда добавишь:
echo $action . "<br/>";
И покажешь мне весь список. Чтобы были и 404, и нормальные. А я скажу как это правильно проверять.
0
-45 / 55 / 32
Регистрация: 13.04.2018
Сообщений: 521
28.10.2018, 18:51  [ТС] 3
Хорошо

Добавлено через 8 часов 29 минут
Цитата Сообщение от Смолевич Посмотреть сообщение
И покажешь мне весь список. Чтобы были и 404, и нормальные. А я скажу как это правильно проверять.
Вот весь список
Код
http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/kontakty.html
http://union-potolki.ru/kontakty.html
http://union-potolki.ru/kontakty.html?chronoform=sdelay_zakaz_seychas&event=submit



http://union-potolki.ru/kontakty.html
http://union-potolki.ru/kontakty.html
http://union-potolki.ru/kontakty.html?chronoform=sdelay_zakaz_seychas&event=submit



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html



http://union-potolki.ru/404-error.html
http://union-potolki.ru/404-error.html
0
Заблокирован
28.10.2018, 19:04 4
SolomonRei,
PHP
1
2
3
4
if (strpos($action, "/404") !== false) {
} else {
  // не 404
}
Делай так.

И еще момент - у тебя в коде очень большая вложенность из-за всяких else. Тяжело читать. Используй continue. И отступы (табы) не забывай. Я и в блокноте обычном их всегда пишу.
1
-45 / 55 / 32
Регистрация: 13.04.2018
Сообщений: 521
28.10.2018, 19:18  [ТС] 5
Понятно,спасибо,еще одна проблема,у меня почему-то по два раза выводятся одни и те жи формы,это из-за влрженного цикла,как это исправить?Подскажите на моем примере
0
28.10.2018, 19:18
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
28.10.2018, 19:18
Помогаю со студенческими работами здесь

Warning: DOMDocument::save(index.xml): failed to open stream: Permission denied
Все добрый день! Возможно кто-либо сталкивался с такой проблемой. Решил изучить работу с XML...

DOMDocument. Добавить родительский тег.
Привет! Не знаю, как точно сформулировать задачу, покажу на примере. Допустим есть xml документ,...

Начинка DomDocument и алгоритмы парсинга файлов
Здравствуйте, есть класс http://php.net/manual/ru/class.domdocument.php 1) Где можно почитать,...

Перестали работать функции domDocument() и simplexml() в PHP 5
Всех приветствую. Мой вопрос скорее не по написанию кода, а по работе цепочки PHP/Denver/Browser....


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru