На главную Наши проекты:
Журнал   ·   Discuz!ML   ·   Wiki   ·   DRKB   ·   Помощь проекту
ПРАВИЛА FAQ Помощь Участники Календарь Избранное RSS
msm.ru
! Соблюдайте общие правила форума
Пожалуйста, выделяйте текст программы тегом [сode=pas] ... [/сode]. Для этого используйте кнопку [code=pas] в форме ответа или комбобокс, если нужно вставить код на языке, отличном от Дельфи/Паскаля.
Указывайте точные версии Delphi и используемых сетевых библиотек.

Не приветствуется поднятие старых тем. Если ваш вопрос перекликается со старой темой, то для вопроса лучше создать новую тему, а старую указать в первом сообщении с описанием взаимосвязи.

Внимание:
попытки открытия обсуждений реализации вредоносного ПО, включая различные интерпретации спам-ботов, наказывается предупреждением на 30 дней.
Повторная попытка - 60 дней. Последующие попытки бан.
Мат в разделе - бан на три месяца...

Полезные ссылки:
user posted image MSDN Library user posted image FAQ раздела user posted image Поиск по разделу user posted image Как правильно задавать вопросы


Выразить свое отношение к модераторам раздела можно здесь: user posted image Krid, user posted image Rouse_

Модераторы: Krid, Rouse_
  
> Парсинг php страницы по средстам Delphi, получаю не все данные
    Проблема обстоит так.. Имеется файл index.php в нем есть форма с полями ввода при запонении полей отправляю данные методом GET в скрипт save.php где просто вывожу полученные данные вот код save.php

    ExpandedWrap disabled
      <?php
       
        if (isset($_GET['pole_uo'])) { $pole_uo = $_GET['pole_uo'];   if ($pole_uo == '') { unset($pole_uo);} }
        if (isset($_GET['pole_do'])) { $pole_do=$_GET['pole_do']; if ($pole_do =='') { } }
        if (isset($_GET['pole_uk'])) { $pole_uk = $_GET['pole_uk']; if ($pole_uk == '') { unset($pole_uk);} }
        if (isset($_GET['pole_dk'])) { $pole_dk=$_GET['pole_dk']; if ($pole_dk =='') { unset($pole_dk);} }
        if (isset($_GET['pole_nomer'])) { $pole_nomer = $_GET['pole_nomer']; if ($pole_nomer == '') { unset($pole_nomer);} }
        if (isset($_GET['pole_vremya'])) { $pole_vremya=$_GET['pole_vremya']; if ($pole_vremya =='') { unset($pole_vremya);} }
        
         $data = date("d.m.Y");
         $vremya = date("H:i:s");
       
       
       echo  "$pole_uo<br>";
       echo  "$pole_uk<br>";
       echo  "$pole_dk<br>";
       echo  "$Nomer<br>";
       echo  "$pole_vremya<br>";
       echo  "$vremya<br>";
       echo  "$data<br>";
        
      ?>


    когда просматриваю когд страницы все нормально отображается вот пример

    ExpandedWrap disabled
      ааа<br>333<br>ббб<br>3<br>123456<br>22<br>03:25:21<br>16.05.2013<br><META name="Content-Type" content="text/html; charset=utf-8">
      <META http-equiv="Content-Type" content="text/html; charset=utf-8">
      ...



    то есть переменные получены...
    но когда пытаюсь загрузить код страницы в Memo с помощью Delphi выводится вот что:

    <br><br><br><br><br>03:16:39<br>16.05.2013<br><META name="Content-Type" content="text/html; charset=utf-8">
    <META http-equiv="Content-Type" content="text/html; charset=utf-8">

    пустота между тегами <br> как будто там ничего нет
    непойму почему так.. на странице же они есть!!!

    Вот как получаю код страницы


    ExpandedWrap disabled
      procedure TForm1.Button1Click(Sender: TObject);
      var
        url : string;
        s : string;
      begin
        URL := 'http://birtaxi/save.php';
         s:=IdHTTP1.Get(URL);
         Memo1.Text:=(s);
         Memo1.Text := UTF8Decode(s);
       
      end;




    помогите!! Буду очень признателен
      формы нужно отправлять через POST

      GET - это параметры передающиеся через адресную строку, ну напиши
      ExpandedWrap disabled
        URL := 'http://birtaxi/save.php?pole_uo=bugaga';

      и получишь вывод этого параметра.

      а вообще register_globals лучше отключить у ПХП, в таком случае сразу бы вылетела ошибка что переменные типа $pole_uo не определены
      Сообщение отредактировано: antonn -
        Цитата antonn @
        формы нужно отправлять через POST

        Исправил... При этом код в Delphi теперь выглядит так:

        ExpandedWrap disabled
          procedure TForm1.Button1Click(Sender: TObject);
          var
            url : string;
            mStream : TMemoryStream;
            s : string;
          begin
            URL := 'http://birtaxi/save.php';
            mStream := TMemoryStream.Create;
            s:=IdHTTP1.POST(URL,mStream);
            Memo1.Text:=(s);
            Memo1.Text := UTF8Decode(s);
            mStream.Free;
          end;


        Но все равно результат тот же
          Dr.Eik
          нужно же перечислить все поля формы (ну со значениями) которые нужно отправить.

          плюс в коде скрипта нужно ожидать переменные в $_POST[]
            Цитата antonn @
            Dr.Eik
            нужно же перечислить все поля формы (ну со значениями) которые нужно отправить.

            плюс в коде скрипта нужно ожидать переменные в $_POST[]

            Вот index.php
            ExpandedWrap disabled
               <?
               
              echo '<form id="form_otpr" class="formular" action="save.php" method="POST">';
              echo 'Улица откуда: <input class="validate[required,length[0,100]] text-input" name="pole_uo" type="text" /><br>';
              echo 'Дом откуда: <input class="validate[required,custom[noSpecialCaracters] length[1,3]] text-input" name="pole_do" type="text" /><br>';
              echo 'Улица куда: <input class="validate[required,custom[onlyLetter],length[0,100]] text-input" name="pole_uk" type="text" /><br>';
              echo 'Дом куда: <input class="validate[required,custom[noSpecialCaracters] length[1,3]] text-input" name="pole_dk" type="text" /><br>';
              echo 'Номер: <input class="validate[required,custom[onlyNumber],length[0,11]] text-input" name="pole_nomer" type="text" /><br>';
              echo 'Время ожидания: <input class="validate[required,custom[onlyNumber] length[1,2]] text-input" name="pole_vremya" type="text" /><br>';
              echo "<input type='submit' value='Отправить'/>";
               
              echo '</form>'
              ?>



            Вот save.php
            ExpandedWrap disabled
              <?php
               
              mysql_set_charset("utf8");
                  if (isset($_POST['pole_uo'])) { $pole_uo = $_POST['pole_uo'];   if ($pole_uo == '') { unset($pole_uo);} }
                  if (isset($_POST['pole_do'])) { $pole_do=$_POST['pole_do']; if ($pole_do =='') { unset($pole_uo);} }
                      if (isset($_POST['pole_uk'])) { $pole_uk = $_POST['pole_uk']; if ($pole_uk == '') { unset($pole_uk);} }
                      if (isset($_POST['pole_dk'])) { $pole_dk=$_POST['pole_dk']; if ($pole_dk =='') { unset($pole_dk);} }
                      if (isset($_POST['pole_nomer'])) { $pole_nomer = $_POST['pole_nomer']; if ($pole_nomer == '') { unset($pole_nomer);} }
                  if (isset($_POST['pole_vremya'])) { $pole_vremya=$_POST['pole_vremya']; if ($pole_vremya =='') { unset($pole_vremya);} }
                
                 $data = date("d.m.Y");
                 $vremya = date("H:i:s");
               
               echo  "$pole_uo<br>";
               echo  "$pole_do<br>";
               echo  "$pole_uk<br>";
               echo  "$pole_dk<br>";
               echo  "$pole_nomer<br>";
               echo  "$pole_vremya<br>";
               echo  "$vremya<br>";
               echo  "$data<br>";
              ?>


            По сути все правильно... Но почему не работает не ясно
              что значит "не работает" и не работает где - при использовании браузера с заходом в index.php или при использовании дельфи отправляющей данные напрямую в save.php?

              в крайнем случае в скрипте можно делать print_r($_POST); и будет сразу видно что пришло вообще
                Цитата antonn @
                что значит "не работает" и не работает где - при использовании браузера с заходом в index.php или при использовании дельфи отправляющей данные напрямую в save.php?

                в крайнем случае в скрипте можно делать print_r($_POST); и будет сразу видно что пришло вообще

                Значения переменных выводятся в браузер, при просмотре кода страницы в браузере видны значения этих переменных... но когда пытаюсь получить код всей страницы в Memo получаю все кроме этих значений вот пример:

                <br><br><br><br><br><br>04:45:51<br>16.05.2013<br><META name="Content-Type" content="text/html; charset=utf-8">
                <META http-equiv="Content-Type" content="text/html; charset=utf-8">
                <br>Заказ успешно сформирован <a href='index.php' >Главная страница</a>

                а в браузере при просмотре кода страницы между тегами <br> значения которые мне нужны... вот пример:

                йй<br>2<br>цц<br>2<br>2132<br>12<br>04:29:45<br>16.05.2013<br><META name="Content-Type" content="text/html; charset=utf-8">
                <META http-equiv="Content-Type" content="text/html; charset=utf-8">
                <br>Заказ успешно сформирован <a href='index.php' >Главная страница</a>

                Почему Delphi то их не видит???

                Добавлено
                При использовании print_r($_POST); браузер(к стати у меня Opera.. если это имеет значение) выводит
                Array
                (
                [pole_uo] => йй
                [pole_do] => 2
                [pole_uk] => цц
                [pole_dk] => 2
                [pole_nomer] => 2132
                [pole_vremya] => 12
                )

                А Delphi в Memo отображает вот как:
                Array
                (
                )
                <br><br><br><br><br><br>04:58:48<br>16.05.2013<br>
                  Цитата
                  Почему Delphi то их не видит???

                  потому что дельфи не передает эти поля скрипту save.php.

                  скрипты index.php и save.php вообще никак не связаны, первый скрипт рисует формочку со всеми нужными полями которую браузер отправляют второму скрипту. В дельфи мы сразу обращаемся к второму скрипту, соответственно нужно же как-то и поля формы нам самим отправлять. А в твоем коде идет просто запрос POST без данных формы, в скрипт ничего не передается

                  Добавлено
                  вот хотя бы тут глянь пример: http://desksoft.ru/index.php?drkb=335&id=3...rch=indy%20post
                    Dr.Eik
                    Параметры не передаешь. Вот нули и получаешь.
                      Спасибо большое понял ошибку.. приду с работы все исправлю.. хорошо когда есть у кого спросить
                        И все равно я что то завис... передавать то параметры в скрипт это одно.. а получать их это другое... из index.php я передаю параметры в save.php а delphi эти переданные параметры должен вытащить... а как не пойму.(((
                          из index.php ничего не передается, этот скрипт просто рисует пустую форму. отправляет параметры уже браузер беря названия полей из рисуемой страницы index.php, делает он это аналогично программе на дельфи. а save.php возвращает страницу на которой рисует что он получил.
                          и что значит "получить их это другое"? что вообще нужно сделать? если хочется из браузера в программе на дельфи получать отправляемые браузером страницы и параметры то это так не делается
                            Впринципе не особо сложно..
                            Пример на одной строчке..
                            ExpandedWrap disabled
                              $usr = $_POST['User'];
                               
                              echo 'Test "' .$usr. '"';


                            В проге обращаемся к этому скрипту..
                            ExpandedWrap disabled
                                HTTP:= THTTPSend.Create;
                                Data:= TStringStream.Create('');
                                Data.WriteString('User=блабла' );
                                HTTP.Headers.Add( 'V: Update 1.0' );
                                HTTP.Document.LoadFromStream(Data);
                                HTTP.MimeType:= 'application/x-www-form-urlencoded';
                                HTTP.HTTPMethod('POST','http://...chek.php' );

                            Это правда синапс.. но сути то не меняет.. берёш ответ после Поста любым удобным способом.
                            т.е. как уже понятно..в ответе видим Test "блабла"..

                            Пробуй для начала на протом примере..а уж потом "заварачивай" как нужно..
                              Цитата faust777 @
                              если хочется из браузера в программе на дельфи получать отправляемые браузером страницы и параметры то это так не делается


                              как раз таки это и хочется)
                                И если можно жнлательно пример кода как это сделать... ну в частности "из браузера в программе на дельфи получать отправляемые браузером страницы и параметры" просто знаний в этой сфере нехватает.. заранее прощу прощения если спрашиваю какие то элементарные вещи..
                                  Цитата
                                  из браузера в программе на дельфи получать отправляемые браузером страницы и параметры

                                  Это вообще уже вроде как другое..
                                  Далай прокси и через него пропускай свой браузер.. и там в прокси смотри уже всё что нужно.
                                  Либо пиши какой нить снифер\проксификатор Свой.. но с этим те тут уж точно ни кто не поможет.
                                    а какая задача стоит вообще? потому как писать свой веб-сервер явно рано
                                      Ну в общих чертах цель такая... On-line заказ такси... клиент заходит на сайт оформляет заказ... далее оператор(который будет работать с приложением написанном на Delphi) принимает заказ с этого сайта и там уже производятся остальные махинации.. Запись в базу и т.д.
                                        А зачем оператору программа на дельфи? На сайте нет страниц для обработки заказа? это было бы проще

                                        Тут программа будет выполнять роль клиента, так же как и браузер. На сайте данные ведь уже хранятся, есть какая-то база? Нужно будет написать протокол обмена м/у сайтом и программой, "руками". При запросе из программы на сайт он должен сформировать ответ программе. При отправке заявки на сайт клиентом через браузер сайт должен будет где-то сохранить эти данные у себя. программа через самописный протокол их потом запросит.
                                        в общем случае проще сделать только сайт, который будет оперировать сохраненными в его базе данными
                                          Цитата antonn @
                                          А зачем оператору программа на дельфи? На сайте нет страниц для обработки заказа? это было бы проще

                                          Тут программа будет выполнять роль клиента, так же как и браузер. На сайте данные ведь уже хранятся, есть какая-то база? Нужно будет написать протокол обмена м/у сайтом и программой, "руками". При запросе из программы на сайт он должен сформировать ответ программе. При отправке заявки на сайт клиентом через браузер сайт должен будет где-то сохранить эти данные у себя. программа через самописный протокол их потом запросит.
                                          в общем случае проще сделать только сайт, который будет оперировать сохраненными в его базе данными

                                          Да думаю вы правы.. Проще сайт будет написать.. Всем спасибо тему можно закрывать.
                                          1 пользователей читают эту тему (1 гостей и 0 скрытых пользователей)
                                          0 пользователей:


                                          Рейтинг@Mail.ru
                                          [ Script execution time: 0.1094 ]   [ 15 queries used ]   [ Generated: 24.10.26, 03:56 GMT ]