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.046
150
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
590
25
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.046
150
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 https://www.mrw.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 = "[email protected]"; // 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:
Discussioni simili
Autore Titolo Forum Risposte Data
U PHP bottone per invio mail o ritorno al form PHP 15
B [PHP] Invio mail automatico dopo compilazione form - db PHP 25
paloppa [PHP] Invio mail da form dubbio PHP 17
F Form mail php errore invio PHP 5
I form invio mail HTML e CSS 1
Francesco Polese Errore form invio mail+php PHP 22
P invio mail da form con dati php PHP 7
W Estrapolare un indirizzo mail di un form durante l'invio PHP 5
I invio mail da form PHP 1
Il Matta Problema Form e invio mail PHP 2
B Problema form mail per invio doppio allegato PHP 1
A Problema orario invio mail per form PHP 4
S php form invio mail PHP 3
L Form con invio mail PHP 1
E Form invio e-mail con allegato PHP 51
E Form invio e-mail con allegato PHP 0
N Form invio Mail con Allegato PHP 2
C problema invio mail con form php PHP 0
T form per invio mail PHP 38
R [Flash] redirect dopo invio form mail Flash 4
S form invio mail con foto o logo PHP 46
P Form per invio mail PHP 27
G Invio Dati Form ad E-Mail PHP 1
P aggiunta modulo invio allegati a form mail PHP 15
S Problema invio mail da form Classic ASP 6
Z form invio mail, scelta destinatari PHP 0
S form invio mail con opzioni PHP 3
B Invio tramite form mail di più allegati PHP 0
T Invio mail da form contatti con annesso file attachment Classic ASP 1
L Problemi con invio form via mail Classic ASP 3
F script asp invio mail con dati di un form Classic ASP 3
S problemi invio dati da un form a e.mail HTML e CSS 1
K [php]form invio dati PHP 0
G form invio multiplo con checkbox PHP 12
nivaria.achinet Intercettare form solo dopo invio Javascript 1
M Unire 2 funzioni per l'invio di un form e con l'apertura di un div Javascript 0
M Form: come tornare ai campi già compilati dopo invio PHP 1
G Invio form con PHP PHP 3
S Invio email da form PHP 8
A [PHP] Invio automatico dati da form PHP 6
Cosina [PHP] Preservare i campi del form solo se l'invio non ha successo PHP 5
R [javascript]Form invio preventivo Javascript 0
G [PHP] FORM INVIO VALORI A QUERY CON TRE CONDIZIONI PHP 2
S Problema invio form php/html PHP 3
Samuele Ronzani [PHP] Validazione e invio campi form. PHP 7
Matteo Lorenzon [PHP][WORDPRESS] Form in Wordpress, creazione PDF con dati del form ed invio tramite email WordPress 1
Marco_88 Passare un valore prima dell'invio del form Ajax 0
P PHP mailer invio form con 2 allegati. PHP 3
G Form invio multiplo da database PHP 0
C Come posso integrare il bottone "paga adesso" di paypal e un form php per invio dati? PHP 1

Discussioni simili