Form per invio mail

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 :)
 
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
 
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....
?>
 
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>
 
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:
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
 
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
 

Discussioni simili