2015-07-16 11 views
5

ps है: के रूप में मैं कोई समाधान मिल गया और मेरे अपने php कैप्चा है कि एक इलाज :) काम कार्यान्वित मैं इस पर छोड़ दिया - http://www.the-art-of-web.com/php/captcha/गूगल reCAPTCHA जी recpatcha-प्रतिक्रिया PHP में कोई मूल्य नहीं

मैं बिताया है कई घंटे & दिन इस समस्या को हल करने का प्रयास कर रहे हैं, लेकिन मुझे लगता है कि यह समझ में नहीं आता है। मैंने कई अलग-अलग ट्यूटोरियल & ऑनलाइन प्रश्न पढ़े हैं।

बस ध्यान में रखने के लिए, मेरा PHP स्तर काफी मूल है।

मुझे मेरी PHP फ़ाइल में 'g-recaptcha-response' $ _POST मान नहीं मिल रहा है।

मैं महत्वपूर्ण कोड के नीचे की जरूरत संक्षेप है ...

फ़ाइल 1: contact.php

से पहले सिर टैग

<?php 
session_start(); // start php session 

// Setup session variables to save the form data 
if(isset($_SESSION['contact_form_values'])){ 
    extract($_SESSION['contact_form_values']); 
} 

include('contactengine.php'); 
?> 

में हेड टैग

<script src='https://www.google.com/recaptcha/api.js'></script><!-- reCAPTCHA form --> 

बीच फॉर्म टैग एक्शन = "" ताकि यह स्वयं को पोस्ट कर सके contactengine.php फ़ाइल में शामिल है ताकि यह केवल तब तक चलता है जब उपयोगकर्ता सबमिट बटन पर क्लिक करता है?

<form class="contactform" method="POST" action=""> 

<div class="g-recaptcha" data-sitekey="6Lc92gkTAAAAAFKjZEOlY0cg9G8ubmlVoC13Xf3T"></div> 

फ़ाइल 2: contactengine.php

बीच

इस

if($_SERVER["REQUEST_METHOD"] == "POST") 

मैं

if(isset($_POST['g-recaptcha-response'])){ 
     $captchaResponse = $_POST['g-recaptcha-response']; 
    } 

है अब इस बिंदु जहां चर $ captchaResponse आबादी वाले नहीं किया जा रहा है क्योंकि मैं इस तरह के मूल्य को आउटपुट करता हूं:

if(!$captchaResponse){ // check the POST recaptcha response value 
     $resultMsg = 'Please check the captcha form. - '.$captchaResponse; 
    } 

इसलिए मुझे $ resultMsg स्ट्रिंग में प्रतिक्रिया कोड का कोई दृश्य आउटपुट नहीं मिलता है।

केवल एक चीज जिसे मैं सोच सकता हूं इसे प्रभावित कर रहा है, contact.inep में शुरुआत में contactengine.php फ़ाइल भी शामिल है। और कार्रवाई के रूप में = "" है। लेकिन ट्यूटोरियल ने मुझे ऐसा करने के लिए निर्देशित किया। तो शायद नहीं ...

मैंने गाइड के रूप में http://www.9lessons.info/2014/12/google-new-recaptcha-using-php-are-you.html का उपयोग किया।

धन्यवाद बहुत उन्नत!

+0

संभावित उपयोगी लिंक: https://developers.google.com/recaptcha/docs/faq –

+0

अपने नेटवर्क ट्रैफ़िक को देखने के लिए अपने ब्राउज़र के देव उपकरण का उपयोग करें, देखें कि दृश्यों के पीछे क्या होता है। इसके अलावा unfiltered POST मानों को आउटपुट न करें (XSS हमलों से बचने के लिए) – m02ph3u5

+0

धन्यवाद @ m02ph3u5, मैंने इसे डिबगिंग उद्देश्यों के लिए बस सेट अप किया है।इसके अलावा मैंने क्रोम में देव उपकरण का उपयोग किया है और प्रतिक्रिया जेसन में वापस आ रही है लेकिन इसे 'यूव्रेस' कहा जाता है। मैंने इस नाम को 'जी-रिकैप्चा-प्रतिक्रिया' और किसी किस्मत की जगह में भी करने की कोशिश की। मैं – Samuroid

उत्तर

1

आप लगभग वहां हैं! आपको बस Google की API से पूछताछ करने की आवश्यकता है।

if (isset($_POST['g-recaptcha-response'])) { 
    $captcha = $_POST['g-recaptcha-response']; 
} 

if (!$captcha) { 
    // Captcha wasn't checked, do something... 
    exit; 
} 

$response = file_get_contents("https://www.google.com/recaptcha/api/siteverify?secret=SECRETKEYGOESHERE&response=".$captcha."&remoteip=".$_SERVER['REMOTE_ADDR']); 

if ($response.success == false) { 
    // Captcha failed! Do something! 
} else { 
    // Captcha is valid! Do something else! 
} 

SECRETKEYGOESHERE को अपनी वास्तविक गुप्त कुंजी के साथ बदलें, और आप सेट हैं!

+0

हाय, क्षमा करें मैंने इसे स्पष्ट नहीं किया है लेकिन मेरे पास पहले से ही यह हिस्सा स्थापित है। 'जी recaptcha-प्रतिक्रिया' $ _POST मूल्य वह fopen रैपर इस दृष्टिकोण के लिए सक्षम की जरूरत है, btw मुझे – Samuroid

+2

के लिए isset बयान पर गलत है - कई की मेजबानी समाधान उन्हें विकलांग – m02ph3u5

+1

'$ _POST [ 'जी recaptcha-प्रतिक्रिया' है ] यदि चेकबॉक्स चेक नहीं किया गया है तो खाली हो जाएगा। यदि यह चेक किया गया है, तो परिणामस्वरूप आपको एक लंबी स्ट्रिंग मिल जाएगी, जिसे उपरोक्त मेरे कोड में '$ प्रतिक्रिया' पर पूछताछ की जाएगी। जब आप कैप्चा पूरा करते हैं तो क्या यह खाली हो जाता है? – Qirel

संबंधित मुद्दे