Form per invio mail

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Ciao, lo so che è una cosa già affrontata ampiamente, ma non sapendo nulla di php non capisco come realizzare un semplice form da mettere nel mio sito per far inviare agli utenti delle mail.

Per adesso ho realizzato il form

<form method='post' action='messaggio.php'>
<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">
</form>

(Non so se è fatto bene o no)

Poi ho creato una pagina in php e l'ho chiamata "messaggio.php".

Ma ora che ci scrivo dentro questa pagina?

Grazie!
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
il form molto(issimo) spartano mi sembra ok
per quello che devi scrivere nella pag php... domani ti invio qualcosa.
ma prima ed intanto leggiti tra gli articoli di mrwm sez. php come usare la classe maillerphp, così poi non devi usare la funzione nativa mail() che funzia quando vuole
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
comincio col dire che, data la semplicità del form è meglio che il form e lo script di invio risiedano nella stessa pagina.
per fare questo o chiami la pagina col nome che ha messo nell'action del form oppure
nell'achtion scrivi
<form method='post' action='<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>'>
in questo modo se cambi nome della pagina non devi correggere anche l'action.
ricordati comunque che:
se fai due pagine:
la pag del form può essere .htm es contattami.htm o html
la pag di invio .php (come hai messo)
se tutto in una pagina
deve essere .php es contattami.php

se fai tutto in una pagina puoi usare questo schema

PHP:
<html>
<body>
<?php
//parte riservata all'invio
?>
<!-- parte riservata al form -->
</body>
</html>
nella parte riservata all'invio non ci dovrà essere solo la funzione dell'invio (sia che tu utilizzi la nativa mail() o
la classe maillerphp) ma anche un controllo e verifica di quanto l'utente ti invia/cerca di inviare.
questo perchè penso che ti darebbe fastidio che ti inviassero uno script che ti infetta il pc.
ecco la parte php
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=sytrip_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[''])){//è 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($emessaggio);
	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==""){
		
		//alla prossima puntata la parte di invio
		
	}
	//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;
}
?>
intanto questo, poi con calma il resto

p.s.
verific che non abbia fatto errori di digitazione
 

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Ho provato a copiare quello che mi hai scritto cambiando la parte iniziale del form ma devo aver sbagliato qualcosa visto che quando vado sulla pagina mail.php mi da una pagina con le scritte in php e poi mi si chiude.

(ho lasciato i commenti per ricordarmi come funziona)

<?php
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=sytrip_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[''])){//è 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($emessaggio);
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==""){

//alla prossima puntata la parte di invio

}
//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;
}
?>
<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">
</form>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
ecco il resto, scrivilo allinterno delle righe
if($ok_ko==""){ e } al posto di //alla prossima puntata la parte di invio
PHP:
		//preparo delle variabili chi mi possono servire
		$destinatiario="mio_indirizzo@mio_dominio.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 PinkBetta";//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";
		}
poi, se vuoi dopo aver corretto l'indirizzo del destinatario, puoi caricare nel tuo sito la pagina così come è e provarla
inviandoti una email (se da errori avvisami dicendomi quali)
lasco a te l'onere ed il divertimento di abbellire il form con i css
p.s.
se nel form vuoi aggiunge il campo oggetto, ricordati che devi prelevarlo con $_POST e verificarlo (puoi usare la funzione
valida_nome aggiungere l'if di controllo e togliere la riga
$oggetto = "richiesta informazioni a PinkBetta";//o altro messaggio

dimenticavo una cvosa importante: se non funzia non mandarmi....
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
ecco alcuni errori dovuto all'arteriosclerosi

1. dentro la function valida_nome($no){ ho scritto sytrp_tag correggi in strip_tag

2. alla riga if(isset($_POST[''])){ mi sono dimenticato di mettere il nome del submit correggi
in if(isset($_POST['invio'])){ , ma tu ti sei dimenticata di mettere il nome sul pulsante
<input type="Submit" value="Invia"> correggi in
<input type="Submit" value="Invia" name="invio">

3. dalla riga $ok_ko="<br>NON hai inserito il tuo nome e cognome"; mi sono dimenticato (su tutte) il concatenamento
correggi in mettendo il punto prima di = su tutte
$ok_ko.="<br>NON hai inserito il tuo nome e cognome";

4. alla riga $messaggio=valida_testo($emessaggio); ho lasciato (maledetto copy/paste) una e in più correggi in
$messaggio=valida_testo($messaggio);

5. alla riga $inviata_il="emei inviata il ":date("")."<br>";//questa è per bellezza mi è scappato un : correggi in
$inviata_il="emei inviata il ".date("")."<br>";//questa è per bellezza

non capisco cosa vuoi dire con

 

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Ho corretto ma mi da sempre il solito errore, non mi fa vedere la pagina mail.php ti ho messo il mio sito perfarti vedere l'errore se clicchi sul mail.

Non ti preoccupare stai già facendo anche troppo!:)
 

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Senza commenti me lo da alla chiusura di questo

if($ok_ko==""){

/preparo delle variabili chi mi possono servire
$destinatiario="mailmia@bbbkb.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 PinkBetta";//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";
}

}
 
Ultima modifica:

Eliox

Utente Attivo
25 Feb 2005
4.390
3
0
Attenta, questo non è un commento:
PHP:
/preparo delle variabili chi mi possono servire
è un errore:
PHP:
//preparo delle variabili chi mi possono servire
:)
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao si avevo visto che da errore, ma vorrei sapere quale è la riga 95 dello script che hai caricato.
le righe sono diverse tra il tuo ed il mio script originale, per quello sarebbe bene che tu mi postassi la riga ed eventualmente quelle vicine
 

PinkBetta

Utente Attivo
21 Lug 2009
1.414
0
0
www.pinkbetta.com
Le righe dov'è l'errore sono circa quelle che ho scritto sopra.

Mi dispiace dare così tanta noia ma non sapendo nulla di php non capisco dove possa essere l'errore.
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
strano che non funzi (a parte mail() è quello che uso io), ma forse ho fatto qualche "piccolo" errore nel semplificarlo.
fai una cosa zippa la pagina che hai fatto e postala se mi dai anche il tuo email la provo in linea che po te la rimando
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.041
146
63
PR
www.borgo-italia.it
ciao
attenta che non avevi corrtto il pulsante di subimit
nel pulsante di submit ci viole il name

<input type="Submit" value="invio" name="invio">

altrimenti come fa php a sapere che è stato premuto?