Aceptar términos y condiciones

Hola a tod@s,

Estoy creando una página sencilla para dos productos que estoy vendiendo. Como son solo dos no he instalado ningún ecommerce ya que no merece la pena.

Tengo todo listo, solo me falta que los clientes acepten unos "términos y condiciones" antes de proceder a la compra.

La cosa sería así:

Ellos entran a la página de términos y condiciones, rellenan unos datos (nombre, email, dni, dirección, localidad y provincia), únicamente si aceptan en la casilla pueden hacer click en continuar, enviando estos datos con los términos y condiciones a mi y al cliente y les llevará a otra página que yo elija (obviamente la de pago). Si es posible, que se envíe también la IP del cliente. Por si hay problemas después..
Espero que puedan orientarme, sigo buscando por si hay algún módulo prefabricado.

Un saludo y gracias de antemano.
Hola:

La típica casilla que te pregunta si aceptas las condiciones sería así:

html
<form action="procesar_datos.php" method="post">
  <label for="condiciones">Acepta las <a href="pagina_condiciones.html">condiciones</a> y blah blah</label><input type="checkbox" name="condiciones" />
  <input type="submit" value="Enviar" />
</form>

Los checkbox marcados se envían al archivo que procesa los datos como 'on', de lo contrario, el índice 'condiciones' no existirá en el arreglo $_POST. Entonces, la validación quedaría así:

procesar_datos.php
<?php
  if( isset( $_POST['condiciones'] ) ) {
    // El cliente aceptó las condiciones
  } else {
    // El cliente no aceptó las condiciones
  }
?>

Aquí se valida el índice 'condiciones' para ver si existe dicho índice; si existe, significa que el usuario aceptó las condiciones, si no existe, entonces mostrarás un mensaje diciendo que debe aceptar las condiciones.

Espero que te sirva, saludos.
Gracias por la respuesta. La verdad que ando algo verde...entiendo en parte el código pero ¿Cómo añado las otras casillas y cómo hago para que se envíe a mi email y al del cliente? Y si es posible lo de la IP.

Muchas gracias!
Hmmmm, a ver... ¿que tienes hecho hasta ahora? ¿Tienes el formulario con el que el usuario interactua? ¿Tienes el archivo que procesa los datos?

La IP del cliente es fácil de obtener:

<?php $ip = $_SERVER['REMOTE_ADDR']; ?>

Luego haces lo que quieras con la $ip.

Saludos.
Pues mira, lo hice yo así que no se si estará bien.

Este es el HTML con el formulario:
<form name="form1" method="post" action="enviar.php">
  <p>
    <label for="nombre">Nombre</label>
    <input type="text" name="nombre" id="nombre">
    <br>
    <label for="apellidos">Apellidos</label>
    <input type="text" name="apellidos" id="apellidos">
    <br>
    <label for="dni">NIF/DNI</label>
    <input type="text" name="dni" id="dni">
    <br>
    <label for="mail">Email</label>
    <input type="text" name="mail" id="mail">
    <br>
    <label for="telefono">Teléfono</label>
    <input type="text" name="telefono" id="telefono">
    <br>
    <label for="direccion">Dirección</label>
    <input type="text" name="direccion" id="direccion">
  </p>
  <p>Enviar
    <input type="submit" name="enviar" id="enviar" value="Enviar">
  </p>
</form>

Y este el php donde se procesan los datos y se envían:
<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$dni = $_POST['dni'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];
$direccion = $_POST['direccion'];
$ip = $_SERVER['REMOTE_ADDR'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", con apellidos " . $apellidos . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Dni: " . $_POST['dni'] . " \r\n";
$mensaje .= "Teléfono: " . $_POST['telefono'] . " \r\n";
$mensaje .= "Dirección: " . $_POST['direccion'] . " \r\n";
$mensaje .= "Su ip: " . $ip . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[correo eliminado]';
$asunto = 'Cliente nuevo';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo 'Mensaje enviado';

?>
Como verás ya puse lo de la ip, lo cual va genial!

Voy a intentar insertar en ese código lo que me pusiste en el primer post, espero no liarme!



EDITO:

Vale así queda.
HTML:
<form name="form1" method="post" action="enviar.php">
  <p>
    <label for="nombre">Nombre</label>
    <input type="text" name="nombre" id="nombre">
    <br>
    <label for="apellidos">Apellidos</label>
    <input type="text" name="apellidos" id="apellidos">
    <br>
    <label for="dni">NIF/DNI</label>
    <input type="text" name="dni" id="dni">
    <br>
    <label for="mail">Email</label>
    <input type="text" name="mail" id="mail">
    <br>
    <label for="telefono">Teléfono</label>
    <input type="text" name="telefono" id="telefono">
    <br>
    <label for="direccion">Dirección</label>
    <input type="text" name="direccion" id="direccion">
    <br><label for="condiciones">Acepta las <a href="pagina_condiciones.html">condiciones</a> y blah blah</label><input type="checkbox" name="condiciones" />
  </p>
  <p>Enviar
    <input type="submit" name="enviar" id="enviar" value="Enviar">
  </p>
</form>


y PHP:

<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$dni = $_POST['dni'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];
$direccion = $_POST['direccion'];
$ip = $_SERVER['REMOTE_ADDR'];
  if( isset( $_POST['condiciones'] ) ) { 
    // El cliente aceptó las condiciones 
  } else { 
    // El cliente no aceptó las condiciones 
  } 

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", con apellidos " . $apellidos . " \r\n";
$mensaje .= "Condiciones: " . $_POST['condiciones'] . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Dni: " . $_POST['dni'] . " \r\n";
$mensaje .= "Teléfono: " . $_POST['telefono'] . " \r\n";
$mensaje .= "Dirección: " . $_POST['direccion'] . " \r\n";
$mensaje .= "Su ip: " . $ip . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[correo eliminado]';
$asunto = 'Cliente nuevo';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo 'Mensaje enviado';

?>

Va genial, lo único que me gustaría que la casilla de aceptar fuese obligatoria, al igual que todos los campos de texto. ¿Cómo sería? Muchas gracias!
Ok, el formulario HTML está bien y para hacer que la casilla de condiciones sea obligatoria el código queda así:

<?php
  // Primero debes verificar que la casilla de las condiciones fue marcada:
  if( isset( $_POST['condiciones'] ) && $_POST['condiciones'] == 'on' ) { // El cliente acepta las condiciones, entonces se envía el e-mail:
    // Nunca utilices las variables sin limpiarlas. Utiliza la función strip_tags( $cadena_texto ) para eliminar algunas etiquetas peligrosas
    $nombre = strip_tags( $_POST['nombre'] );
    $apellidos = strip_tags( $_POST['apellidos'] );
    $dni = strip_tags( $_POST['dni'] );
    $mail = strip_tags( $_POST['mail'] );
    $telefono = strip_tags( $_POST['telefono'] );
    $direccion = strip_tags( $_POST['direccion'] );
    $ip = $_SERVER['REMOTE_ADDR'];
    
    $eol = PHP_EOL; // PHP_EOL devuelve el salto de línea correspondiente. \r\n es sólo para Windows.
    // Puedes enviar mensajes con HTML también. Por ejemplo:
    // $mensaje = "<p style='color: green;'>Mi mensaje</p>";

    $mensaje = "Este mensaje fue enviado por " . $nombre . ", con apellidos " . $apellidos . $eol;
    $mensaje .= "Condiciones: " . $_POST['condiciones'] . $eol;
    $mensaje .= "Su e-mail es: " . $mail . $eol;
    $mensaje .= "Dni: " . $dni . $eol;
    $mensaje .= "Teléfono: " . $telefono . $eol;
    $mensaje .= "Dirección: " . $direccion . $eol;
    $mensaje .= "Su ip: " . $ip . $eol;
    $mensaje .= "Enviado el " . date('d/m/Y', time());

    $subject = 'Cliente nuevo';
    $to = '[correo eliminado]';
    $CC = $mail; // CC significa Carbon Copy (envía copias del email a los destinatarios especificados).
    // BCC significa Blind Carbon Copy y hace lo mismo que CC, sólo que oculta los email de los destinatarios en los correos.
    //$BCC = $mail; // Quita el comentario de esta línea si quieres usar la copia ciega (Blind Carbon Copy) y comenta la línea de $CC.
  } else { // El cliente no aceptó las condiciones:
    echo "<p>Aquí pondrías el mensaje si el cliente no acepta las condiciones</p>";
  }

  // Esta función se encarga de enviar el correo (no modifiques nada, pues tal cual esta funciona correctamente):
  function sendit($from = '', $to = '', $subject = 'Sin asunto', $html_msg = '', $plain_msg = '', $CC = '', $BCC = '', $sIP = '') {
    $eol     = PHP_EOL;
    if($sIP == '')
      $sIP = md5($subject.date('dmY'));
    if($from == '')
      $from = '<noreply@' . $_SERVER['SERVER_NAME'] . '>'.$eol;
    $header  = 'From: ' . $from . $eol;
		// Responder a:
    $header .= 'Reply-To: ' . $from . $eol;
		// Responder acuse de recibo a:
    $header .= 'Return-Receipt-To: ' . $from . $eol;
		// Responder:
    $header .= 'Return-Path: ' . $from . $eol;
		// Con copia:
    if($CC != '')
      $header .= 'CC: ' . $CC . $eol;
		// Con copia ciega (Blind Carbon Copy, conceal ):
    if($BCC != '')
      $header .= 'BCC: ' . $BCC . $eol;

    $header .= 'Message-ID: <' . time() . ' no-reply@' . $_SERVER['SERVER_NAME'] . '>' . $eol;
    $header .= 'Content-Type: multipart/alternative; boundary="' . $sIP. '"' . $eol . $eol;
    $header .= 'MIME-Version: 1.0' . $eol;
    
    // PLAIN TEXT
    $msg  = "Content-Type: multipart/alternative".$eol;
    $msg .= '--' .$sIP.$eol;
    $msg .= 'Content-Type: text/plain; charset=utf-8' .$eol;
    $msg .= 'Content-Transfer-Encoding: 7bit' .$eol.$eol;
    $msg .= $plain_msg . $eol . $eol;
    $msg .= 'Para ver correctamente este mensaje, usted necesita activar el contenido HTML.'.$eol;
    $msg .= 'Si usted está leyendo esto, por favor actualice su cliente de correo electrónico o active el contenido HTML.'.$eol;
    
    // HTML MESSAGE
    $msg .= '--'.$sIP.$eol;
    $msg .= 'Content-Type: text/html; charset=utf-8'.$eol;
    $msg .= 'Content-Transfer-Encoding: 7bit'.$eol.$eol;
    $msg .= $html_msg . $eol . $eol;
    $msg .= '--' .$sIP.$eol;

    ini_set('sendmail_from', $from);
    if (mail($to, $subject, wordwrap($msg, 70, $eol), $header)) {
      @ini_restore('sendmail_from');
      return true;
    }
    else {
      @ini_restore('sendmail_from');
    }
    
    return false;
  }
?>

Si los comentarios no son suficiente explicación avísame :D.

Saludos y suerte.
Te agradezco mucho la colaboración. Con tiempo que tuve lo dejé así:

<?php
$nombre = $_POST['nombre'];
$apellidos = $_POST['apellidos'];
$dni = $_POST['dni'];
$mail = $_POST['mail'];
$telefono = $_POST['telefono'];
$direccion = $_POST['direccion'];
$ip = $_SERVER['REMOTE_ADDR'];

$header = 'From: ' . $mail . " \r\n";
$header .= "X-Mailer: PHP/" . phpversion() . " \r\n";
$header .= "Mime-Version: 1.0 \r\n";
$header .= "Content-Type: text/plain";

$mensaje = "Este mensaje fue enviado por " . $nombre . ", con apellidos " . $apellidos . " \r\n";
$mensaje .= "Condiciones: " . $_POST['condiciones'] . " \r\n";
$mensaje .= "Su e-mail es: " . $mail . " \r\n";
$mensaje .= "Dni: " . $_POST['dni'] . " \r\n";
$mensaje .= "Teléfono: " . $_POST['telefono'] . " \r\n";
$mensaje .= "Dirección: " . $_POST['direccion'] . " \r\n";
$mensaje .= "Su ip: " . $ip . " \r\n";
$mensaje .= "Enviado el " . date('d/m/Y', time());

$para = '[correo eliminado]';
$asunto = 'Cliente nuevo';

mail($para, $asunto, utf8_decode($mensaje), $header);

echo 'Mensaje enviado';

?>

Lo otro lo dejé con javascript.

Lo que ocurre es que me han recomendado filtrar las variables para evitar inyecciones. ¿Saben como sería? No estoy nada puesta en eso [:(]

Saludos!