Donde debo colocar el código de la ReCaptcha

Hola, De antemano gracias por la colaboracion:
Donde Debo colocar el codigo PHP de la Recaptcha: NO ENTIENDO SI:

1- Debo crear 2 paginas PHP:
A- UNA con un formulario de contactos (nombre, e-mail, telefono, mensaje) con una MEZCLA de codigo HTML y PHP y agregarle el código PHP con las claves key que me ha dado google/ReCaptcha y guardarlo en .PHP, B- otra PHP (sendform) validando que lleguen las consultas al buzón y
y finalmente adjuntar estos PHP A+B linkeado a la carpeta donde esta todo el web.... o,

2- Hacer A- un PHP con el código de la ReCaptcha, B- otro PHP (sendform) con el código de envio de e-mail para que llegue el mensaje del usuario al buzon de correo, y C- hacer el formulario de contactos en HTML?

Por favor oriénteme al respecto... llevo investigando como resolverlo ya por días.... :( Gracias Hormiguita
[correo eliminado]
Hola:

No es necesario tener tantas páginas PHP. El formulario, donde estarán los datos a completar, puede ser un archivo .html que sólo tenga HTML (valga la redundancia). El archivo que procesa los datos sí debe ser un archivo PHP. Ahora, si utilizas el archivo que tiene el formulario para validar y enviar el email, entonces no es necesario que sean dos.

Para utilizar Google Captcha debes hacer lo siguiente:

formulario.php (tendrá código PHP, por lo que debe ser .php)
<html><head><!-- CONTENIDO DEL HEAD --></head>
  <body>
    <form action="procesa.php" method="post">
      <label for="nombre">Nombre:</label><input type="text" name="nombre" />
      <label for="email">Nombre:</label><input type="text" name="email" />
      <label for="mensaje">Nombre:</label><textarea name="mensaje"></textarea>
      <?php
        // No te preocupes por poner la clave "a la vista", puesto que el código PHP se ejecuta en el servidor, la clave nunca estará visible.
        require_once( 'recaptchalib.php' );
        $key = 'Aquí debes poner la clave pública de Google';
        recaptcha_get_html( $key );
      ?>
      <input type="submit" />
    </form>
</body></html>

Eso cubre el formulario de contacto (aunque bien simple, pues es sólo como explicación :P). Ahora, para el archivo que procesa la información y envía el correo:

procesa.php
<?php
  $nombre = $_POST['nombre'];
  $email = $_POST['email'];
  $pregunta_captcha = $_POST['recaptcha_challenge_field'];  // La pregunta que generó el código captcha
  $respuesta_captcha = $_POST['recaptcha_response_field']; // La respuesta del usuario
  $mensaje = $_POST['mensaje'];

  if( check_captcha( $pregunta_captcha, $respuesta_captcha ) === true ) {
    echo "La respuesta es válida";
    $from = "$nombre <$email>";
    
    if( mail( '[correo eliminado]', 'Asunto del mensaje', wordwrap( $mensaje, 70 ), "From: $from" . PHP_EOL ) ) {
      echo "Mensaje enviado";
    } else {
      echo "Ocurrió un error al enviar el mensaje.";
    }
  } else {
    echo "Respuesta incorrecta";
  }

  function check_captcha( $q, $a ) {
    require_once( 'recaptchalib.php' );
    $key = 'Nuevamente pon la clave de google aquí';
    $respuesta = recaptcha_check_answer( $key, $_SERVER["REMOTE_ADDR"], $q, $a );

    return $respuesta->is_valid ? true : false;
  }
?>

Lo anterior no valida ningún campo excepto el captcha, así que no lo uses como esta.
Muéstranos lo que llevas y te ayudamos a acomodar el contenido si es que no logras entender (logro comprender que puede ser complicado el tema de PHP para los que no son programadores, por eso lo digo, no por ofender).

Saludos.
Realmente aprecio mucho su respuesta, gracias por su orientación: La pagina web es: http://parkcitycleaningservices.com/contact.html

Como podra ver aun no tiene el formulario de contactos... Entonces he trabajado asi:

1 - Tome la pagina ya existente HTML y le agregue el formulario de contactos y antes del boton enviar le puse el código PHP de la ReCaptcha asi:

Pero lo guarde asi: Contact.HTML ... y realmente no SE si me lo acepte voy a subirlo al servidor.

<html>
<body>
<head>
<title>Park City cleaning services</title>
AQUI TODO EL CODIGO HTML CORRESPONDIENTE A DISEño DE LA PAGINA....

<form action="sendform.php" method="post" name="Form" id="Form">
<table width="335" height="272" border="0" align="right" cellpadding="0" cellspacing="0">
<tr>
<th width="72" height="18" scope="col">&nbsp;</th>
<th width="284" scope="col">&nbsp;</th>
</tr>
<tr>
<td height="31"><div align="left"><span class="style44">Name</span></div></td>
<td><label>
<input name="nombre" type="text" id="nombre" size="32">
</label></td>
</tr>
<tr>
<td height="32" class="style44"><div align="left">E-mail</div></td>
<td><label>
<input name="email" type="text" id="email" size="32">
</label></td>
</tr>
<tr>
<td height="45" class="style44"><div align="left">Message Details</div></td>
<td><label>
<textarea name="mensaje" id="mensaje" cols="30" rows="8"></textarea>
</label></td>
</tr>
<tr>
<td height="66">&nbsp;</td>
<td><label>
<?php
require_once('recaptchalib.php');
$publickey = "AQUI PUSE LA LLAVE PUBLICA"; // you got this from the signup page
echo recaptcha_get_html($publickey);
?><input type="submit" name="enviar" id="enviar" value="Submit">
</label></td>
</tr>
</table>
</form>
</th>
Y
2- Hice una pagina o archivo PHP QUE PROCESA EL CONTACTOS Y LA ReCaptcha y lo guarde como sendform.php.
Lo hice tomando el código que me dió Google/ ReCaptcha y el código que usted me envió e hice una especie de mezcla de código PHP asi:


<?php
$ remitente = $_POST['email'];
$ destino = "[correo eliminado]";
$ asunto = "Nuevo cliente servicio limpieza";
$ mensaje = $_POST['mensaje'];
$ encabezados = "From: $remitente\nReply-To: $remitente\nContent-Type: text/html;charset=iso-8859-1";
mail($destino, $asunto, $mensaje, $encabezados) or die ("Your message could not be sent");
echo "<p>Your message has been sent to this content:</p>";
echo "<strong><b>$mensaje</b></strong>";

require_once('recaptchalib.php');
$privatekey = "AQUI PUDE LA KEY";
$resp = recaptcha_check_answer ($privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"]);

if (!$resp->is_valid) {
echo "valid response";
// What happens when the CAPTCHA was entered incorrectly
die ("The reCAPTCHA wasn't entered correctly. Go back and try it again." .
"(reCAPTCHA said: " . $resp->error . ")");
} else {
// Your code here to handle a successful verification
}

?>
Yo reconozco que posiblemente usted este muy muy ocupadito pero por favor me puede seguir colaborando indicandome si voy bien o que debo corregir... please...

En todo caso voy a hacer las pruebas con el servidor... PERO si QUE ES REEEEFRUSTRANTE NO DARLE CON LA SOLUCION... MIL GRACIAS Hormiguita
Esta todo bien, excepto que si el archivo utiliza PHP, entonces el archivo debe llamarse algo.php (reemplazando "algo". En realidad tiene que ver con la configuración del servidor, pero para no complicarte más, dejémoslo en que si tiene PHP, entonces la extensión será .php). Entonces, cambia el nombre de Contact.html a Contact.php.

El formulario, donde aparece la pregunta, esta bien (excepto por lo anterior :P). El resto no, pues estas enviando el e-mail antes de verificar la información :P:

<?php
  // Lo primero que debes hacer es verificar si los campos obligatorios NO están vacíos:
  $out = '';
  if(
    ( isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ) &&
    ( isset( $_POST['asunto'] ) && ! empty( $_POST['asunto'] ) ) &&
    ( isset( $_POST['mensaje'] ) && ! empty( $_POST['mensaje'] ) && 
    ( isset( $_POST['recaptcha_response_field'] ) && ! empty( $_POST['recaptcha_response_field'] ) )
  ) {

    // Validar CAPTCHA
    require_once('recaptchalib.php');
    $privatekey = "AQUI PUDE LA KEY";
    $resp = recaptcha_check_answer( $privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] );

    if( ! $resp->is_valid() )
      $out .= 'Respuesta incorrecta';
    // FIN Validar CAPTCHA

    // Validar EMAIL
    $remitente = $_POST['email'];
    
    if( filter_var( $remitente, FILTER_VALIDATE_EMAIL ) === FALSE )
      $out .= 'Ingrese un Email válido';
    // FIN Validar EMAIL

    // Aquí limpias las variables para evitar inyección de código
    $asunto = filter_var( $_POST['asunto'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );
    $mensaje = filter_var( $_POST['mensaje'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );
    
    // Sólo si no hay errores ($out estará vacío) procedes a enviar el correo:
    if( empty( $out ) ) {
      $eol = PHP_EOL; // PHP_EOL sirve para obtener el salto de línea correcto, pues no sabes si utilizan Windows o Linux (o MAC :S) en el servidor.
      $encabezados = "From: $remitente$eolReply-To: $remitente$eolContent-Type: text/html;charset=iso-8859-1";
      
      $destino = "[correo eliminado]";
      if( mail( $destino, $asunto, wordwrap( $mensaje ), $encabezados ) )
        $out .= 'Gracias por comunicarte con nosotros';  // El mensaje fue enviado correctamente
      else
        $out .= 'Ocurrió un error al enviar el mensaje.'; // Falló el envío. No sé por qué no hay más formas de mostrar errores en cuanto al email...
    }
  } else {
    $out .= 'Por favor llene todos los campos';
  }

  // Aquí solo muestras la salida.
  echo $out;
?>

Si copias y pegas ese código, en lugar del que tienes actualmente en sendform.php, debería funcionar bien.

Saludos.
Sr. Escaparate: YEAHHH USTED ES UN DIVINO :) Gracias a su orientacion la ReCaptcha ya aparece en el formulario de contactos. php .... http://parkcitycleaningservices.com/contact.php

PERO :( me esta dando este error :(

Parse error: syntax error, unexpected '{' in /home/content/r/p/m/rpminc23/html/parkcitycleaningservices/sendform.php on line 10

POR FAVOR PUEDE MIRARLE

Este es el código sendform.php


<?php
// Lo primero que debes hacer es verificar si los campos obligatorios NO están vacíos:
$out = '';
if(
( isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ) &&
( isset( $_POST['asunto'] ) && ! empty( $_POST['asunto'] ) ) &&
( isset( $_POST['mensaje'] ) && ! empty( $_POST['mensaje'] ) &&
( isset( $_POST['recaptcha_response_field'] ) && ! empty( $_POST['recaptcha_response_field'] ) )
) {

// Validar CAPTCHA
require_once('recaptchalib.php');
$privatekey = "xxxxxxx SI AQUI LA PUSE";
$resp = recaptcha_check_answer( $privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] );

if( ! $resp->is_valid() )
$out .= 'Wrong answer';
// FIN Validar CAPTCHA

// Validar EMAIL
$remitente = $_POST['email'];

if( filter_var( $remitente, FILTER_VALIDATE_EMAIL ) === FALSE )
$out .= 'Enter a valid email address';
// FIN Validar EMAIL

// Aquí limpias las variables para evitar inyección de código
$asunto = filter_var( $_POST['asunto'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );
$mensaje = filter_var( $_POST['mensaje'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );

// Sólo si no hay errores ($out estará vacío) procedes a enviar el correo:
if( empty( $out ) ) {
$eol = PHP_EOL; // PHP_EOL sirve para obtener el salto de línea correcto, pues no sabes si utilizan Windows o Linux (o MAC :S) en el servidor.
$encabezados = "From: $remitente$eolReply-To: $remitente$eolContent-Type: text/html;charset=iso-8859-1";

$destino = "[correo eliminado]";
if( mail( $destino, $asunto, wordwrap( $mensaje ), $encabezados ) )
$out .= 'Thank you for contacting us'; // El mensaje fue enviado correctamente
else
$out .= 'An error occurred while sending the message.'; // Falló el envío. No sé por qué no hay más formas de mostrar errores en cuanto al email...
}
} else {
$out .= 'Please fill in all fields';
}

// Aquí solo muestras la salida.
echo $out;
?>

Porfavorsito sus comentarios Sr. Escaparate... please
Hormiguita
Disculpa, me faltó un paréntesis :P

<?php
  // Lo primero que debes hacer es verificar si los campos obligatorios NO están vacíos:
  $out = '';
  if(
    ( isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ) &&
    ( isset( $_POST['asunto'] ) && ! empty( $_POST['asunto'] ) ) &&
    ( isset( $_POST['mensaje'] ) && ! empty( $_POST['mensaje'] ) ) && 
    ( isset( $_POST['recaptcha_response_field'] ) && ! empty( $_POST['recaptcha_response_field'] ) )
  ) {

    // Validar CAPTCHA
    require_once('recaptchalib.php');
    $privatekey = "AQUI PUDE LA KEY";
    $resp = recaptcha_check_answer( $privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] );

    if( ! $resp->is_valid() )
      $out .= 'Respuesta incorrecta';
    // FIN Validar CAPTCHA

    // Validar EMAIL
    $remitente = $_POST['email'];
    
    if( filter_var( $remitente, FILTER_VALIDATE_EMAIL ) === FALSE )
      $out .= 'Ingrese un Email válido';
    // FIN Validar EMAIL

    // Aquí limpias las variables para evitar inyección de código
    $asunto = filter_var( $_POST['asunto'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );
    $mensaje = filter_var( $_POST['mensaje'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );
    
    // Sólo si no hay errores ($out estará vacío) procedes a enviar el correo:
    if( empty( $out ) ) {
      $eol = PHP_EOL; // PHP_EOL sirve para obtener el salto de línea correcto, pues no sabes si utilizan Windows o Linux (o MAC :S) en el servidor.
      $encabezados = "From: $remitente$eolReply-To: $remitente$eolContent-Type: text/html;charset=iso-8859-1";
      
      $destino = "[correo eliminado]";
      if( mail( $destino, $asunto, wordwrap( $mensaje ), $encabezados ) )
        $out .= 'Gracias por comunicarte con nosotros';  // El mensaje fue enviado correctamente
      else
        $out .= 'Ocurrió un error al enviar el mensaje.'; // Falló el envío. No sé por qué no hay más formas de mostrar errores en cuanto al email...
    }
  } else {
    $out .= 'Por favor llene todos los campos';
  }

  // Aquí solo muestras la salida.
  echo $out;
?>

Ahora sí debería funcionar. Si no funciona me avisas :P.
Sr. Scaparate lo siento... no queria molestarlo más y he estado tratando de resolverlo estos 2 últimos días de encontrar las formas colocar el codigo PERO NO ME DA...

Con su código me da el siguiente error:

Fatal error: Call to undefined method ReCaptchaResponse::is_valid() in /home/content/r/p/m/rpminc23/html/cleaningservices/sendform.php on line 15

Creo que se refiere a que debo poner la respuesta positiva de que la ReCatcha fue deligenciada correctamente... en estaárea del código...

if( ! $resp->is_valid() )
$out .= 'Wrong answer';
// FIN Validar CAPTCHA

Entonces hice cambios:

1- Elimine el ( isset( $_POST['asunto'] ) && ! empty( $_POST['asunto'] ) ) && porque el formulario al usuario no tiene ese campo para que el usuario lo llene....
2- y dezmenuce el código y ha sido PEOR porque ahora no me llegan los correos de prueba al buzón

YO CREO QUE HE TOMADO MUCHAS RUTAS LARGAS Y LOCAS CON ESTE CODIGO PHP Y MI LOGICA NO ME DA... :(

Asi que hoy martes 18/ volvi a empezar con el código que usted muy formal me envió... Por favor me disculpa y me puede volver a colaborar indicando como proceder:

Fatal error: Call to undefined method ReCaptchaResponse::is_valid() in /home/content/r/p/m/rpminc23/html/cleaningservices/sendform.php on line 15

<?php
// Lo primero que debes hacer es verificar si los campos obligatorios NO están vacíos:
$out = '';
if(
( isset( $_POST['email'] ) && ! empty( $_POST['email'] ) ) &&
( isset( $_POST['mensaje'] ) && ! empty( $_POST['mensaje'] ) ) &&
( isset( $_POST['recaptcha_response_field'] ) && ! empty( $_POST['recaptcha_response_field'] ) )
) {

// Validar CAPTCHA
require_once('recaptchalib.php');
$privatekey = "THE KEY";
$resp = recaptcha_check_answer( $privatekey, $_SERVER["REMOTE_ADDR"], $_POST["recaptcha_challenge_field"], $_POST["recaptcha_response_field"] );

if( ! $resp->is_valid() )
$out .= 'Wrong answer';
// FIN Validar CAPTCHA

// Validar EMAIL
$remitente = $_POST['email'];

if( filter_var( $remitente, FILTER_VALIDATE_EMAIL ) === FALSE )
$out .= 'Please enter a valid Email address';
// FIN Validar EMAIL

// Aquí limpias las variables para evitar inyección de código
$mensaje = filter_var( $_POST['mensaje'], FILTER_SANITIZE_STRING, FILTER_FLAG_ENCODE_LOW & FILTER_FLAG_ENCODE_HIGH );

// Sólo si no hay errores ($out estará vacío) procedes a enviar el correo:
if( empty( $out ) ) {
$eol = PHP_EOL; // PHP_EOL sirve para obtener el salto de línea correcto, pues no sabes si utilizan Windows o Linux (o MAC :S) en el servidor.
$encabezados = "From: $remitente$eolReply-To: $remitente$eolContent-Type: text/html;charset=iso-8859-1";

$destino = "[correo eliminado]";
if( mail( $destino, wordwrap( $mensaje ), $encabezados ) )
$out .= 'Thank you for contacting us'; // El mensaje fue enviado correctamente
else
$out .= 'Error while sending the message.'; // Falló el envío. No sé por qué no hay más formas de mostrar errores en cuanto al email...
}
} else {
$out .= 'Please fill in the details';
}

// Aquí solo muestras la salida.
echo $out;
?>
De tanto que hice... este es el código PHP que hace que los correos lleguen al buzón PERO:

1- La ReCaptacha-Google NO FUNCIONA.
2- y Asi envie el formulario sin llenar los espacios... llega al Buzón... o sea no funcionaaaaaa.


Yo sé y asumo la responsabilidad pues quiete muchas cosas del código que usted me envió... por favor AYUDA
como hago para que funcione la ReCaptacha Google en el formulario de contactos?????

<?php


// Validar CAPTCHA
require_once('recaptchalib.php');
$privatekey = "THE KEY";

if ($_POST ["recaptcha_response_field"]) {
$resp = recaptcha_check_answer( $privatekey,
$_SERVER["REMOTE_ADDR"],
$_POST["recaptcha_challenge_field"],
$_POST["recaptcha_response_field"] );

if( ! $resp->is_valid) {
echo "Thank you for contacting us";
} else {
$erro = $resp->error;
}
}


// FIN Validar CAPTCHA

// Validar EMAIL

$remitente = $_POST['email'];
$destino = "[correo eliminado]";
$asunto = "Mensaje Cleaning Services" ;
$mensaje = $_POST['mensaje'] ;
$encabezados = "From: $remitente\nReply-To: $remitente\nContent-Type: text/html; charset=iso-8859-1" ;
mail($destino, $asunto, $mensaje, $encabezados) or die ("An error occurred while sending the message") ;
echo "<p>Your message has been sent successfully with the following information:</p>" ;
echo "<strong><b>$mensaje</b></strong>" ;


?>
No te la compliqués tanto, en 3 pasos PlusCaptcha te entrega 2 scripts. El primero es para visualizar el captcha, es un simple Iframe embebido con PHP y el segundo para procesarlo. Probá crear tu captcha, o mejor dicho, registrarte y mandame PM con un feedback de que te pareció, vas a ver que ni se compara.
Hoy en día podemos aplicar cualquier tipo de información que necesitemos, gracias a las herramientas básicas que nos ofrece el internet lo podemos hacer de manera fácil, rápida y cómoda, con esta gran ayuda podemos interactuar y conocer un poco acerca de este tipo de información.
Saludos

Ifeelms