Альтернатива GetElementById

0

Я пытаюсь закодировать простой скрипт с curl, но проблема в том, что мне нужно собрать специальный ключ, который создается при каждом новом запросе POST (onLoad()). Проблему можно легко пропустить, создав новый элемент DOM и получив значение с помощью функции GetElementById из DOM, но в этом случае нет "id", объявленного в конкретном теге, с которого я хочу вернуть значение. Есть только имя.

Пример:

<input name="trans_id" value="Lk+Vz957skV845b7x2DX7iyR1FI=" type="hidden">

Bellow есть псевдокод, который я сделал сегодня (последний абзац там, где мне нужна помощь):

<?php
    // Author       :   me
    // Date         :   10.11.2013.
?>

<?php
    // Declaring variables :)
    $data_string = '';
    $url = 'http://www.website.com';
    $uagent = 'Mozilla/5.0 (Windows; U; Windows NT 5.1; en-US; rv:1.8.1.6) Gecko/20070725 Firefox/2.0.0.6';

    // Declaring variables for e-pay
    $url2 = 'http:/website2.com';

    ...

    $exChar = '|';
    $exStr = '';

    $exStr = Explode($exChar, $_POST['ccep']); 

    $data = array (
        "email" => '',
            ...
        "submitFromInputForm" => 'Next',
    );

    foreach($data as $key=>$value) { $data_string .= $key.'='.$value.'&'; }
    rtrim($data_string, '&');   

    $ch = curl_init ();


    curl_setopt ($ch, CURLOPT_COOKIEJAR, 'cookies.txt');
    curl_setopt ($ch, CURLOPT_COOKIEFILE, 'cookies.txt');
    curl_setopt ($ch, CURLOPT_URL, $url);
    curl_setopt ($ch, CURLOPT_SSL_VERIFYPEER, false);
    curl_setopt ($ch, CURLOPT_HEADER, 0);
    curl_setopt ($ch, CURLOPT_FOLLOWLOCATION, 1);
    curl_setopt ($ch, CURLOPT_RETURNTRANSFER, 1);
    curl_setopt ($ch, CURLOPT_USERAGENT, $uagent);
    curl_setopt ($ch, CURLOPT_POST, count($data));
    curl_setopt ($ch, CURLOPT_POSTFIELDS, $data_string);



    $result = curl_exec ($ch);
    print($result);

    // ====================================================================
    // Need help with this function
    $check = strpos($result, 'Confirmation');
        if ($check == True) {
            $doc = new DOMDocument();
            @$doc->loadHTML($result);
            $id = $doc->getElementsByName('trans_id');
            echo 'Value:' . $id;
        }
    // ====================================================================    

    curl_close($ch);
?>

Но, честно говоря, я не смог получить результат от этой функции, потому что, ну, это не exsist. Поиск в Google помогает мне получить результаты с помощью getElementsByTagName, которые после чтения документации из официального сайта PHP не решают мою проблему.

Заметка в конце: я не хочу включать Javascripting, только чистый PHP.

Заранее спасибо,
С уважением.

Теги:
curl
dom

1 ответ

1
Лучший ответ

Вы можете использовать DOMXPath для доступа к определенным свойствам по xpath.

$domx = new DOMXPath($doc);
$trans_id = $domx->evaluate("//input[contains(@name, 'trans_id')]");

В конце концов, проведите через объект, если необходимо

foreach ($trans_id as $id) {
    echo "Value:" . $id->nodeValue;
}

С getAttribute(), вам нужен атрибут value, поэтому вам нужно будет использовать getAttribute(), чтобы получить его. Я просто протестировал с помощью следующего кода, и он работает так, как ожидалось:

<?php
$result = '<input name="trans_id" value="Lk+Vz957skV845b7x2DX7iyR1FI=" type="hidden">';
$doc = new DOMDocument();
@$doc->loadHTML($result);
$domx = new DOMXPath($doc);
$trans_id = $domx->query('//input[@name="trans_id"]');
foreach ($trans_id as $id) {
    echo "Value: " .  $id->getAttribute('value');
}

печатает:

Value: Lk+Vz957skV845b7x2DX7iyR1FI=
  • 0
    Спасибо за помощь @Royal Bg. К сожалению, похоже, что ваш код не работает должным образом. Я попытался извлечь первое значение, по которому запускается функция ($ trans_id-> item (0) -> nodeValue;), но кажется, что оно также не работает. Не могли бы вы проверить выражение оценки, это может быть неправильно. Я также пытался использовать цикл foreach, но это не решило проблему.
  • 0
    @HalisDuraki Я отредактировал свой ответ, это должно работать как ожидалось :)
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню