- Home
- Categorie
- Coding e Sistemistica
- PHP
- Problemi delle mail inviate dal form
-
@Tommy09 said:
Ciao, scusa la domanda forse banale, ma dove la recuperi la variabile "marca"? Non manca un:
$marca=$_POST["marca"];
Scusa, ho dato una lettura veloce, magari fai in altro modo...
Ciao,
la variabile era recuperata, ma non funzionava lo stesso. Ora ho trovato la soluzione, ma non è del tutto corretta. Volevo fare in modo che la validazione dei campi e l'invio della mail avvenissero sulla stessa pagina ma non riesco. Hai qualche suggerimento?
Grazie!
-
Se vuoi fare una cosa simile laa soluzione secondo me è nell'utilizzo di AJAX come hai tentato di fare nell'esempio precedente. Percui, compili il form, con JS fai un controllo sui dati inseriti, qualora sia tutto inserito secondo le tue regole mandi tutto al file PHP con ajax e invii l'email. Il funzionamento perciò è come quello che hai adottato te, non ho guardato ne testato il funzionamento del codice, in ogni caso cos'è che non funziona? perchè la soluzione "non è del tutto corretta?"
-
@Tommy09 said:
Se vuoi fare una cosa simile laa soluzione secondo me è nell'utilizzo di AJAX come hai tentato di fare nell'esempio precedente. Percui, compili il form, con JS fai un controllo sui dati inseriti, qualora sia tutto inserito secondo le tue regole mandi tutto al file PHP con ajax e invii l'email. Il funzionamento perciò è come quello che hai adottato te, non ho guardato ne testato il funzionamento del codice, in ogni caso cos'è che non funziona? perchè la soluzione "non è del tutto corretta?"
Praticamente il problema è che devo per forza inserire un "action" nel form, se no non funziona. Non è del tutto corretta perchè (aggiungendo l'action) ovviamente mi riporta alla pagina PHP.
La cosa strana è che solo se inserisco la select MARCA non funziona come vorrei, mentre il form "normale" per richiesta informazioni sì. Non riesco a capire dove sia il problema (oltretutto io non so un granchè di php)
-
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?