Codice PHP:
<?php
session_start();
/* dimensioni */
$x = 200; //larghezza
$y = 80; //altezza
$image = imagecreatetruecolor($x, $y); //creo l'immagine
$color = array();
$color[] = imagecolorallocate($image, 255, 0, 0);
$color[] = imagecolorallocate($image, 0, 255, 0);
$color[] = imagecolorallocate($image, 0, 0, 255);
$color[] = imagecolorallocate($image, 255, 255, 0);
$color[] = imagecolorallocate($image, 255, 0, 255);
$color[] = imagecolorallocate($image, 255, 255, 255);
$color[] = imagecolorallocate($image, 0, 255, 255);
$font = array();
$font[] = "captcha/font/arial.ttf";
$font[] = "captcha/font/abbeyroad_regular.ttf";
$font[] = "captcha/font/roman_sd_regular.ttf";
$font[] = "captcha/font/elephants_in_cherry_trees_normal.ttf";
$black = imagecolorallocate($image, 0, 0, 0);
imagefill($image, 0, 0, $black);
add_noise($image, 170, 1, $x, $y); //aggiungo il disturbo
$_SESSION['CAPTCHA'] = strtolower(getString()); //genero la nuova stringa
for($i = 0;$i < strlen($_SESSION['CAPTCHA']); $i++) {
/* per ogni lettera applico impostazioni diverse (dimensione, angolo, colore, font) */
imagettftext(
$image, //immagine
20 + rand(0, 6), //dimensione carattere
rand(-35, 35), //angolo di rotazione
($i+1)*26, //offset sulla x
45+ rand(0, 4), //offset sulla y
$color[rand(0, count($color)-1)], //colore
$font[rand(0, count($font)-1)], //carattere
$_SESSION['CAPTCHA'][$i] //lettera da stampare
);
}
header("Content-type: image/png");
imagepng($image);
imagedestroy($image);
function getString() {
$str = base64_encode(time());
$str = str_replace("=", "", $str); //elimino gli =
$str = str_shuffle($str);
return substr($str, 0, 6);
}
function add_noise($image, $difficoult, $figure, $x, $y) {
if($figure == 1)
$difficoult *= 15; //i punti devono essere più delle linee per generare un disturbo significativo
for($i = 0; $i < $difficoult; $i++) {
$color = imagecolorallocate($image, rand(0,255), rand(0,255), rand(0,255));
$p = rand(0, 10);
$x1 = rand($p, rand($x - $p, $x-1));
$x2 = rand($p, rand($x - $p, $x-1));
$y1 = rand($p, rand($y - $p, $y-1));
$y2 = rand($p, rand($y - $p, $y-1));
switch($figure) {
case 1:
imageline($image, $x1, $y1, $x1, $y1, $color);
break;
default:
imageline($image, $x1, $y1, $x2, $y2, $color);
break;
}
}
}
?>
Codice PHP:
<?php
// controllo sul parametro d'invio
if(isset($_POST['submit']) && (trim($_POST['submit']) == "Partecipa"))
{
// controllo sul formato dell'email
if((!isset($_POST['email'])) || (!eregi("^([a-z0-9\._-]+)(@[a-z0-9.-]+)(\.{1}[a-z]{2,4})$", $_POST['email'])))
{
echo "Attenzione, formato email non valido.";
}else{
// se i parametri sono corretti popoliamo il database
$email = $_POST['email'];
$username = $_POST['username'];
$code = rand(100000, 999999);
// ma prima controlliamo che l' username e l'email non siano già presenti includiamo il file di configurazione
@include "config.php";
$ctrl_username = @mysql_query("SELECT id FROM iscrizioni WHERE username='$username'") or die (mysql_error());
if(@mysql_num_rows($ctrl_username)>0)
{
echo "L'username risulta già registrato.";
}else{
$ctrl_email = @mysql_query("SELECT id FROM iscrizioni WHERE email='$email'") or die (mysql_error());
if(@mysql_num_rows($ctrl_email)>2)
{
echo "Errore: il numero massimo di utenti iscritti con lo stesso indirizzo e-mail è 2.Limite superato.";
}else{
// query d'inserimento
if(@mysql_query("INSERT INTO iscrizioni (email, codiceconferma, username) VALUES('$email','$code','$username')") or die (mysql_error()))
{
// messaggio di conferma
echo "Conferma l'iscrizione tramite la mail che ti abbiamo inviato.<br>Se non trovi l'e-mail controlla anche nella cartella di posta indesiderata: alcuni provider considerano inavvertitamente le nostre lettere come non attendibili.";
// email per la conferma
// intestazioni
$headers = "From: $admin_email\nreply-To: noreply\r\n";
$subject = "Conferma la tua iscrizione.";
$header .= "X-Mailer: Il nostro Php\n";
// costruiamo le intestazioni specifiche per il formato HTML
$headers .= "MIME-Version: 1.0\n";
$headers .= "Content-Type: text/html; charset=\"utf-8\"\n";
$headers .= "Content-Transfer-Encoding: 7bit\n\n";
//costruiamo il messaggio in formato HTML
//corpo del messaggio
$messaggio = "Ti ringraziamo per la tua iscrizione.<br>
La tua email è: ".$email." <br>
Il tuo username è: ".$username." <br>
Il tuo codice di conferma è: ".$code." <br>
Per confemare vai alla pagina <p><a href =http://partypoints.altervista.org/conferma.php>http://partypoints.altervista.org/conferma.php</a></p> e inserisci i dati per l'autenticazione.<br>
*************** <br>
QUESTA È SOLO UNA NOTIFICA AUTOMATICA: EVENTUALI RISPOSTE NON VERRANNO LETTE.
SE VUOI CONTATTARCI PUOI FARLO ALL'INDIRIZZO nintendo3dsteam@yahoo.it O TRAMITE IL NOSTRO FORUM.<br>
*************** <br>";
// invio dell'email
@mail($email, stripslashes($subject),stripslashes($messaggio),$headers);
}
}
}
}
}else{
// form per l'iscrizione
?>
<h1>Modulo di partecipazione alla gara mensile:</h1>
<form action="<?php echo $_SERVER['PHP_SELF']; ?>" method="post">
<SPAN STYLE="color: red"><b>E-mail:</b></SPAN><br>
<input name="email" type="text" size="30"><br>
<SPAN STYLE="color: red"><b>Username Forumcommunity : </b></SPAN>(se non disponi di un ForumcommunityUsername clicca <a href="http://mynintendo3ds.forumcommunity.net/?act=Reg">qui</a>)<br>
<input name="username" type="text" size="30"><br>
<input name="submit" type="submit" value="Partecipa"><br>
Cliccando sul pulsante "Partecipa" dichiari di aver letto e accettato il <a href="http://partypoints.altervista.org/regolamento.html">Regolamento ufficiale del servizio.</a>
</form><br>
<DIV ALIGN="center"><img src="http://partypoints.altervista.org/immagini/iscrizione.png"><br></DIV>
<DIV ALIGN="center"><a href="http://partypoints.altervista.org/index.html">Vai alla home</a></DIV>
<?
}
?>