2017-01-02 3 views
-1

누군가이 코드에 recaptcha를 추가 할 수 있습니까?recaptcha를 구현해야합니다

여기에 내 PHP 레지스터입니다.

//if form has been submitted process it 
if(isset($_POST['submit'])){ 

//very basic validation 
if($_POST['username'] == ''){ 
    $error[] = 'Username is required.'; 
}else if(strlen($_POST['username']) < 6){ 
    $error[] = 'Username is too short. (6 Chars)'; 
}else if(strlen($_POST['username']) > 32){ 
    $error[] = 'Username is too long. (32 Chars)'; 
}else if(preg_match('/[^a-z0-9_]/', $_POST['username'])){ 
    $error[] = 'Only a-z, 0-1 and _ are allowed in username.'; 
} else { 
    $stmt = $db->prepare('SELECT username FROM members WHERE username = :username'); 
    $stmt->execute(array(':username' => $_POST['username'])); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    if(!empty($row['username'])){ 
     $error[] = 'Username provided is already in use.'; 
    } 

} 

//email validation 
if($_POST['email'] == ''){ 
    $error[] = 'Email Address is required.'; 
}else if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){ 
    $error[] = 'Please enter a valid Email Address'; 
} else { 
    $stmt = $db->prepare('SELECT email FROM members WHERE email = :email'); 
    $stmt->execute(array(':email' => $_POST['email'])); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    if(!empty($row['email'])){ 
     $error[] = 'Email Address provided is already in use.'; 
    } 

} 

if($_POST['mobile'] == ''){ 
    $error[] = 'Mobile Number is required.'; 
}else if(!is_numeric($_POST['mobile'])){ 
    $error[] = 'Mobile Number should be numeric.'; 
}else if(strlen($_POST['mobile']) < 10){ 
    $error[] = 'Mobile Number is too short.'; 
} 
else if(strlen($_POST['mobile']) > 10){ 
    $error[] = 'Mobile Number is too long.'; 
} else { 
    $stmt = $db->prepare('SELECT mobile FROM members WHERE mobile = :mobile'); 
    $stmt->execute(array(':mobile' => $_POST['mobile'])); 
    $row = $stmt->fetch(PDO::FETCH_ASSOC); 

    if(!empty($row['mobile'])){ 
     $error[] = 'Mobile Number is already in use.'; 
    } 
} 

if($_POST['password'] == ''){ 
    $error[] = 'Password is required.'; 
}else if(strlen($_POST['password']) < 6){ 
    $error[] = 'Password is too short. (6 Chars)'; 
}else if(strlen($_POST['passwordConfirm']) < 6){ 
    $error[] = 'Confirm password was too short. (6 Chars)'; 
}else if($_POST['password'] != $_POST['passwordConfirm']){ 
    $error[] = 'Passwords do not match.'; 
} 

//if no errors have been created carry on 
if(!isset($error)){ 

    //hash the password 
    $hashedpassword = $user->password_hash($_POST['password'], PASSWORD_BCRYPT); 

    //create the activasion code 
    $activation = md5(uniqid(rand(),true)); 


    $usrname = str_replace(' ', '', $_POST['username']); 
    $usrname = preg_replace('/\s+/','',$_POST['username']); 
    try { 

     //insert into database with a prepared statement 
     $stmt = $db->prepare('INSERT INTO members (username,password,email,mobile,active) VALUES (:username, :password, :email, :mobile, :active)'); 
     $stmt->execute(array(
      ':username' => strtolower($usrname), 
      ':password' => $hashedpassword, 
      ':email' => $_POST['email'], 
      ':mobile' => $_POST['mobile'], 
      ':active' => $activation 
     )); 

     header('Location: register.php?action=joined'); 
     exit; 

    //else catch the exception and show the error. 
    } catch(PDOException $e) { 
     $error[] = $e->getMessage(); 
    } 

} 

} 
+0

recaptcha 통합에 관한 다양한 온라인 자습서가 있습니다. 봤어? [tutsplus 링크] (http://smal.me.pn/QLCJ) – Thamilan

+0

시도했지만 메신저를 심을 수 없습니다. 나는 여전히 PHP에 새로운, 내 웹 사이트는 다른 사람들에 의해 개발되었습니다. 누군가 도움이된다고 고맙게 생각합니다. 스패머를 차단하기 위해 이것을 추가합니다. –

+0

@Thamilan이 링크 한 튜토리얼은 최초의 Google 결과이지만 실제로는 쓸모없고 오래되었습니다. 적어도 두 가지 의견이 유용합니다. 여기 [GitHub] (https://github.com/google/recaptcha/tree/d3274db7c061770472b8eff8a7dbae0871f6cf03)에서 더 나은 설명을 찾을 수 있습니다. 나는 완전한 작동 코드로 당신에게 대답하고 싶습니다. 그러나 나는 그것에 대해서도 연구 중입니다. – Brigo

답변

0

여기 ReCaptcha 2.0을 통합하는 설명입니다. 난 그냥 내 웹 사이트에서 그것을 테스트하고 그것을 작동합니다.

  1. 는 요청 here 당신이 당신의 HTML과 PHP 코드 GitHub reCAPTCHA PHP-
  2. 이동에 통합하고 ZIP 파일을 다운로드 (또는 설치 지침을 따라야합니다 (공공 및 민간) 키는 내가 그것을 다운로드 및

HTML) 내 서버에 업로드 구글 reCAPTCHA를 API를

에게 전화하여 <head> 태그

삽입이

<script src="https://www.google.com/recaptcha/api.js" async defer></script> 

그리고이 양식은

<form action="..." method="POST"> 
    _list of your inputs_ 

    <div class="g-recaptcha" data-sitekey="your_site_key(the_public_one)"></div> 
    <input type="submit" value="Submit"> 
</form> 

는 PHP

당신이

<?php require('path_where_you_uploaded_the_folder/recaptcha/src/autoload.php'); ?> 

을 다운로드 한 ZIP에서 찾을 파일 autoload.php 그리고 간단한 코드를 포함 나타납니다 어떻게 수표를 수행하는 것입니다 :

<?php 
$siteKey = 'your_public_key'; //ex. 6OfGWERRRRt17YkojJGk2mEeM8fgEPKSpiPe 
$secret = 'your_private_key'; 
$recaptcha = new \ReCaptcha\ReCaptcha($secret); 
$resp = $recaptcha->verify($_POST['g-recaptcha-response'], $_SERVER['REMOTE_ADDR']); //the values for: $gRecaptchaResponse, $remoteIp 
if ($resp->isSuccess()) { 
    echo 'GREAT!'; //insert here the code you'll want to process if the verification is ok or the value you want to return (if this code is inserted in a function) 
} else { 
    $errors = $resp->getErrorCodes(); 
    echo 'NOOPE..'; //print_r($errors): you'll see which is/are the error 
} 

?> 

양식은 PHP 스크립트에 g-recaptcha-response이라는 속성을 전달합니다. print_r($_POST['g-recaptcha-response'] 또는 print_r($_POST) 인 경우 수표가 양수이면 (로봇으로 표시되지 않은 경우) g-recaptcha-response의 값은 긴 영숫자 문자열임을 알 수 있습니다.

관련 문제