Form per invio mail

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Ho provato a corregerla (il tuo file l'ho visto dopo) e ora va!
Mi sono inviata una mail ed è arrivata, però senza mittente.
La tua invece non è arrivata.
 

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
ciao
trovato l'errore, ho mi ero dimenticato io o nel tuo copy/paste era saltato

la riga 95 è la seguente

/preparo delle variabili chi mi possono servire

era saltato un slash, correggi in

//preparo delle variabili chi mi possono servire

oppure tira via completamente la riga (ocio a non tirar via altro) e riraricare e provare
Questo errore era già stato segnalato nel post numero 13. Ragazzi, leggete bene i 3D per evitare di allungare inutilmente le discussioni :)
 

aphexx

Nuovo Utente
5 Ott 2010
14
0
0
VE
ciao borgo,

premettendo che di php non so nulla, se volessi aggiungere allo script che hai fornito a pinkbetta un ulteriore controllo nel quale mi accerto che l'utente abbia preso visione dell'informativa privacy, cosa dovrei modificare/aggiungere?
Grazie per l'aiuto. Michele
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
nella parte html (prima del pulsante di submit devi inserire
HTML:
accetto bala...bla..bla...
<input name="privacy" type="checkbox" value="ok">
nella parte php
PHP:
<?php
//......quello che viene prima
$messaggio=$_POST['messaggio'];
$privacy=$_POST['privacy'];
//e li verifico
if($privacy){$privacy !="ok"){//se diverso da ok privacy non spuntata
	$ok_ko.="<br>NON hai accettato la privacy";//o il testo che preferisci
}
//ecc.. tutto quello che viene dopo....
?>
 

aphexx

Nuovo Utente
5 Ott 2010
14
0
0
VE
Ti ringrazio, pare funzionare bene.
Ho solo dovuto fare una piccola modifica alla parte IF in quanto Dreamweaver mi dava errore, mentre così pare andar bene.
PHP:
if($privacy !="ok"){//se diverso da ok privacy non spuntata
$ok_ko.="<br>NON hai accettato la privacy";//o il testo che preferisci
Un'ultima domanda, vorrei fare una modifica allo script in modo che l'oggetto della mail che viene ricevuta non sia un generico "richiesta di informazioni" ma quello inserito nell'apposito campo del form.
Ho provato a fare le modifiche del caso prendendo spunto dal tuo codice, ora però non so come fare in modo che l'oggetto venga effettivamente incorporato nella mail che ricevo.
Ti posto il codice da me modificato qui di seguito:

Grazie ancora!

PHP:
<?php
//qui scrivi le funzioni di controllo di quanto immesso nel form
function valida_email($em){//verifica che l'indirizzo email sia sintatticamente corretto
    $em=filter_var($em, FILTER_SANITIZE_EMAIL);
    if(!filter_var($em, FILTER_VALIDATE_EMAIL)){
        return "*#*";//indirizzo non corretto
    }else{
        return $em;//indirizzo corretto
    }
}
function valida_nome($no){
    //suddivido per "didattica", ma poi puoi semplificare
    $no=trim($no);//tolgo gli spazi iniziali e finali, si vuota se messo solo spazi
    $no=strip_tags($no);//tolgo tutti i tag html
    if($no==""){
        return "*#*";//non è stato inserito il nome o solo spazi
    }else{
        return $no;//il nome non dovrebbe essere pericoloso e contiene qualcosa
    }
}
function valida_oggetto($ob){
    //suddivido per "didattica", ma poi puoi semplificare
    $ob=trim($ob);//tolgo gli spazi iniziali e finali, si vuota se messo solo spazi
    $ob=strip_tags($ob);//tolgo tutti i tag html
    if($ob==""){
        return "*#*";//non è stato inserito il nome o solo spazi
    }else{
        return $ob;//il nome non dovrebbe essere pericoloso e contiene qualcosa
    }
}
function valida_testo($tx){
    $tx=trim($tx);
    $tx=strip_tags($tx, "<br> <p>");
    //in questo modo tolgo tutti i tag esclusi qulle di fine liena e paragrafo
    //nel caso l'inio sia in formato html
    if($tx==""){
        return "*#*";//non è stato inserito alcun testo o solo spazi
    }else{
        return $tx;//il testo non dovrebbe essere pericoloso e contiene qualcosa
    }
}
//fine funzioni controllo sono il minimo del fattibile
//qui inizio a raccogliere i dati inviati dal form
if(isset($_POST['invio'])){//è stato premuto il tasto di submit
    //attenta i nomi dentro $_POST devono corrispondere esattamente ai nomi dei campi del form
    //metto a stinga vuota una variabile che mi servirà in seguito
    $ok_ko.="";
    $nome=$_POST['realname'];
    $email=$_POST['email'];
    $subject=$_POST['subject'];
    $messaggio=$_POST['messaggio'];
    $privacy=$_POST['privacy']; 
    //e li verifico
    $nome=valida_nome($nome);
    if($nome=="*#*"){//il nome è vuoto
        $ok_ko.="<br>NON hai inserito il tuo nome e cognome";
    }
    $email=valida_email($email);
    if($email=="*#*"){//il nome è vuoto
        $ok_ko.="<br>NON hai inserito l'indirizzo email o errato";
    }
    $subject=valida_oggetto($subject);
    if($subject=="*#*"){//il nome è vuoto
        $ok_ko.="<br>NON hai inserito l'oggetto del messaggio o errato";
    }
    $messaggio=valida_testo($messaggio);
    if($messaggio=="*#*"){//il nome è vuoto
        $ok_ko.="<br>NON hai inserito il testo";
    }
    if($privacy !="ok"){//se diverso da ok privacy non spuntata
    $ok_ko.="<br>NON hai accettato la privacy";//o il testo che preferisci
    }
    //fine verifiche se la variabile $ok_ko è rimasta vuota tutto OK
    //quindi posso spedire
    if($ok_ko==""){
        
        //preparo delle variabili chi mi possono servire
        $destinatario="pippopippo@gmail.com";//qui devi mettere il tuo indirizzo
        $inviata_il="email inviata il ".date("d/m/y",time())."<br>";//questa è per bellezza
        $inviata_da="email da: ".$email."<hr>";
        $oggetto= "richiesta informazioni";//o altro messaggio
        //nel messaggio concateno alcune variabili ottenendo il testo da inviare
        $testo=$inviata_il.$inviata_da.nl2br($messaggio);
        //invio in formato html
        $headers  = "MIME-Version: 1.0" . "\r\n";
        $headers .= "Content-type: text/html; charset=iso-8859-1" . "\r\n";
        $headers .= "From: $nome <$email>" . "\r\n";
        //e qui ti uso la nativa mail() poi visto che l'appetito vien mengiando....
        //prima o poi passere alla classe maillerphp
        //tento l'invio
        if(mail($destinatario,$oggetto,$testo,$headers)){
            $ok_ko.="<br>Grazie per avermi contattato<br>ti risponder&ograve; quanto prima";
        }else{
            $ok_ko.="<br>c'&eacute; stato un errore di trasmissione: riprova pi&ugrave; tardi";
        }  
        
    }
    //mostri l'avviso se OK o KO
    echo $ok_ko;
    //e ritorni al form pulito
    echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
    //se fai due pagine al posto di ".htmlspecialchars($_SERVER['PHP_SELF'])."
    //il nome della pagina del form es. URL=contattami.htm
    //se vuoi aumentare o diminuire il tempo di permanenza dell'avviso
    //modifica il valore di content='4; es. content='2;
}
?> 
<div id="container">
<form method='post' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>'>
<p> Nome e Cognome:</p>
<input type=text name="realname">
<p>Email:</p>
<input type=text name="email">
<p>Oggetto:</p>
<input type=text name="subject">
<p>Messaggio:</p>
<textarea name="messaggio" cols="40" rows="5"></textarea>
<br>
<br>
<input name="privacy" type="checkbox" value="ok">
<br />
<input type="Submit" value="invio" name="invio">
</form>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
intanto una cosa, visto che sei un neofita:
se non erro hai fatto la funzione valida_oggetto($ob), se noti è uguale alla valida_nome($no), uno dei motivi per cui si usano le funzioni (o le classi) è per non ripetere sempre lo stesso codice, quini puoi toglerla e puoi scrivere al posto di

PHP:
    $subject=valida_oggetto($subject); 
    if($subject=="*#*"){//il nome è vuoto 
        $ok_ko.="<br>NON hai inserito l'oggetto del messaggio o errato"; 
    }
questo



PHP:
    $subject=valida_nome($subject); 
    if($subject=="*#*"){//il nome è vuoto 
        $ok_ko.="<br>NON hai inserito l'oggetto del messaggio o errato"; 
    }
fatto questo alla riga di invio

if(mail($destinatario,$oggetto,$testo,$headers)){

sostituisci $oggetto con $subject (o viceversa)

p.s.
nella parte if avevo fatto degli errori per il copia/incolla :(
 
Ultima modifica:

aphexx

Nuovo Utente
5 Ott 2010
14
0
0
VE
Ciao, funziona alla perfezione!

Il passo successivo sarà quello di implementare i controlli a livello dei singoli box ma per quello mi par di capire che sia necessario ricorrere al javascript...

Grazie mille ancora. Michele
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
se li metti per bellezza ok, altrimenti sono meglio i controlli lato server (vedi quelli che hai in php). i controlli js sono facilmente aggirabili