Stránka 1 z 1

Problém s php formulářem

Napsal: pon 27. kvě 2013, 20:21
od Václav Sedlář
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: http://www.rwe-distribuce.cz/cs/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á:

Kód: Vybrat vše

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 pak 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):

Kód: Vybrat vše

//ZISK TOKENU
$kod = file_get_html("http://www.rwe-distribuce.cz/cs/odstavky/");
$input = $kod->find('input');//pomocí php html parseru ([url]http://www.maxiorel.cz/php-simple-html-dom-parser-jak-jednoduse-zpracovat-html-v-php[/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("http://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

Re: Problém s php formulářem

Napsal: úte 4. čer 2013, 12:13
od arxeiss
To je přesně to co jsem ti psal v minulém příspěvku.

V momentě kdy se tam dává token, tak to nikdy nemusíš vyřešit... Token může být závislý na IP adrese, může ukládat další data do COOKIES atd atd...

Navíc tam můžou mít nějaký JS script, který těsně před odesláním ti jiné pole nějak vyplní, a ty na to nemusíš přijít...

Za mě se na to vykašli, ty to tu budeš řešit třeba 14 dní, a za měsíc ten form změní a můžeš jet od znova, jak dopadl můj kámoš jednou...

Re: Problém s php formulářem

Napsal: úte 4. čer 2013, 13:04
od Václav Sedlář
Už to mám vyřešené....Zjistil jsem totiž, že využívají i cookies, na které to je závislé, takže samotný token je k ničemu...

Takže jsem to vyřešil takto:

1)uživatel se v prohlížeči dostane na mojí stránku s formulářem a na pozadí se ve skrytém iframe otevře ta stránka - tím si prohlížeč natáhne cookies a já získám token pomocí php

2)uživatel odešle form, já vložím token do curl post dat a odešlu...

Takto to funguje...

Re: Problém s php formulářem

Napsal: úte 4. čer 2013, 13:42
od arxeiss
Což se divím, protože to COOKIE se ti natáhne do tvého prohlížeče, což ale nemá nic společného s tím CURL
Nebo ty ten form poté neodesíláš přes CURL ale už normálně přímo na jejich web? Tj dojde k přesměrování uživatele?

A vykašlal bych se na iframe, ale pomocí toho CURL kdy stahuješ ty data, prošel headers které ti posílá a tam ty cookies jsou,

Re: Problém s php formulářem

Napsal: úte 4. čer 2013, 14:02
od Václav Sedlář
Přes curl odesílám postem ty data a pak se mi vrátí výsledek a ten zpracuju...

Ale nevím jak získat pomocí curl před odesláním ty cookies (které se mění)...

Curlem samozřejmě cookies odesílám (CURLOPT_COOKIE), to jsem asi zapomněl říct...

Pozn: trochu jsem se splet - iframe už nepoužívám (to byla stará verze)...teď používám php, který když zobrazí můj form, tak si i na pozadí načte tu stránku a získá hodnoty cookies...