form per invio mail

temino

Utente Attivo
22 Gen 2011
47
0
0
Salve a tutti, probabilmente quella che sto per fare è una domanda fatta più e più volte, ma nonostante svariate prove non sono ancora riuscito a trovare una soluzione.
Premetto che ho già letto gli altri topic nel forum senza grandi risultati.
Il mio problema è inserire nel mio sito web (con index in html) una form che permetta l'invio di email.
Ho trovato qualcosa di utile ma i risultati sono stati poco soddisfacenti, per questo chiedo aiuto a voi.
Il problema successivo che mi verrebbe da pensare è il reindirizzamento, cioè mi chiedevo se dopo l'invio della mail fosse possibile tornare alla pagina precedente, magari facendo uscire una finestrella sotto il form mail che indicasse l'invio o meno del messaggio di posta elettronica.

Spero che qualcuno mi sappia dare una mano perchè sono 10 giorni che navigo per i forum e faccio prove do ogni genere... risultati: 0 !!

Vi ringrazio in anticipo
 
ciao
non se usi la funzione mail() o qualche classe che invia
prova in questa maniera nella pag php che invia l'email, ipotizzo che tu utilizzi mail()
PHP:
<?php
//tutto quello che c'è prima....
if(mail($indirizzo, $oggetto, $message,$header)){
	echo "messaggio inviato";
	echo "<meta http-equiv='Refresh' content='3; URL=pagina_a_cui_vuoi_tornare.php'>";
}else{
	echo "errore di trasmissione";
	echo "<meta http-equiv='Refresh' content='3; URL=pagina_a_cui_vuoi_tornare.php'>";
}
//ecc....
?>
il content='3 sono i secondi di attesa prima di essere rinviato alla pag che vuoi, puoi mettere da zero in su
 
ciao e grazie per avermi risposto. il codice che mi hai dato mi sembra buono, ora però mi manca tutto il resto...

Ne avrò trovato di 10 tipi in questi giorni, ma alla fine ho cancellato tutto e ho deciso di rifarlo da capoo.. quindi m manca il codice da inserire nell'index.html (per la creazione delle text ecc) e il codice .php per l'invio delle mail...
 
la discussione che mi hai linkato è stata favolosa!!!
finalmente ho il mio form funzionante!!!

Volevo farti una domanda...

quando esegue questo pezzetto di codice (è uno dei tanti)

if($nome=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito il tuo nome e cognome";

esce sopra il form il messaggio "NON hai inserito il tuo nome e cognome"
ma rimane visibile solo per pochi secondi, poi avviene il refresh della pagina e quindi scompare.

la mia domanda è: come posso fare a bloccare la pagina evitando quindi il refresh e dando modo all'utente di sapere l'esito dell'invio o per permettergli di legger eper bene la descrizione dell'errore che ha commesso??
 
ciao
scusa non ho capito bene la tua domanda
comunque se l'utente fa uno o più errori appare la lista degli errori e l'email non parte
es.
NON hai inserito l'indirizzo email o errato
NON hai inserito il tuo nome e cognome​
se invece il form è stato compilato in modo giusto appare il messaggio
e se non ci sono errori di trasmissione
Grazie per avermi contattato
ti risponderò quanto prima​
se vuoi che il messaggio sia più visibile, allunghi il suo tempo di permanenza aumentando il valore di content
es. da
echo "<meta http-equiv='Refresh' content='4; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
a
echo "<meta http-equiv='Refresh' content='6; URL=".htmlspecialchars($_SERVER['PHP_SELF'])."'>";
se vuoi aggiungere un ulteriore messaggio, in caso di errore di compilazione, puoi aggiungere
PHP:
<?php
//............
//fine verifiche se la variabile $ok_ko è rimasta vuota tutto OK
//quindi posso spedire
if($ok_ko==""){

//qui c'è tutta la parte di invio

}else{//**** parte da aggiungere
	$ok_ko .= "<br>l'email non verrà inviata";
}//***** parte da aggiungere
//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;
}
?>
per cui il messaggio di errore diventerà (es)

NON hai inserito l'indirizzo email o errato
NON hai inserito il tuo nome e cognome
l'email non verrà inviata​
 
GRAZIE 1000!!! sei stato gentilissimo... posto qui sotto il codice corretto della pagina "contatti.php" così magari potrà essere utile a qualcuno! =)

<html>
<body>
<?php
//parte riservata all'invio

//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_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'];
$messaggio=$_POST['messaggio'];
//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";
}
$messaggio=valida_testo($messaggio);
if($messaggio=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito il testo";
}
//fine verifiche se la variabile $ok_ko. è rimasta vuota tutto OK
//quindi posso spedire
if($ok_ko==""){

//preparo delle variabili chi mi possono servire
$destinatiario="tuoindirizzo@tuodominio.it";//qui devi mettere il tuo indirizzo
$inviata_il="emei inviata il ".date("")."<br>";//questa è per bellezza
$inviata_da="email da: ".$nome."<hr>";
$oggetto = "richiesta informazioni a ........";//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($destinatiario,$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;
}
?>

<!-- parte riservata al form -->
<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>Messaggio:</p>
<textarea name="messaggio" cols="40" rows="5"></textarea>
<br>
<br>
<input type="Submit" value="Invia" name="invio">
</form>
</body>
</html>
 
nuovo problema! XD

Ora mi trovo davanti ad un nuovo problema...

se apro la pagina dei contatti con explorer, alcuni box model css appaiono spostati... invece nell'index non ci sono problemi...

se uso google chrome non ho problemi..

a cosa può essere dovuto?
 
tornare ad una pagina diversa

ciao a tutti!
volevo fare una domanda riferita al form in php che è stato postato sopra.

dopo l' inserimento dei dati e aver cliccato sul tasto invio e dopo esseremi comparsa la scritta grazie per aver inviato l'email ecc.... vorrei che mi tornasse ad una pagina che decido io .
qualcuno può indicarmi come e dove devo cambiare il form.

grazie in anticipo
 
ciao
guarda chh te l'avevo scritto come andare ad un altra pagina

PHP:
//.....
//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; 
//....
oppure un urle a tuo piacere
es.
echo "<meta http-equiv='Refresh' content='4; URL=pagina_a_cui_voglio_andare.php'>";
 
si si infatti lo avevo visto allora credo che il problema fosse che la pagina che avevo messo era .html devo invece inserire un .php:) grazie mille per la risposta molto celere:)))
 
farti un'altra domanda .....

volendo iserire dei campi aggiuntivi tipo:
data, ora, e un capo con un menu a tendina con delle dicidure da scegliere in base alle esigenze ...sarebbe difficile realizzarlo?:)
grazie ancora per la pazienza
 
ciao
....che avevo messo era .html ....
non può essere htm, html, php, asp
tutto dipende da cosa vuoi fare nella pagina a cui riinvii, se ha contenuti dinamici deve essrere o php o asp, altrimenti htm o html
per il resto devi avere pazienza, sono via per alcuni gg
 
<?php
//parte riservata all'invio

//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_cognome($co){
//suddivido per "didattica", ma poi puoi semplificare
$co=trim($co);//tolgo gli spazi iniziali e finali, si vuota se messo solo spazi
$co=strip_tags($co);//tolgo tutti i tag html
if($co==""){
return "*#*";//non è stato inserito il nome o solo spazi
}else{
return $co;//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'];
$cognome=$POST['realcognome'];
$email=$_POST['email'];
$messaggio=$_POST['messaggio'];
//e li verifico
$nome=valida_nome($nome);
if($nome=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito il tuo nome";
}
$cognome=valida_cognome($cognome);
if($cognome=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito il tuo cognome";
}

$email=valida_email($email);
if($email=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito l'indirizzo email o errato";
}
$messaggio=valida_testo($messaggio);
if($messaggio=="*#*"){//il nome è vuoto
$ok_ko.="<br>NON hai inserito il testo";
}
//fine verifiche se la variabile $ok_ko. è rimasta vuota tutto OK
//quindi posso spedire
if($ok_ko==""){

//preparo delle variabili chi mi possono servire
$destinatiario="emailmia";//qui devi mettere il tuo indirizzo
//$inviata_il="emeil inviata il: ".$cognome."<br>";//questa è per bellezza
$inviata_da="email da: ".$nome.$cognome."<hr>";
//$inviata_da="email da: ".$cognome."<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($destinatiario,$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=index.html'>";
//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;
}
?>


Ho provato ad aggiungere solo il cognome ma devo aver sbagliato in qualcosa perche quando compilo tutto i campi e clicco su invia mi dice sempre cognome non iserito ....
magari tu capisci al volo dove ho errato...
grazie ciao
 
Ultima modifica:
ciao
non vedo il $_POST

$cognome=$_POST['cognome'];
o simile
poi non serviva che tu facessi un'altra funzione
function valida_cognome($co){.....
bastava che tu usassi la
function valida_nome($no){......
e per verificare
$cognome=valida_nome($cognome);
se noti le due funzioni sono uguali

poi
if($cognome=="*#*"){//il cognome è vuoto
$ok_ko.="<br>NON hai inserito il tuo cognome";
}
 
ciao!! grazie mille per quell'errore che non avevo visto non mi funzionava!grazie davvero!!:)

io vorrei aggiungerci un campo per inserire il numero di telefono.....se per te non è troppo disturbo potresti aiutarmi a crearlo...ho cercato in giro ma non ho trovato nulla...

cmq intanto ti ringrazio per utte le risposte e i problemi che mi hai risolto!
ciao
 
ciao
per l'input metti un campo come per nome es.
<input type=text name="telefono">
poi ricavi col solito
$tel=$_POST['telefono'];

PHP:
<?php
function valida_tel($t){
	//guarda che verifica OK numeri solo composti da cartteriri numerici
	//togli tutti gli spazi oltre all'eventuale primo e ultimo
	//trasforma il numere es da 049 33344 a 04933344
	$t=str_replace(" ","",$t);
	if($t=""){
		//c'erano solo spazi
		//se il numero di telefono non è obbligatorio togli return "*#*";
		return "*#*";//non corretto vuoto
		//e metti return "";
		//stesso discorso per gli altri return "*#*";
	}else{
		//qui verifiche la lunghezza del numero
		//eventualmente poi puoi variare la minima e la massima
		$lungo=strlen($t);
		if($lungo < 7 || $lungo > 15){
			return "*#*";//non corretto troppo corto o troppo lungo
		}else{
			$tel_valido="";
			//verifico carattere per carattere
			for($k=0; $k < $lungo; $k++){
				if($t[$k] < "0" || $t[$k] > "9"){
					//ho trovato un carattere che non è numerico esco senza proseguire
					return "*#*";//trovato carattere non corretto
				}else{
					//ricostruisco il numero
					$tel_valido.=$t[$k];
				}
			}//fine for
			//a questo punto il numero è formamlmente corretto
			//sarebbe da verificare che non sia es tutti 0
			return $tel_valido;
		}
	}
}//fine function
//se metti tutti i return ""; o ti restituisce un campo vuoto o il numero di telefono formalmente corretto
?>
poi se il numero è obbligatorio fai l'if
PHP:
<?php
//.....
$tel=valida_tel($t);
if($tel=="*#*"){//il numero è vuoto o non corretto
$ok_ko.="<br>NON hai inserito il tuo numero di telefono o non corretto"; 
} 
//....
?>
se invece il numero non è obbligatorio, quindi può essere vuoto (dopo aver modificato i vari return), basta che tu faccia
senza mettere l'if
PHP:
<?php
//....
$tel=valida_tel($t);
//...
?>

p.s.
la function è un po' arzigogolata, ma è quella che avevo usato tempo fa
 

Discussioni simili