come invare una mail di conferma prenotazione

salve ho craato un modulo per effetture prenotazioni contenente i seguenti campi:

nome, cognome, sesso indirizzo e- mal, ora vorrei che (ramite script php)

una volta inseriti tutti i dati nel form e premuto il tasto invia all' utente venisse spedita  una mail di conferme di avvenuta prenotzione con il seguente messaggio:

prenotazione n° x

effettuata da:mario bianchi alle ore 18:00

sesso: maschile

accompagnatore: massimo rossi,( oppure se nn c'e l'accopagnatore , nessuno)

come posso realizzare ciò?, per far questo devo creare un database?

potete darmi qualche suggerimento?

inviato 8 anni fa
mela81
X 0 X

Fai una ricechina sul forum mettendo come campo di ricerca la parola mail o email e vedrai quanti esempi :)

risposto 8 anni fa
Marco Grazia
X 0 X

 :)ok, grazie se ho qualche problema  ti faccio sapere

risposto 8 anni fa
mela81
X 0 X

ho visto i forum precedenti uno in particolare consiggliava di usare il programma phpmailer, secondo te può essere utile al mio caso ppure no?, se la risposta è affermativa come faccio acollegarlo allo script precedentemente creato? io comunque sulla base dei forum visti ho creato questo script, puo andare bene per fare quello che ho spiegato nel post precedente?, oppure devo aggiungre qualcosa? 

eccolo:

<?php 
$nome = $_POST['nome'];
$et = $_POST['anni'];
$sesso = $_POST['sesso'];
$email = $_POST['email'];
# controllo campi compilati
if (( $nome == "" ) || ( $et == "" ) || ( $sesso == "" ) || ( $email == "" )) {
echo "<h3>Errore!</h3><br>Deve compilare tutti i campi dal form per continuare<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}
# controllo campo et compilato con numeri
if (!is_numeric($et)) {
echo "<h3>Errore!</h3><br>Deve inserire la sua et?<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}

# controllo campo email - email valida
if (!ereg("@",$email)){
echo "<h3>Errore!</h3><br>Deve inserire una email valida<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}

# inizio elaborazione dei dati



$MailToAddress = "info@tuamail.com"; // qua va messa l'email del sito 
$MailFromAddress = $Email; 
$MailSubject = "Utente che chiede...."; //questo esce nell'oggetto della mail 
if (!$MailFromAddress) { 
$MailFromAddress = "info@web.com"; //qua può essere ripetuta l'email o parte di essa, è da chi la riceviamo 
} 
$Header = "Utente che desidera informazioni..."; //questa parte esce nell'intestazione dell'email 
$Footer = "_______________________________________"; // questa riga esce alla fine dell'email 
?> 
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Risultato e-mail</title> 
<style type="text/css"> 
<!-- 
.Stile1 {color: #FF0000} 
.Stile2 { 
font-family: "Trebuchet MS"; 
font-size: 12px; 
color: #FF0000; 
font-weight: bold; 
} 
.stile3 { 
font-family: Verdana, Arial, Helvetica, sans-serif; 
font-size: 9px; 
color: #FF9900; 
font-weight: bold; 
} 
.CORPOMAIL { 
font-family: Arial, Helvetica, sans-serif; 
font-size: 12px; 
color: #000099; 
} 
.stile4 { 
font-family: Verdana, Arial, Helvetica, sans-serif; 
font-size: 11px; 
color: #000000; 
font-weight: bold; 
} 
--> 
</style> 
</head> 

<body> 
<table width="100%" border="0"> 
<tr> 
<td align="center"><h2>Risultato della Mail </h2></td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td class="CORPOMAIL"> <? 
if (!is_array($HTTP_POST_VARS)) 
return; 
reset($HTTP_POST_VARS); 
while(list($key, $val) = each($HTTP_POST_VARS)) { 
$GLOBALS[$key] = $val; 
$val=stripslashes($val); 
echo "<b><font color= #000000>$key</font></b> = $val 
"; 
$Message .= "$key = $val\n"; 
} 

if ($Header) { 
$Message = $Header."\n\n".$Message; 
} 

if ($Footer) { 
$Message .= "\n\n".$Footer; 
} 

mail( "$MailToAddress", "$MailSubject", "$Message", "From: $MailFromAddress"); 
?></td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td align="center" class="stile4">L'e-mail è stata inviata correttamente, sarete ricontattati al più presto.</td> 
</tr> 
<tr> 
<td align="center" class="stile4"> </td> 
</tr> 
<tr> 
<td align="center" class="stile4">Grazie.</td> 
</tr> 
</table> 
</body> 
</html>
risposto 8 anni fa
mela81
X 0 X

Allora come prima cosa, verificare quello che si inserisce dentro una textbox in questo modo è da criminali (scusa ma stasera mi gira questa parola in testa).

$nome = $_POST['nome'];
$et = $_POST['anni'];
$sesso = $_POST['sesso'];
$email = $_POST['email'];

fatto così chiunque può inviare tramite la tua email ciò che vuole.

Quindi modifica un poco il sistema, per esempio:

$nome = htmlspecialchars($_POST['nome']);
$et = htmlspecialchars($_POST['anni']);
$sesso = htmlspecialchars($_POST['sesso']);
$email = htmlspecialchars($_POST['email']);

che non sarà perfetto, ma almeno è un inizio, se poi mi dici che hai installato su PHP 5.2.x allora usi filter_input che è sicuramente meglio.

Comunque sia, una volta controllati che i campi non siano vuoti o errati costruisci l'email e la invii.

$MailToAddress = "info@tuamail.com"; // qua va messa l'email del sito 
$MailFromAddress = $Email; 
$MailSubject = "Utente che chiede...."; //questo esce nell'oggetto della mail 
if (!$MailFromAddress) { 
$MailFromAddress = "info@web.com"; //qua può essere ripetuta l'email o parte di essa, è da chi la riceviamo 
} 
$Header = "Utente che desidera informazioni..."; //questa parte esce nell'intestazione dell'email 
$Footer = "_______________________________________"; // questa riga esce alla fine dell'email
<? 
if (!is_array($_SERVER) 
return; 
reset($_SERVER); 
while(list($key, $val) = each($_SERVER)) { 
$GLOBALS[$key] = $val; 
$val=stripslashes($val); 
echo "<strong>$key</strong> = $val 
"; 
$Message .= "$key = $val\n"; 
} 

if ($Header) { 
$Message = $Header."\n\n".$Message; 
} 

if ($Footer) { 
$Message .= "\n\n".$Footer; 
} 

mail( "$MailToAddress", "$MailSubject", "$Message", "From: $MailFromAddress"); 
?>

nota che ho modificato la chiamata alla variabile di sistema $HTTP_POST_VARS in $_SERVER, quella roba si usava 8 anni fa e oggi non è più in uso.

Lo script così com'è dovrebbe funzionare, tieni presente che è una cosa un po' sempliciotta, facci sapere come va che lo si modifica via via.

risposto 8 anni fa
Marco Grazia
X 0 X

ok grazie.

un chiarimento che cos'è il filter input? non ne ho mai sentito parlare.

ho provato ma c'è qualcosa che nn va ossia quando inserisco tutti i dati in maniera corretta mi dovrebbe uscire la scritta: l'email è stata inviata correttamente sarete ricontattati al piu presto, grazie invece tale scitta nn esce più perchè?

ecco il codice:

<?php
$nome = htmlspecialchars($_POST['nome']);
$et = htmlspecialchars($_POST['anni']);
$sesso = htmlspecialchars($_POST['sesso']);
$email = htmlspecialchars($_POST['email']);
if (( $nome == "" ) || ( $et == "" ) || ( $sesso == "" ) || ( $email == "" )) {
echo "<h3>Errore!</h3><br>Deve compilare tutti i campi dal form per continuare<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}
# controllo campo et compilato con numeri
if (!is_numeric($et)) {
echo "<h3>Errore!</h3><br>Deve inserire la sua et?<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}

# controllo campo email - email valida
if (!ereg("@",$email)){
echo "<h3>Errore!</h3><br>Deve inserire una email valida<br>
La preghiamo di <A HREF=\"javascript:history.go(-1)\">tornare indietro e correggere</A>. Grazie";
exit;
}

# inizio elaborazione dei dati


$MailToAddress = "info@tuamail.com"; // qua va messa l'email del sito 
$MailFromAddress = $Email; 
$MailSubject = "Utente che chiede...."; //questo esce nell'oggetto della mail 
if (!$MailFromAddress) { 
$MailFromAddress = "info@web.com"; //qua può essere ripetuta l'email o parte di essa, è da chi la riceviamo 
} 
$Header = "Utente che desidera informazioni..."; //questa parte esce nell'intestazione dell'email 
$Footer = "_______________________________________"; // questa riga esce alla fine dell'email 



<? 
if (!is_array($_SERVER) 
return; 
reset($_SERVER); 
while(list($key, $val) = each($_SERVER)) { 
$GLOBALS[$key] = $val; 
$val=stripslashes($val); 
echo "<strong>$key</strong> = $val 
"; 
$Message .= "$key = $val\n"; 
} 

if ($Header) { 
$Message = $Header."\n\n".$Message; 
} 

if ($Footer) { 
$Message .= "\n\n".$Footer; 
} 

mail( "$MailToAddress", "$MailSubject", "$Message", "From: $MailFromAddress"); 
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd"> 
<html xmlns="http://www.w3.org/1999/xhtml"> 
<head> 
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" /> 
<title>Risultato e-mail</title> 
<style type="text/css"> 
<!-- 
.Stile1 {color: #FF0000} 
.Stile2 { 
font-family: "Trebuchet MS"; 
font-size: 12px; 
color: #FF0000; 
font-weight: bold; 
} 
.stile3 { 
font-family: Verdana, Arial, Helvetica, sans-serif; 
font-size: 9px; 
color: #FF9900; 
font-weight: bold; 
} 
.CORPOMAIL { 
font-family: Arial, Helvetica, sans-serif; 
font-size: 12px; 
color: #000099; 
} 
.stile4 { 
font-family: Verdana, Arial, Helvetica, sans-serif; 
font-size: 11px; 
color: #000000; 
font-weight: bold; 
} 
--> 
</style> 
</head> 

<body> 
<table width="100%" border="0"> 
<tr> 
<td align="center"><h2>Risultato della Mail </h2></td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td class="CORPOMAIL"> <? 
if (!is_array($_SERVER)) 
return; 
reset($HTTP_POST_VARS); 
while(list($key, $val) = each($_SERVER)) { 
$GLOBALS[$key] = $val; 
$val=stripslashes($val); 
echo "<b><font color= #000000>$key</font></b> = $val 
"; 
$Message .= "$key = $val\n"; 
} 

if ($Header) { 
$Message = $Header."\n\n".$Message; 
} 

if ($Footer) { 
$Message .= "\n\n".$Footer; 
} 

mail( "$MailToAddress", "$MailSubject", "$Message", "From: $MailFromAddress"); 
?></td> 
</tr> 
<tr> 
<td> </td> 
</tr> 
<tr> 
<td align="center" class="stile4">L'e-mail è stata inviata correttamente, sarete ricontattati al più presto.</td> 
</tr> 
<tr> 
<td align="center" class="stile4"> </td> 
</tr> 
<tr> 
<td align="center" class="stile4">Grazie.</td> 
</tr> 
</table> 
</body> 
</html>
risposto 8 anni fa
mela81
X 0 X

Filter input ho scritto un tutorial se lo leggi capisci, ma si può usare solo dalla versione del php 5.2.x in poi.

Per l'altro errore non so, prova a seguire il flusso dati, magari si interrompe in qualche punto.

risposto 8 anni fa
Marco Grazia
X 0 X

 praticamente ho notato che è solo questa parte di codice che nn va

<? 
if (!is_array($_SERVER) 
return; 
reset($_SERVER); 
while(list($key, $val) = each($_SERVER)) { 
$GLOBALS[$key] = $val; 
$val=stripslashes($val); 
echo "<strong>$key</strong> = $val 
"; 
$Message .= "$key = $val\n"; 
} 

if ($Header) { 
$Message = $Header."\n\n".$Message; 
} 

if ($Footer) { 
$Message .= "\n\n".$Footer; 
} 

mail( "$MailToAddress", "$MailSubject", "$Message", "From: $MailFromAddress"); 
?>

 che significa prova a seguire i flusso dei dati?

p.s mi indichi il link del tutorial?

risposto 8 anni fa
mela81
X 0 X

problema risolto, ma mi rimane un dubbio, tu hai detto in un precedente post che conviene fare cosi:

$nome = htmlspecialchars($_POST['nome']);
$et = htmlspecialchars($_POST['anni']);
$sesso = htmlspecialchars($_POST['sesso']);
$email = htmlspecialchars($_POST['email']);

 ho provato ad inserire nel campo nome wi e mi dice lo stesso che i dati sono corretti perchè?

risposto 8 anni fa
mela81
X 0 X
problema risolto,

Bene! Ma se ci dici come, rimarrà a imperitura memoria per tutti quelli che verranno :D

ma mi rimane un dubbio, tu hai detto in un precedente post che conviene fare cosi:

$nome = htmlspecialchars($_POST['nome']);
$et = htmlspecialchars($_POST['anni']);
$sesso = htmlspecialchars($_POST['sesso']);
$email = htmlspecialchars($_POST['email']);

 ho provato ad inserire nel campo nome wi e mi dice lo stesso che i dati sono corretti perchè?

wi? Comunque non capisco cosa intendi per i dati sono comunque corretti, htmlspecialchars() traduce alcuni caratteri in entità evitando che si possa inserire codice "attivo", ovvero codice che inizi ad esempio con <script> o peggio <iframe> e dentro un url a siti malevoli, è il modo classico di alcuni per inviare virus e quant'altro nelle email. E' in pratica modo un po' semplice ma per lo più efficace di controllare cosa viene inviato dal form.

Ovvio che se i dati inseriti sono corretti tutto viene passato normalmente.

il tutorial sui filtri

risposto 8 anni fa
Marco Grazia
X 0 X

grazie per i chiarimenti e per il link.

p.s. riguardo al campo nome intendevo dire che posso scrivere qualunque cosa anche un numero, ma nnmi appare il messaggio di errore come per l'età perchè?, leggendo nel forum ho letto che per imessaggi di errore e meglio usare al posto di php javascript mi puoi dire come devo impostarlo nell'html

risposto 8 anni fa
mela81
X 0 X

E' normale che non ti consideri errore mettere un numero; un numero non vuole dire errore ma solo un numero appunto :) il controllo di validità lo devi realizzare tu a posteriori magari con le regex, e qui mi fermo perché non sono il mio forte, usare javascript non è diverso che usare php, magari più rapido per l'utente perché non deve aspettare la risposta del server ma tutto avviene sul client, cioè, sul suo browser. Ma è potenzialmente pericoloso, perché basta disabilitare il "motore" di javascript per inabilitare qualsiasi controllo.

Per farlo devi richiamare delle routine in javascript che controllno ciò che hai immesso nel form, ad esempio:

<script type='text/javascript'>
function controllaCampi(quale) {
if (quale.value == '') {
alert("capo vuoto!");
return false;
}
return true;
}
</script>

.....

<form action='........eccetera'>
<input type='text' name='nome' value='' />
<input type='submit' name='invio' value='inviami' onclick='controllaCampi('nome'); return true' />
</form>

verifica che il campo "nome" non sia vuoto.

risposto 8 anni fa
Marco Grazia
X 0 X

ciao scusami se mi sono fatta attendere ma ho cercato di aggiustare il mio form con il codice javascript e ci sono in parte anche riuscita mi è rimasto un problema per il sesso nel senso che per il campo sesso ho creato un menù a tendina con due possibili opzioni maschio o femmina, vorreiche uscisse anche qui la finetra

"nn hai inserito il sesso" come devo fare?

p.s. ho un pò di perplessità con il codice php:

<?php
$nome = htmlspecialchars($_POST['nome']);
$et = htmlspecialchars($_POST['anni']);
$sesso = htmlspecialchars($_POST['sesso']);
$email = htmlspecialchars($_POST['email']);

$MailToAddress = "info@tuamail.com"; // qua va messa l'email del sito 
$MailFromAddress = $Email; 
$MailSubject = "Utente che chiede...."; //questo esce nell'oggetto della mail 
if (!$MailFromAddress) { 
$MailFromAddress = "info@web.com"; //qua può essere ripetuta l'email o parte di essa, è da chi la riceviamo 
} 
$Header = "Utente che desidera informazioni..."; //questa parte esce nell'intestazione dell'email 
$Footer = "_______________________________________"; // questa riga esce alla fine dell'email 
?>

la mia perplessità è questa, siccome questo è un modulo di registrazione per molti utenti

questo codice è adatto oppure no? comfigurando il php.ini nn va nel senso che  nn mi arriva nessun messaggio. perchè?

risposto 8 anni fa
mela81
X 0 X

Francamente non capisco cosa devi configurare nel php.ini comunque, quando crei un campo select nello xhtml, devi farlo così:

<select id='genere' name='genere'>
<option value='maschio'>Maschietto</option>
<option value='femmina'>Femminuccia</option>
<option value='indefinito' selected='selected'>Io non mi schiero!</option>
</select>

cioè devi dare il nome al campo o sia con php che con il javascript non sapresti a che campo votarti :) poi devi abilitare anche il campo value perché solo da lì puoi prendere il dato predefinito.

Io ho aggiunto una spiritosaggine come terzo campo per farti notare che siccome siamo o maschi o femmine, in questo caso bastavano due campi di tipo radio button, piuttosto che un'intera select, a meno che la tua iscrizine non preveda altre cose :)

In questo caso mi è servito per farti vedere come si preseleziona un campo della select.

Qui trovi l'intero html 4.01 tradotto in italiano dal buon Michele Diodati http://www.diodati.org/w3c/html401/interact/forms.html#edef-OPTION è ottimo per conoscere tutti gli attributi degli elementi.

Ah, per verificare quale campo è stato scelto dall'utente in fase di registrazione devi fare così:

Javascript

sesso = document.form[0].genere.value;

oppure usando l'ID invece che il nome: (io lo uso sempre perché più pratico ma non è obbligatorio usarlo.)

sesso = document.getElementByID('genere').value;

o se è l'unico campo select di tutto il form:

sesso = document.getElementsByTagName('select').value;

in PHP

$sesso = $_POST['genere'];

ecco vedi tu.

risposto 8 anni fa
Marco Grazia
modificato 8 anni fa
X 0 X

ho provato come dici tu ma nn va.

allora ho messo questo codice

var sesso = false;
       for (i=0;sesso<sesso.length;i++) {
             sesso |= sesso[i].checked;
            };
        
if (!sesso) {
          alert("seleziona un campo!");
         sesso[0].focus();
         return false;
         
} 

ma va fino ad un certo punto, cioè quando nn seleziono il campo copare la finetra di alert ma tale finestra compare anche se seleziono il campo e quando premo il tasto ok va direttamente alla pagina php, senza che abbia compilato il campo della mail perchè mi accade ciò?

p.s. il campo select l'ho tasformato  in radio come hai consigliato tu

risposto 8 anni fa
mela81
X 0 X

Nel radiobutton hai inserito dei campi value?

risposto 8 anni fa
Marco Grazia
X 0 X

se ti riferisci a value nell'html ho messo: value="M" e value="F" per il resto il codive java script è uguale al post precedente,

come lo devo modificare?

risposto 8 anni fa
mela81
X 0 X

ciao auguri di buone feste fatte!,  :) ho risolto il problema con il codice javascript, ma permane quello con il php e nn so come risolverlo  mi puoi aiutare?

risposto 8 anni fa
mela81
X 0 X
Effettua l'accesso o registrati per rispondere a questa domanda