Нужна помощь с cURL

Тема в разделе "PHP", создана пользователем monz, 18 янв 2010.

Статус темы:
Закрыта.
Модераторы: latteo
  1. monz

    monz Создатель

    Регистр.:
    24 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Начал изучать cURL и столкнулся с такой проблемой.
    Здесь код обрезан, также оставил только, то что нужно для наглядности. Есть две фунции:
    Первая парсит параметр А.
    Вторая отправляет пост запрос с параметром А и Б.
    Параметры А и Б меняются при каждой загрузке страницы.
    (Также параметр Б вводиться вручную. После чего он отправляется вместе со спарсеным параметром А).
    PHP:
    function register1()
    {
    $ch curl_init(); // Инициализируем сессию
    curl_setopt($chCURLOPT_URL,"http://test.com"); // задаем адрес формы
    curl_setopt($chCURLOPT_RETURNTRANSFER1); // Результат нам нужно вернуть в переменную, а не на экран
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); // Переходить по редиректам
    // Выполняем запрос
    $result curl_exec($ch);
    echo 
    $result;
    preg_match('#<INPUT type="hidden" name="a_" id="a_" value="([0-9]{1,})#i',$result$a);
    echo 
    "Получаем первый раз: $a[1]";

    $result curl_exec($ch);
    curl_close ($ch); // Закрываем сессию
    return $a// Возвращаем добытый ключ
    }
    function 
    register2($a$b)
    {
    $post="http://test.com/register/?a=register&a_=".$a."&applyinvid=&b_=".$b.";
    $url = "http://test.com/";
    $ch curl_init(); // Инициализируем сессию
    curl_setopt($chCURLOPT_URL,$url); // задаем адрес обработчика формы
    curl_setopt($chCURLOPT_POST1); // Указываем, что нам нужно отправить POST-запрос
    curl_setopt($chCURLOPT_POSTFIELDS$post); // Передаем POST-параметры
    curl_setopt($chCURLOPT_RETURNTRANSFER1); // Результат нам нужно вернуть в переменную, а не на экран
    curl_setopt($chCURLOPT_FOLLOWLOCATION1); // Переходить по редиректам
    $result curl_exec($ch);

    preg_match('#<INPUT type="hidden" name="a_" id="a_" value="([0-9]{1,})#i',$result$a);
    echo 
    "Получаем второй раз: $a[1]";

    curl_close ($ch); // Закрываем сессию
    return true;
    }
    if(!empty(
    $_GET['b']))
    {
    //Как только получили с рег1 параметр "а" и ввели "b" запускаем рег2, где снова инициализируется сессия, в которой эти два параметра уже поменялись. !Соответственно отправляется пост запрос с данными из прошлой загрузки страницы.
    register2($_GET['a'], $_GET['b']));
    }
    else
    {
    // Если параметр "b" не введен, инициалицизуем рег1, достаем оттуда "а" и вводим "b"
    $a register1();
    $form 'Введите параметр "b"
        <form method="get">
        <input type="hidden" name="a" value="'
    .$a.'">
        <input type="text" name="b">
        <input name="submit" type="submit" class="btn" value="зарегистрироваться"></form>'
    ;
        echo 
    $form;
    }
    Как видим суть проблемы в том, что мы спарсили со страницы парметры А и Б, после чего $_GET['b'] стало не пустым и выполянеться фунция register2(), в которой заново проходит инициализация страницы и парметры А и Б меняют свои значения. но на вход мы получили старые значения и соответственно пост запрос не проходит.
    Помогите плиз как можно исправить проблему
     
  2. Abliganto

    Abliganto Постоялец

    Регистр.:
    30 ноя 2009
    Сообщения:
    111
    Симпатии:
    46
    Ты сам хоть понял что объяснил? И зачем было обрезать код на preg_match?

    Может ты хотел
    PHP:
    if(empty($_GET['b'])) 
     
  3. monz

    monz Создатель

    Регистр.:
    24 авг 2009
    Сообщения:
    37
    Симпатии:
    0
    Нет, здесь нужно именно !empty, тоесть если переменная НЕ пустая - также мы ввели данные с формы и выполняется функция, иначе рисуется форма и ожидается ввод.
     
  4. Mongolor

    Mongolor

    Регистр.:
    5 дек 2007
    Сообщения:
    157
    Симпатии:
    29
    PHP:
    Ну а в чем проблемаделаешь либо 
    if(isset($_GET['value']) {
    //твоя функция на которую поступил get запрос
    }
    //А тут поле формы.
    Когда отправляешь форму переменная начинает существовать и выполняется скрипт.
     
Статус темы:
Закрыта.