In rosso le correzioni e in blu i commenti.
codice:
/* Indica sempre <?php e non semplicemente <?, perché altrimenti lo script non è portabile se il file php.ini è configurato per non accettare l'abbreviazione del "tag" di apertura PHP. */
<?php
/* Tutta questa parte e quella di eliminazione degli spazi puoi raggrupparle in una unica. Inoltre usa anche stripslashes() perché se la direttiva magic_quotes_gpc nel file php.ini è abilitata, PHP ti aggiunge un backslash davanti ad apici singoli e doppi, oltre che ai backslash stessi. Questo perché quei caratteri sono particolari per PHP e quindi te li escapizza. Ti commento questo codice e subito dopo ti presento la versione "compatta". */
/* --- Inizio parte commentata ---
$nome=$_POST['nome'];
$cognome=$_POST['cognome'];
$email=$_POST['email'];
$telefono=$_POST['telefono'];
$partenza=$_POST['partenza'];
$richiesta=$_POST['richiesta'];
$messaggio=$_POST['campotesto'];
#eliminazione degli spazi
$nome=trim($nome);
$cognome=trim($cognome);
$email=trim($email);
$telefono=trim($telefono);
$partenza=trim($partenza);
$richiesta=trim($richiesta);
$messaggio=trim($messaggio);
--- Fine parte commentata --- */
$nome=trim(stripslashes($_POST['nome']));
$cognome=trim(stripslashes($_POST['cognome']));
$email=trim(stripslashes($_POST['email']));
$telefono=trim(stripslashes($_POST['telefono']));
$partenza=trim(stripslashes($_POST['partenza']));
$richiesta=trim(stripslashes($_POST['richiesta']));
$messaggio=trim(stripslashes($_POST['campotesto']));
#controllo la lunghezza dei campi nome , cognome etc..
$lungh_nome=strlen($nome);
$lungh_cognome=strlen($cognome);
$lungh_partenza=strlen($partenza);
$lungh_richiesta=strlen($richiesta);
$lungh_messaggio=strlen($messaggio);
#controllo la mail, imposto una variabile che poi confronto con email
/* Questa espressione regolare non è il massimo per controllare il formato di un indirizzo mail. */
/* $pattern="^[^@ ]+@[^@ ]+\.[^@ \.]+$"; */
/* Questa è più completa. */
$pattern = "/^[a-z0-9][_\.a-z0-9-]+@([a-z0-9][a-z0-9-]+\.)+([a-z]{2,})$/i";
#controllo che i campi siano superiori a 3 caratteri e non vuoti
if (($nome == "") || ($cognome == "")|| ($email == "")|| ($telefono == "")||($partenza== "")|| ($richiesta== "")) {
echo '<div id="msg" class="msgSENT">Compila tutti i campi! <p id="close">[click to close]</p></div>';
}
else if (($lungh_nome <= 3) or ($lungh_cognome <= 3) or ($lungh_partenza <= 3) or ($lungh_richiesta <=3)or($lungh_messaggio <= 3) )
{
echo '<div id="msg" class="msgKO">I campi devono contenere almeno 3 caratteri! <p id="close">[click to close]</p></div>';
}
/* Qui ti conviene usare preg_match() piuttosto che ereg(): sia perché è leggermente meno dispendioso di risorse, sia perché è più portabile supportando la sintassi PERL delle espressioni regolari e anche perché ti permette di usare il modificatore "i" nell'espressione (per non distinguere tra maiuscole e minuscole), mentre invece con ereg() non puoi, a meno che non usi la corrispondente funzione eregi(). Tra l'altro, l'espressione regolare che ti ho scritto prima è fatta apposta per preg_match() (perché ha i delimitatori tipici di PERL, ovvero "/"). Inoltre, quando stampi delle stringhe con echo, usa gli apici singoli per racchiuderle e concatena le variabili usando il punto (vedi le istruzioni echo qui sotto). Questo perché PHP risparmia risorse (gli apici singoli sono diversi dai doppi: questi ultimi costringono PHP a un parsing di tutta la stringa alla ricerca di variabili da interpretare). Inoltre, in quel modo puoi usare gli apici doppi per racchiudere i valori degli attributi HTML dei tag. */
/* else if(!ereg($pattern,$email)) */
else if (!preg_match($pattern,$email))
{
echo '<div id="msg" class="msgKO">"'.$email.'"non è una email valida! <p id="close">[click to close]</p></div>';
}
else{
/* Arriviamo alla stampa dei valori. Come vedi $messaggio viene stampato passandolo alla funzione nl2br(), che quindi manterrà i ritorni a capo trasformandoli in tag
. */
echo '<div id="msg" class="msgKO">Il tuo nome è [b]'.$nome.'
Il tuo cognome è '.$cognome.'
Il tuo telefono è '.$telefono.'
La tua email è '.$email.'
lingua di partenza '.$partenza.'
lingua richiesta'.$richiesta.'
Il tuo commento è '.nl2br($messaggio).'
<p id="close">[click to close]</p></div>';
}
?>
Spero di non aver commesso errori, ma l'ho corretto in fretta...al limite fammi sapere.