- Home
- Categorie
- Coding e Sistemistica
- PHP
- Inserire codice captcha in form
-
Inserire codice captcha in form
Buongiorno a tutti, poichè sono alle prime armi avrei bisogno di inserire un codice captcha all'interno di un form contatti. Qualche anima pia potrebbe cortesemente darmi una mano...sono disperato.... grazie a tutti in anticipo
allego codice del form:
[php]
<form method="post" action="formInvio.php">
<input type="hidden" name="require" value="email,nominativo" />
<input type="hidden" name="contenitore" value="[email protected]" />
<input type="hidden" name="invia_Dati" value="REMOTE_HOST,HTTP_USER_AGENT" />
<tr>
<td><div align="center">
<table width="98%" border="0" cellpadding="1" cellspacing="0" style="border-collapse: collapse">
<tr>
<td width="55%" height="36" valign="top" bordercolor="#FFFFFF"><p align="right" class="Stile39"><font color="#FFFFFF">Nome e Cognome </font><span class="Stile54">()</span><font color="#FFFFFF"> <br />
</font></p></td>
<td width="45%" bordercolor="#FFFFFF"><p align="left"><font face="Arial" size="3" color="#000000">
<input name="nominativo" type="text" id="nominativo" style="background-color: #ffffff; border-style: solid; border-color: #000000" size="20" />
</font></p></td>
</tr>
<tr>
<td height="36" align="center" valign="top" bordercolor="#FFFFFF"><p align="right" class="Stile39"><font color="#FFFFFF">Email a cui ricevere risposta </font><span class="Stile54">()</span><font color="#FFFFFF"><br />
</font></p></td>
<td bordercolor="#FFFFFF"><p align="left"><font face="Arial" size="3" color="#000000">
<input type="text" name="email" size="20" style="background-color:; border-style: solid; border-color:" />
</font></p></td>
</tr>
<tr>
<td height="36" align="center" valign="top"><p align="right"><span class="Stile49"><span class="Stile43">Indirizzo</span></span></p></td>
<td><p align="left"><font face="Arial" size="3" color="#000000">
<input name="indirizzo" type="text" id="indirizzo" style="background-color:; border-style: solid; border-color:" size="20" />
</font></p></td>
</tr>
</form>
[/php]
e codice del file forminvio.php
[php]
<?
/*
formail completo, è possibile aggiungere qualunque campo
è sufficiente inserire le due pagine in un punto qualunque
del proprio dominio.
by linkbruttocane
*///INIZIO PARAMETRI DA SETTARE OBBLIGATORIAMENTE
/****************************************************************************************/
// Il parametro $delay indica i secondi di ritardo impiegati
// a riportare l'utente all'home page dopo che abbia
// compilato correttamente il modulo$delay = "5";
// Il parametro $url indica la pagina alla quale si viene
// rimandati una volta compilato correttamente il modulo
// io ho messo una homepage, ma potrebbe essere qualunque altra pagina$url = "indirizzo pagina homepage";
// Il parametro $provenienza indica le possibili provenienze dei dati: indicare
// il proprio dominio nella forma mostrata dall'esempio$provenienza = array ();
// Il parametro $esclusioni vi permette di NON consentire
// messaggi da un indirizzo mail specificato
// sia appartenente ad un dominio, ovvero
// 'tutte le mail che appartengono ad un dominio'
// od anche a singoli account$esclusioni = array ('*@quellochetipare.com', '[email protected]', '[email protected]');
//FINE PARAMETRI DA SETTARE OBBLIGATORIAMENTE
/****************************************************************************************/$email = $_POST['email'];
$versione_form = "stabile";
function print_error($reason,$type = 0) {
global $versione_form;
build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet);
if ($type == "missing") {
?>
<body bgcolor='000000'>
<p align='center'><font face='Georgia, Times New Roman, Times, serif' color='#990000' size='+2'>Il modulo non puo'
essere inviato per le seguenti ragioni</font></p>
<br>
<p align='center'><font face='Georgia, Times New Roman, Times, serif' size='2' color='#990000'>
<?
echo $reason."\n";
?>
</font>
<p align='center'><font face='Georgia, Times New Roman, Times, serif' size='+1' color='#990000'>Premere il pulsante <input type="button" value="indietro" onClick="history.back();">
e riprovare.</font></p>
<?
} else { // every other error
?>
Il modulo non puo' essere inviato per le seguenti ragioni:<p align='center'>
<?
}
echo "<br><br>\n";exit;
}function check_banlist($esclusioni, $email) {
if (count($esclusioni)) {
$allow = true;
foreach($esclusioni as $banned) {
$temp = explode("@", $banned);
if ($temp[0] == "*") {
$temp2 = explode("@", $email);
if (trim(strtolower($temp2[1])) == trim(strtolower($temp[1])))
$allow = false;
} else {
if (trim(strtolower($email)) == trim(strtolower($banned)))
$allow = false;
}
}
}
if (!$allow) {
print_error("Stai utilizzando un <b>indirizzo email escluso.</b>");
}
}function check_referer($provenienza) {
if (count($provenienza)) {
$found = false;
$temp = explode("/",getenv("HTTP_REFERER"));
$referer = $temp[2];
for ($x=0; $x < count($provenienza); $x++) {
if (eregi ($provenienza[$x], $referer)) {
$found = true;
}
}
if (!getenv("HTTP_REFERER"))
$found = false;
if (!$found){
print_error("Provieni da un <b>dominio non autorizzato.</b>");
error_log("[FormMail.php] Illegal Referer. (".getenv("HTTP_REFERER").")", 0);
}
return $found;
} else {
return true; //
}
}
if ($provenienza)
check_referer($provenienza);if ($esclusioni)
check_banlist($esclusioni, $email);function parse_form($array) {
// build reserved keyword array
$reserved_keys[] = "required";
$reserved_keys[] = "redirect";
$reserved_keys[] = "email";
$reserved_keys[] = "require";
$reserved_keys[] = "contenitore";
$reserved_keys[] = "titolo";
$reserved_keys[] = "bgcolor";
$reserved_keys[] = "text_color";
$reserved_keys[] = "link_color";
$reserved_keys[] = "vlink_color";
$reserved_keys[] = "alink_color";
$reserved_keys[] = "title";
$reserved_keys[] = "missing_fields_redirect";
$reserved_keys[] = "invia_Dati";
if (count($array)) {
while (list($key, $val) = each($array)) {$reserved_violation = 0; for ($ri=0; $ri<count($reserved_keys); $ri++) { if ($key == $reserved_keys[$ri]) { $reserved_violation = 1; } } if ($reserved_violation != 1) { if (is_array($val)) { for ($z=0;$z<count($val);$z++) { $content .= "$key: $val[$z]\n"; } } else { $content .= "$key: $val\n"; } } }
}
return $content;
}function mail_it($content, $titolo, $email, $contenitore) {
mail($contenitore, $titolo, $content, "From: $email\r\nReply-To: $email\r\nX-Mailer: DT_formmail");
}function build_body($title, $bgcolor, $text_color, $link_color, $vlink_color, $alink_color, $style_sheet) {
if ($style_sheet)
echo "<LINK rel=STYLESHEET href="$style_sheet" Type="text/css">\n";
if ($title)
echo "<title>$title</title>\n";
if (!$bgcolor)
$bgcolor = "#000000";
if (!$text_color)
$text_color = "#80000";
if (!$link_color)
$link_color = "#0000FF";
if (!$vlink_color)
$vlink_color = "#FF0000";
if (!$alink_color)
$alink_color = "#000088";
if ($background)
$background = "background="$background"";
echo "<body bgcolor="$bgcolor" text="$text_color" link="$link_color" vlink="$vlink_color" alink="$alink_color" $background>\n\n";
}$contenitore_finale = split(',',$contenitore);
for ($i=0;$i<count($contenitore_finale);$i++) {
$contenitore_to_test = trim($contenitore_finale*);
if (!eregi("^[_\.0-9a-z-]+@([0-9a-z][0-9a-z-]+\.)+[a-z]{2,3}$", $contenitore_to_test)) {
print_error("<b>Occorre un indirizzo email valido per continuare ($contenitore_to_test) </b>");
}
}if ($required)
$require = $required;if ($require) {
$require = ereg_replace( " +", "", $require);
$required = split(",",$require);
for ($i=0;$i<count($required);$i++) {
$string = trim($required*);if((!(${$string})) || (!(${$string}))) { if ($missing_fields_redirect) { header ("Location: $missing_fields_redirect"); exit; } $require; $missing_field_list .= "Il campo relativo a <b>$required*</b> deve essere compilato <br>\n\n"; }
}
if ($missing_field_list)
print_error($missing_field_list,"missing");
}if (($email) || ($EMAIL)) {
$email = trim($email);
if ($EMAIL)
$email = trim($EMAIL);
if (!eregi("^[_.0-9a-z-]+@([0-9a-z][0-9a-z-]+.)+[a-z]{2,3}$", $email)) {
print_error("il suo <b>indirizzo email</b> non risulta essere valido");
}
$EMAIL = $email;
}$content = parse_form($HTTP_POST_VARS);
if ($invia_Dati) {
$invia_Dati = ereg_replace( " +", "", $invia_Dati);
$splitta_Dati = split(",",$invia_Dati);
$content .= "\n------ variabili utente ------\n";
for ($i=0;$i<count($splitta_Dati);$i++) {
$string = trim($splitta_Dati*);
if ($splitta_Dati* == "REMOTE_HOST")
$content .= "REMOTE HOST: ".$REMOTE_HOST."\n";
else if ($splitta_Dati* == "REMOTE_USER")
$content .= "REMOTE USER: ". $REMOTE_USER."\n";
else if ($splitta_Dati* == "REMOTE_ADDR")
$content .= "REMOTE ADDR: ". $REMOTE_ADDR."\n";
else if ($splitta_Dati* == "HTTP_USER_AGENT")
$content .= "BROWSER: ". $HTTP_USER_AGENT."\n";
}
}if (!$titolo)
$titolo = "Modulo dal sito";mail_it(stripslashes($content), stripslashes($titolo), $email, $contenitore);
if ($redirect) {
header ("Location: $redirect");
exit;
} else {
print "<body bgcolor='#000000'><p align='center'><font face='Georgia' size='4' color='#800000'>Grazie per averci
contattato.</font></p><p align='center'><font face='Georgia' size='4' color='#800000'>Riceverete
risposta all'indirizzo da voi indicato $email<br><br>...Ritorno automatico alla Home page in corso....</font></p><meta http-equiv='refresh' content='$delay; url=$url'><p align='center'> </p>
</body>
";
echo "<br><br>\n";exit;
}// <---------- fine ----------> //
?>[/php]
-
Devi usare le librerie gd per generare l'immagine con un testo casuale, tempo fa ne avevo sviluppato uno, non è niente di complicato, basilarmente generi una combinazione random alfanumerica, la salvi nella sessione e la fai stampare da una pagina .php con le gd. Dopo il form il controllo lo fai tra il campo del form e la variabile nella sessione.
-
Di captcha non me ne intendo per nulla, però conoscendolo credo che il reCaptcha sia una soluzione utile al tuo caso.
Lo puoi trovare qui: http://recaptcha.net/plugins/php/