Přidat otázku mezi oblíbenéZasílat nové odpovědi e-mailemVyřešeno Problém s php formulářem

Ahoj, potřeboval bych poradit s php a formulářem... Mám zadání:

Udělat web. aplikaci, kde uživatel zadá požadované údaje a na základě těchto údajů mu to na webu rwe vyhledá plánované odstávky (oficiální formulář rwe je zde: odstavky)

Problém je, že mi jejich aplikace nebere moje data (odesílaná postem pomocí curl....)

Schválně jsem si udělal v php jednoduchý script, který mi ukáže, která data formulář posílá:

foreach ($_POST as $k => $v) {
    if (is_array($v)) {
        foreach ($v as $value) {
            echo "prom.: " . $k . " hodnota= " . $value . "<br><br>";
        }
    } else {
        echo "prom.: " . $k . " hodnota= " . $v . "<br><br>";
    }

// proměnná $k obsahuje název proměnné (jméno z formuláře) 
// proměnná $v obsahuje hodnotu proměnné 
}

Když jsem pa k tyto data zatím napevno vložil do svého scriptu (zatím místo formuláře), tak mi rwe pořád vypisuje, že jsem něco blbě vyplnil...

Pozn.: rwe používá u formuláře skryté pole "token", kde je při každém načtení form. jiný 32 místný kod...Tak jsem to u sebe udělal tak, že před odesláním dat si pomocí file_get_html načtu rwe form a vemu si přidělený token...

Pozn. 2: form rwe má hodně skrytých polí...

Přikládám kod, kde je ukázka vkládání a odeslání dat pomocí curl (zatím napevno vložené hodnoty):

//ZISK TOKENU
$kod = file_get_html("www.rwe-distribuce.cz/cs/odstavky/");
$input = $kod->find('input');//pomocí php html parseru ([url=www.maxiorel.cz/php-simple-html-dom-parser-jak-jednoduse-zpracovat-html-v-php]www.maxiorel.cz[/url]) si vemu inputy a najdu token:
        foreach ($input as $value) {
            if (strpos($value, "token") > 0) {
                $token = substr($value, strpos($value, "value=\"") + strlen("value=\""));
                $token = substr($token, 0, strlen($token) - 3);
                break;
            }
        }
//CURL!!!!!!!!!
$ch = curl_init("www.rwe-distribuce.cz/cs/odstavky/"); //CILOVA URL
curl_setopt($ch, CURLOPT_HEADER, 0); //POKUD CHCI VRATIT INFO HLAVICKU
curl_setopt($ch, CURLOPT_POST, 1); //NASTAVIM ZE CHCI ODESLAT DATA
$var = "postback=0&init=n&token=" . $token . "&noinit=1&zadatelKrajId&zadatelObecId&typVstupu=1";
chk_mes = array();
        for ($i = 1; $i < 13; $i++) {
            if ($i == 5) {//zatím na pevno jako že vybírám 5. měsíc
                $chk_mes[$i] = 1;
            } else {
                $chk_mes[$i] = NULL;
            }
        }
$var .= "&chk_mes=" . $chk_mes;
$var .= "&zadatelKraj=Pardubický kraj&zadatelObec&datumOd&datumDo&btnPokracovat=Potvrdit";
curl_setopt($ch, CURLOPT_POSTFIELDS, $var);
curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1); //POKUD CHCI PRACOVAT S VYSLEDNOU STRANKU - NASTAVIM NA 1
$kod = curl_exec($ch);
curl_close($ch);
echo $kod;//vypis výsledku!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!

Moc prosím o pomoc, co dělám blbě...Patlám se s tím už od pátku a nic...Díky

Předmět Autor Datum
Hups, nikdo neví? Tak se zdá, že to asi bude tedy větší problém, než jsem si myslel...:.(
n.u.r.v. 28.05.2013 09:19
n.u.r.v.
Tak jsem pokročil...musí se odeslat ještě tři cookies... Ale problém je, že je nedokážu získat, něc…
n.u.r.v. 30.05.2013 15:53
n.u.r.v.
vyřešeno - u formuláře, který vyplňuje uživatel dám do skrytého iframe tu původní stránku a tak získ… poslední
n.u.r.v. 03.06.2013 22:09
n.u.r.v.

Tak jsem pokročil...musí se odeslat ještě tři cookies...

Ale problém je, že je nedokážu získat, něco dělám blbě...

Co funguje:

Otevřít si např. ve FF tu stránku a vzít a ručně si z ní (např. pomocí firebug-u) hodnoty cookies a tokenu. To pak když vložím natvrdo do php kodu (curl) a odešlu, tak to funguje.

Co nefunguje a já potřebuji aby fungovalo:
Před odesláním curl post si potřebuji načíst ty data, tak jsem vzal file_get_contents(url), hodnoty jsem získal z kodu (token) a cookies pomocí této funkce:

$cookies = array();
        foreach ($http_response_header as $hdr) {
            if (preg_match('/^Set-Cookie:\s*([^;]+)/', $hdr, $matches)) {
                parse_str($matches[1], $tmp);
                $cookies += $tmp;
            }
        }
        $coo = "";
        foreach ($cookies as $key => $value) {
            //if (strpos($key, "SESSIONID") == 0) {
                $coo.=";" . $key . "=" . $value;
            //}
        }

a proměnnou $coo jsem předal curl: (curl_setopt($ch, CURLOPT_COOKIE, $coo);)

Problém je, že to nefunguje...

Co s tím?

Toto je odkaz, kde beru cookies (ARRAffinity,JSESSIONID,RedDotLiveServerSessionID) a token: odstavky

Zpět do poradny Odpovědět na původní otázku Nahoru