Form invio mail html, con invio tramite file denominato invio.php

Simone Menegoni

Nuovo Utente
7 Ago 2015
6
0
1
Buonasera a tutti, sono Simone, appena iscritto in questo interessante Forum.
Ho seguito un vostro "tutorial" per compilare il file .php richiamato in oggetto.

Il sito in questione è www.sfitalia.com, e avrei una domanda da porvi...

Dal mio file index.html vi riporto parte del codice della sezione contatti:

Codice:
<!-- contatti -->
			<div class="wrapper style4">
				<article id="contatti" class="container 75%">
					<header>
						<h2>ENTRA IN CONTATTO CON NOI.</h2>
						<p>Siamo a tua disposizione per qualsiasi informazione.</p>
					</header>
					<div>
						<div class="row">
							<div class="12u">
								<form action="assets/invio.php" method="post">
									<div>
										<div class="row">
											<div class="6u 12u(mobile)">
												<input type="text" name="name" id="name" placeholder="Nome" />
											</div>
											<div class="6u 12u(mobile)">
												<input type="text" name="email" id="email" placeholder="Tua e-mail" />

Succede che quando l'utente invia il messaggio entra in azione il file invio.php che a quel punto mi permette di avvisare l'utente del corretto invio del messaggio ma soltanto facendo sparire il mio sito o al massimo in una nuova pagina bianca (e sul mio sito rimangono nel form ancora i dati inseriti dall'utente). Vorrei capire se utilizzando il sistema html+php io possa avvisare l'utente del corretto invio, direttamente nel mio file index.html (e magari cancellando i dati inseriti dallo stesso).

Riporto anche parte del codice invio.php:

PHP:
$message .= "Inviata da: " . trim(stripslashes($_POST["mail"])) . "\n"; //indirizzo e-mail che manda la mail, come si vede riprende l'id del campo destinato all'inserimento della mail del mittente
  
  $message .= "Nome: " . trim(stripslashes($_POST["name"])) . "\n"; //nome
  $message .= "E-mail: " . trim(stripslashes($_POST["email"])) . "\n"; //messaggio
  $message .= "Oggetto: " . trim(stripslashes($_POST["subject"])) . "\n"; //oggetto del messaggio
  $message .= "Testo: " . trim(stripslashes($_POST["message"])) . "\n"; //messaggio
  
  
  // invio mail
  mail($to, $subject, $message, $headers); // SE L'INOLTRO E' ANDATO A BUON FINE...
  
  echo "La mail è stata inviata con successo, sarai ricontattato a breve.";
  
  } else {// altrimenti
  echo "Compilare tutti i campi prima di inviare.";
  
  }
  
  ?>
</body>
</html>
Spero di essermi spiegato!
Grazie in anticipo
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
devi mettere un ritorno o manuale (link) o automatico alla index
es. ritorno automatico dopo 3 secondi (il tempo per leggere il messaggio)
PHP:
 //........
 } else {// altrimenti
  echo "Compilare tutti i campi prima di inviare.";
  
  }
  
?>
<script language="JavaScript" type="text/javascript">
<!--  
window.setTimeout ("location.href=('index.html')", 3000);
 -->
</script>	
</body>
</html>
poi vedo che scrivi "Compilare tutti i campi prima di inviare.", ma non vedo alcun controllo se i campi sono o meno compilati
in quel punto (nell'else) dovresti mettere "errore di trasmissione, riprova più tardi"
l'if else che hai fatto verifica solo che la funzione mail() abbia funzionato
 

Simone Menegoni

Nuovo Utente
7 Ago 2015
6
0
1
Grazie per la risposta celere!

Questa è una soluzione che potrebbe essere valida.
Mi chiedevo se fosse possibile, però, evitare proprio l'apertura di una nuova pagina bianca con il messaggio di conferma d'invio.

Graficamente non è proprio il massimo, anche perchè quando ritorno ad index.html nel form rimangono comunque tutti i dati, e anche quelli non è carino.

C'è un modo per dare la conferma direttamente sulla pagina index.html?
Basterebbe visualizzare nei pressi del form anche solo un "Messaggio inviato correttamente." e -se possibile- la cancellazione dei dati inseriti dall'utente...

Grazie in anticipo
 

n1k4r0

Utente Attivo
15 Nov 2012
135
0
0
l'unico modo di fare quello che chiedi è tramite ajax, con javascript intercetti il submit della form, mandi i dati ad invio.php tramite ajax e poi una volta terminato fai apparire la scritta di successo o errore dove vuoi nella pagina.
non conosco il tuo livello di programmazione javascript, jquery potrebbe aiutare e probabilmente ci sono tutorial in giro su come farlo ma se javascript non lo conosci forse la soluzione di borgo italia è la migliore anche se si ricarica la pagina :)
 

otto9due

Utente Attivo
22 Feb 2014
529
21
28
Un pò antiestetico ma puoi provare così :p

PHP:
 //........ 
 } else {// altrimenti 
echo '<script language="javascript">';
echo 'alert("messaggio che vuoi che appaia .. ")';
echo '</script>';
  }
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.042
146
63
PR
www.borgo-italia.it
ciao
fai tutto in una pagina
ti posto uno schema
PHP:
<?php
if(isset($_POST['invia'])){
	$mex="";
	if(trim($_POST['name'])==""){$mex .="non hai inserito il nome<br>";}
	if(!filter_var($_POST['email'], FILTER_VALIDATE_EMAIL)){$mex .="non hai inserito l'email o indirizzo non valido<br>";}
	//eccetera con gli altri controlli
	if($mex==""){//non ci sono errori
		$message .= "Inviata da: " . trim($_POST["mail"]) . "\n";
		//eccetera
		if(mail($to, $subject, $message, $headers)){
			$mex="email inviata con successo";
		}else{
			$mex="errore di trasmissione";
		}
	}
	echo "<div class='pinco'>$mex</div>";
?>
<script language="JavaScript" type="text/javascript">
<!--  
window.setTimeout ("location.href=('<?php echo $_SERVER['PHP_SELF'];?>')", 3000);
 -->
</script>    
<?php
}
?>
<!-- contatti -->
<!-- eccetera -->
<form action="<?php echo $_SERVER['PHP_SELF'];?>" method="post">
<!-- eccetera -->
<input type="submit" name="invia" value="invia">
</form>
<!-- eccetera -->
 

Simone Menegoni

Nuovo Utente
7 Ago 2015
6
0
1
Buongiorno a tutti! Essendo cocciuto di natura :quote: non ho voluto accontentarmi e ho provato grazie ai vostri consigli ed alla guida trovata sul vostro forum http://www.mrwebmaster.it/ajax/formmail-ajax_7270_2.html a risolvere. In parte ci sono riuscito, mi chiedevo 2 cose a questo punto. Riesco a ricevere correttamente il form dal sito alla mia mail, ma manca sempre l'oggetto, e non riesco a capire il perchè, dato che gli altri 3 campi invece li ricevo correttamente. In ultimo volevo chiedervi se si può ottimizzare questa cosa: una volta cliccato il pulsante "Invia mail" i dati inseriti nel form rimangono, così come il messaggio "Email inviata con successo!", c'è la possibilità (magari dopo 2/3 secondi) di cancellare i dati presenti nel form ed il messaggio di conferma dell'invio?
Posto la parte dei codici che potrebbero servirvi per capire quali sono gli errori che commetto:

<!-- contatti -->
<div class="wrapper style4">
<article id="contatti" class="container 75%">
<header>
<script type="text/javascript" src="email.js"></script>
<h2>ENTRA IN CONTATTO CON NOI.</h2>
<p>Siamo a tua disposizione per qualsiasi informazione.</p>
</header>
<div>
<div class="row">
<div class="12u">
<form name="modulo">
<div>
<div class="row">
<div class="6u 12u(mobile)">
<input type="text" name="nome" id="nome" placeholder="Nome" />
</div>
<div class="6u 12u(mobile)">
<input type="text" name="email" id="email" placeholder="Tua e-mail" />
</div>
</div>
<div class="row">
<div class="12u">
<input type="text" name="oggetto" id="oggetto" placeholder="Oggetto" />
</div>
</div>
<div class="row">
<div class="12u">
<textarea name="messaggio" id="messaggio" placeholder="Messaggio"></textarea>
</div>
</div>
<div class="row 200%">
<div class="12u">
<ul class="actions">
<li><input type="button" id="bottone" value="Invia mail" onclick="Richiesta(document.modulo.nome.value, document.modulo.email.value, document.modulo.oggetto.value, document.modulo.messaggio.value)" /></li>
<li><input type="reset" value="Cancella" class="alt" /></li>
</ul>
</div>
</div>
</div>

</form>
<div id="risultato"></div>
</div>
</div>
<div class="row">
<div class="12u">
<hr />
// JavaScript Document
var XMLHTTP;
function Richiesta(N, E, O, M)
{
var url;
url = "email.php?nome=" + N + "&email=" + E + "&oggetto=" + O + "&messaggio=" + M;
XMLHTTP = RicavaBrowser(CambioStato);
XMLHTTP.open("GET", url, true);
XMLHTTP.send(null);
}
function CambioStato()
{
if (XMLHTTP.readyState == 4)
{
var R = document.getElementById("risultato");
R.innerHTML = XMLHTTP.responseText;
}
}
function RicavaBrowser(QualeBrowser)
{
if (navigator.userAgent.indexOf("MSIE") != (-1))
{
var Classe = "Msxml2.XMLHTTP";
if (navigator.appVersion.indexOf("MSIE 5.5") != (-1));
{
Classe = "Microsoft.XMLHTTP";
}
try
{
OggettoXMLHTTP = new ActiveXObject(Classe);
OggettoXMLHTTP.onreadystatechange = QualeBrowser;
return OggettoXMLHTTP;
}
catch(e)
{
alert("Errore: l'ActiveX non verrà eseguito!");
}
}
else if (navigator.userAgent.indexOf("Mozilla") != (-1))
{
OggettoXMLHTTP = new XMLHttpRequest();
OggettoXMLHTTP.onload = QualeBrowser;
OggettoXMLHTTP.onerror = QualeBrowser;
return OggettoXMLHTTP;
}
else
{
alert("L'esempio non funziona con altri browser!");
}
}
<?
$destinatario = "info@sfitalia.com"; // Inserisci qui la tua mail
$nome = $_GET["nome"];
$email = $_GET["email"];
$oggetto = $_GET["oggetto"];
$messaggio = $_GET["messaggio"];
if ($nome == "" || $email == "" || $oggetto == "" || $messaggio == "")
{
echo "Tutti i campi sono obbligatori...";
}
else
{
mail($destinatario, "WEB - Messaggio da " . $nome, $messaggio, "From: $email");
echo "Email inviata con successo!";
}
?>
 
Ultima modifica:

Simone Menegoni

Nuovo Utente
7 Ago 2015
6
0
1
Il codice php l'ho modificato, effettivamente senza $oggetto non avrei mai potuto vederlo, ora però non vedo più l'indirizzo mail che l'utente inserisce nel form, come mai? :crying:

Invece non capisco questo
dimenticavo:
così ti da email inviata sia che invii che no
se l'utente non inserisce tutti i dati, la mail non parte ed il messaggio è "Tutti i campi sono obbligatori..." giusto?
--------------------------------------------------------
Un'ultima cosa, non ci sono possibilità di ottimizzare questo:
una volta cliccato il pulsante "Invia mail" i dati inseriti nel form rimangono, così come il messaggio "Email inviata con successo!", c'è la possibilità (magari dopo 2/3 secondi) di cancellare i dati presenti nel form ed il messaggio di conferma dell'invio?
Grazie di cuore a tutti per la pazienza :beer:
 
Ultima modifica: