La forma más efectiva es usar un captcha que trabaje con sesiones
Demo
http://foros.emprear.com/php/captcha...atir-de-un-gif
Otra sería usar ajax, pero estás expuesto a que javascript esté desactivado
form.html
Código HTML:
Ver original<!DOCTYPE html>
<meta http-equiv="content-type" content="text/html; charset=utf-8" />
<script type="text/javascript"> //<![CDATA[
var rootdomain="http://"+window.location.hostname;
function cargarAjax(url,divAjax,idformulario){
// Recogemos los valores del form
var elNombre = document.getElementById('nombre').value;
var elApellido = document.getElementById('apellido').value;
//construís la query
var parametros = "?nombre="+elNombre+"&apellido="+elApellido;
var contenidoAjax = false;
if(window.XMLHttpRequest) {
contenidoAjax = new XMLHttpRequest();
}else if(window.ActiveXObject) {
contenidoAjax = new ActiveXObject("Microsoft.XMLHTTP");
}else{
alert('Su navegador no soporta Ajax');
}
contenidoAjax.onreadystatechange=function(){
cargaPagina(contenidoAjax,divAjax,idformulario);
}
contenidoAjax.open('GET', url+parametros, true);
contenidoAjax.send(null);
}
function cargaPagina(contenidoAjax,divAjax,idformulario){
if(contenidoAjax.readyState == 4 && (contenidoAjax.status==200 || window.location.href.indexOf("http")==-1)){
document.getElementById(divAjax).innerHTML="Gracias <b>" + contenidoAjax.responseText + "<\/b><br \/>el formulario fue procesado";
//Reseteas y ocultás el form
document.getElementById('nombre').value = "";
document.getElementById('apellido').value = "";
document.getElementById(idformulario).style.display = "none";
}
}
//]]>
<form action="#" id="formulario1"> <input type="text" value="" id="nombre" name="nombre" autocomplete="off"/><br /> <input type="text" value="" id="apellido" name="apellido" autocomplete="off"/><br /> <input type="button" value="procesar" onclick="cargarAjax('nombre.php','mensaje','formulario1')" />
nombre.php
Código PHP:
Ver original<?php
echo $_GET['nombre'] . " " . $_GET['apellido'];
?>
Te aclaro que este segundo ejemplo no tiene incluida ningún tipo de validación.
En este otro ejemplo combino ambas cosas
http://foros.emprear.com/php/demo-form-ajax-captcha/
la diferencia es que para darle algunosefectos, en lugar de usar javascript puro para el envío x Ajax. utilicé jQuery
Saludos