- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi delle mail inviate dal form
-
Prova a cambiare questa:
<input type="submit" class="btn btn-blue btn-effect" id="invia" name="invia" value="INVIA" />
con questa:
<input type="button" class="btn btn-blue btn-effect" id="invia" name="invia" value="INVIA" />
-
@Shad said:
Prova a cambiare questa:
<input type="submit" class="btn btn-blue btn-effect" id="invia" name="invia" value="INVIA" />
con questa:
<input type="button" class="btn btn-blue btn-effect" id="invia" name="invia" value="INVIA" />
Cambiando il codice che mi hai detto tu nella mail non compaiono i campi compilati... cosa devo modificare?
Ti metto di nuovo i codici:
$(document).ready(function(){ $("#invia").click(function(){ //Recuperiamo tutte le variabili var valid = ''; var isr = ' <p>É richiesto'; var name = $("#nome").val(); var marca = $("#marca option:selected").val(); var mail = $("#email").val(); var subject = $("#oggetto").val(); var messaggio = $("#messaggio").val(); //Eseguiamo una serie di controlli if (name.length<1) { valid += isr+' un nome valido</p>'; } if (!mail.match(/^([a-z0-9._-]+@[a-z0-9._-]+\.[a-z]{2,4}$)/i)) { valid += isr+' un indirizzo e-mail valido</p>'; } if (marca.length<1) { valid += isr+' una marca valida</p>'; } if (subject.length<1) { valid += isr+' un oggetto valido</p>'; } //Se i controlli non vengono superati, appare il messaggio di errore. if (valid!='') { $("#risposta").fadeIn("slow"); $("#risposta").html("<p><b>Errore:</b></p>"+valid); $("#risposta").css("background-color","#FFFFF"); $("#risposta").css("color","rgba(116,0,1,1.00)"); } //Se i controlli vengono superati, compare un messaggio di invio in corso else { var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&messaggio=' + encodeURIComponent(messaggio); $("#risposta").css("display", "block"); $("#risposta").css("background-color","#FFFFF"); $("#risposta").css("color"," rgba(66,66,66,1.00)"); $("#risposta").html("<p>Invio del messaggio in corso..</p>"); $("#risposta").fadeIn("slow"); setTimeout("send('"+datastr+"')",2000); } return false; }); }); //Creazione della funzione di invio. Si baserà sul nostro file php "mail.php". function send(datastr){ $.ajax({ type: "POST", url: "mail.php", data: datastr, cache: false, success: function(html){ $("#risposta").fadeIn("slow"); $("#risposta").html(html); $("#risposta").css("background-color","#FFFFF"); $("#risposta").css("color"," rgba(107,130,39,1.00)"); setTimeout('$("#risposta").fadeOut("slow")',2000); } }); }
[PHP]<?php
//Recuperiamo tutte le variabili
$mail = $_POST['email'];
$name = $_POST['nome'];
$subject = $_POST['oggetto'];
$marca = $_POST['marca'];
$messaggio = $_POST['messaggio'];
$ip = $_SERVER['REMOTE_ADDR'];//Qui andrà inserito il tuo indirizzo e-mail
$to = "[email protected]";//Creazione del mesaggio da inviare
$message = "<p> <strong>Nome:</strong> ".$name." </p><p><strong>Mail:</strong> ".$mail." </p> <p><strong>Oggetto:</strong> ".$subject." </p><p><strong>Marca:</strong> ".$marca." </p>";
$message .= "<p> <strong>Messaggio:</strong> ".$messaggio."<br /><br /></p>";
$message .= "<p>IP: ".$ip."<br /></p>";$headers = "From: $mail \n";
$headers .= "Reply-To: $mail \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n";//Se l'e-mail viene spedita correttamente, compare un messaggio di avvenuto invio
if(mail($to, $subject,$message, $headers)){
echo "<p>Messaggio inviato con successo!</p>";
}
//Altrimenti un messaggio di errore
else{
echo "<p>Ci sono stati degli errori nell'invio della e-mail. Riprova</p>";
}
?>[/PHP]
[HTML]<form id="formail" method="post" action="" name="formail">
<div id="risposta">
</div>
<div class="input-field">
<p>Nome:</p>
<input type="text" id="nome" class="form-control" name="nome" /><br />
</div>
<div class="input-field">
<p>Marca:</p>
<select id="marca" class="form-control" name="marca">
<option value="FIAT">FIAT</option>
<option value="LANCIA">LANCIA</option>
<option value="ABART">ABART</option>
<option value="ALFA">ALFA</option>
</select>
</div>
<div class="input-field">
<p>E-mail:</p>
<input type="email" id="email" class="form-control" name="email"/><br />
</div>
<div class="input-field">
<p>Oggetto:</p>
<input type="text" id="oggetto" class="form-control" name="oggetto"/><br />
</div>
<div class="input-field">
<p>Messaggio:</p>
<textarea id="messaggio" class="form-control" name="messaggio" rows="5" cols="4"></textarea><br />
</div>
<input type="button" class="btn btn-blue btn-effect" id="invia" name="invia" value="INVIA" />
</form> [/HTML]
-
Togli l'action del form e per inviare il form non usare un campo INPUT.. Ad esempio se usi Bootstrap (sembra quello dal nome delle classi) utilizza il tag <a>.
-
@MiWebDesign said:
Togli l'action del form e per inviare il form non usare un campo INPUT.. Ad esempio se usi Bootstrap (sembra quello dal nome delle classi) utilizza il tag <a>.
Riesci a farmi un esempio di come modificheresti il campo input?
Grazie mille!
-
Per trasformare il tuo campo input in un tag <a> scrivi così:
[HTML]
<a class="btn btn-blue btn-effect" id="invia">INVIA</a>
[/HTML]In questo modo non sei vincolato dal FORM in quanto non è un INPUT SUBMIT.
-
@MiWebDesign said:
Per trasformare il tuo campo input in un tag <a> scrivi così:
[HTML]
<a class="btn btn-blue btn-effect" id="invia">INVIA</a>
[/HTML]In questo modo non sei vincolato dal FORM in quanto non è un INPUT SUBMIT.
Ora verifica tutto correttamente sulla pagina, ma quando ricevo la mail i campi non sono compilati..solo il messaggio compare..cosa può essere?
-
Beh... Prima mandi variabili di nome: name,mail,subject tramite AJAX
** var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&messaggio=' + encodeURIComponent(messaggio);
E poi vorresti recuperle con i nomi:
$mail = $_POST['email'];
$name = $_POST['nome'];
$subject = $_POST['oggetto'];**
Presta maggiore attenzione...il nome della variabile che cerchi di recuperare tramite PHP è quella contenuta dentro POST e non quella preceduta dal simbolo del dollaro.
-
@MiWebDesign said:
Beh... Prima mandi variabili di nome: name,mail,subject tramite AJAX
** var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&messaggio=' + encodeURIComponent(messaggio);
E poi vorresti recuperle con i nomi:
$mail = $_POST['email'];
$name = $_POST['nome'];
$subject = $_POST['oggetto'];**
Presta maggiore attenzione...il nome della variabile che cerchi di recuperare tramite PHP è quella contenuta dentro POST e non quella preceduta dal simbolo del dollaro.Ok, ora vedo di nuovo e-mail e nome..ma l'oggetto e la marca no..come posso fare? cosa continuo a sbagliare?
Grazie! Ho poca conoscenza di php e java purtroppo...
-
Beh leggendo il tuo codice jQuery con cui fai la chiamata AJAX la marca neanche l'hai messa è normale che non te la recupera il PHP
Non voglio postarti il codice già pronto altrimenti non capisci dove sbagli e non potrai migliorarti, ti dico ciò che devi fare e perchè sbagli:
Vedi questa stringa? Serve a passare al file PHP le variabili che hai recuperato dai campi del FORM:
**var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&messaggio=' + encodeURIComponent(messaggio);
**La marca non l'hai messa, quindi inserisci anche quella variabile.. Sembra un casino ma non devi leggerlo per come è scritto cerca di tradurlo in italiano
"Creo la variabile datastr, gli assegno il nome alla variabile POST che recupererò tramite PHP e il valore della variabile Javascript.. E aggiungo una variabile mail, la cui assegno il valore della variabile Javascript mail... Ecc..."
I nomi delle variabili che ti troverai in PHP sono quelli messi tra gli apici, quindi in questo caso avrai:
$_POST["name"] - $_POST["mail"] - $_POST["subject"] ... ecc
-
@MiWebDesign said:
Beh leggendo il tuo codice jQuery con cui fai la chiamata AJAX la marca neanche l'hai messa è normale che non te la recupera il PHP
Non voglio postarti il codice già pronto altrimenti non capisci dove sbagli e non potrai migliorarti, ti dico ciò che devi fare e perchè sbagli:
Vedi questa stringa? Serve a passare al file PHP le variabili che hai recuperato dai campi del FORM:
**var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&messaggio=' + encodeURIComponent(messaggio);
**La marca non l'hai messa, quindi inserisci anche quella variabile.. Sembra un casino ma non devi leggerlo per come è scritto cerca di tradurlo in italiano
"Creo la variabile datastr, gli assegno il nome alla variabile POST che recupererò tramite PHP e il valore della variabile Javascript.. E aggiungo una variabile mail, la cui assegno il valore della variabile Javascript mail... Ecc..."
I nomi delle variabili che ti troverai in PHP sono quelli messi tra gli apici, quindi in questo caso avrai:
$_POST["name"] - $_POST["mail"] - $_POST["subject"] ... ecc
Grazie, infatti preferisco capire dove è l'errore.
Ho inserito questo codice:
**var datastr ='name=' + name + '&mail=' + mail + '&subject=' + subject + '&marca=' + marca + '&messaggio=' + encodeURIComponent(messaggio); **ma ora non mi compare più neanche "invio in corso".
Con questo codice invece, funzionava ma mancavano nella mail i campi compilati della marca e dell'oggetto:** var isr = ' <p>É richiesto';
var nome = $("#nome").val();
var marca = $("#marca option:selected").val();
var email = $("#email").val();
var subject = $("#subject").val();
var messaggio = $("#messaggio").val();
**Cosa sbaglio?