Autor Zpráva
gully
Profil
Zdravím,

z nějakýho důvodu (určitě to bude blbost) nedokážu už 2 hodiny rozjet recaptcha na stránce kkbabice.cz/kontakty.php. Můžete mi prosím někdo poradit, co dělám špatně?



   $captcha = $_POST['g-recaptcha-response'];
    $private_recaptcha_key = '6LeAUhHkbpX1AAAAALuTdOtmcLD6aHmzLGYp2Il62aJzE'; //kkbabice.cz
    $ip = $_SERVER['REMOTE_ADDR'];

    $response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=".$private_recaptcha_key."&response=".$captcha."&remoteip=".$ip);
    $response = json_decode($response,true);
    if($response["success"] === false) {
        die ('Je potřeba vyplnit antispamovou ochranu.');
    }

EDIT: hodnota $response:
{
  "success": false,
  "error-codes": [
    "missing-input-response"
  ]
}

EDIT
Hodnota ze serveru se vrací dobře, ale v mém skriptu se špatně vyhodnotí. Nechápu, proč ...

$str = "https://www.google.com/recaptcha/api/siteverify?secret=".$private_recaptcha_key."&response=".$captcha."&remoteip=".$ip;
$response = json_decode(file_get_contents($str),true);

if ($response->success == false) {
    die ('False: '.$str);
} else {
    die ('True: '.$str);
}
Keeehi
Profil
gully:
Je to proto, že json_decode s druhým parametrem nastaveným na true vytvoří z odpovědi asociativní pole ale ty k tomu v podmínce na 4. řádku přistupuješ jako k objektu. Což vyhodí error (úrovně Notice) a vrátí to NULL a NULL == false se v PHP vyhodnotí jako true.
gully
Profil
A můžu se zeptat, jak by to mělo být správně napsané?

Změnil jsem na
$response = json_decode(file_get_contents($str), false);

ale výsledek je pořád stejný

EDIT:
Zkusil jsem taky:
$str = "https://www.google.com/recaptcha/api/siteverify?secret=".$private_recaptcha_key."&response=".$captcha."&remoteip=".$ip;
    $responseData = json_decode(file_get_contents($str));

    if (!$responseData->success) {
        die ('False: '.$str);
    } else {
        die ('True: '.$str);
    }

Ale se stejným výsledkem ...
RastyAmateur
Profil
[#2] Keeehi:
json_decode s druhým parametrem nastaveným na true vytvoří z odpovědi asociativní pole ale ty k tomu v podmínce na 4. řádku přistupuješ jako k objektu
$response = json_decode(file_get_contents($str),true);
if ($response["success"] == false) {
  // ...
}

EDIT: I když pak tedy nechápu, proč ti to zprvu nešlo. Tam to vypadá, že je to dobře
gully
Profil
Už to funguje. Problém byl v nastaveni serveru. Neměl jsem povolený fopen wrapper. Všem zúčastněným ale děkuju za váš čas a ochotu pomoct a přeji hezký den.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: