RISOLTO Form email con php

Pubblicità

Stallone94

Nuovo Utente
Messaggi
7
Reazioni
0
Punteggio
22
Ciao raga, sto riscontrando un problema con un form creato per l'invio email. Praticamente l'email arriva ma i campi sono vuoti.
Questo è quello che mi ritrovo nell'email:
Nome:
Email:
Oggetto:
Messaggio:

Credo di sbagliare qualcosa, questo è il mio file html
Codice:
<form id="main-contact-form" name="contact-form" method="post" action="sendemail.php">
                <div class="row  wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="text" name="name"  class="form-control" placeholder="Name" required="required">
                    </div>
                  </div>
                  <div class="col-sm-6">
                    <div class="form-group">
                      <input type="email" name="email"   class="form-control" placeholder="Email Address" required="required">
                    </div>
                  </div>
                </div>
                <div class="form-group">
                  <input type="text" name="subject"  class="form-control" placeholder="Subject" required="required">
                </div>
                <div class="form-group">
                  <textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required="required"></textarea>
                </div>                        
                <div class="form-group">
                  <button type="submit" class="btn-submit">Send Now</button>
                </div>
              </form>
questo è il file php:
PHP:
<?php 

$to = "info@prova.com"; 

$subject = "Oggetto"; 

$body = "Contenuto del modulo:\n\n"; 
$body .= "Nome: " . trim(stripslashes($_POST['Nome'])) . "\n"; 
$body .= "email: " . trim(stripslashes($_POST['email'])) . "\n"; 
$body .= "Oggetto: " . trim(stripslashes($_POST['subject'])) . "\n"; 
$body .= "Messaggio: " . trim(stripslashes($_POST['message'])) . "\n"; 

$headers = "MIME-Version: 1.0";
$headers = "Content-type: text/plain; charset=iso-8859-1";
$headers = "From: {$name} <{$from}>";
$headers = "Reply-To: <{$from}>";
$headers = "Subject: {$subject}";
$headers = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $body, $headers) 

?>

Grazie a tutti!
 
Ultima modifica da un moderatore:
Ci sono un sacco di errori nel codice.
Lo script ti invia la mail vuota perchè non c'è un controllo in php che dice di eseguire la parte del codice php solo se viene premuto il tasto invia email, quindi ad esecuzione lato server della pagina che contiene campi vuoti, ti invia dati vuoti.

Gli errori erano :

Action del form : rimanda ad una pagina che non esiste.
Name input : E' sbagliato, nell'input lo chiami name, nel php lo chiami Nome.
Funzione Mail : Mancava il punto e virgola di fine istruzione.
Manca controllo :Ho inserito la funzione ISSET
ecc.. ecc..

Il codice corretto e funzionante è questo
Codice:
<form id="main-contact-form" name="contact-form" method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
<div class="row wow fadeInUp" data-wow-duration="1000ms" data-wow-delay="300ms">
<div class="col-sm-6">
<div class="form-group">
<input type="text" name="name" class="form-control" placeholder="Name" required="required">
</div>
</div>
<div class="col-sm-6">
<div class="form-group">
<input type="email" name="email" class="form-control" placeholder="Email Address" required="required">
</div>
</div>
</div>
<div class="form-group">
<input type="text" name="subject" class="form-control" placeholder="Subject" required="required">
</div>
<div class="form-group">
<textarea name="message" id="message" class="form-control" rows="4" placeholder="Enter your message" required="required"></textarea>
</div> 
<div class="form-group">
<input type="submit" class="btn-submit" name="invia_mail" value="Send Now">
</div>
</form>

PHP:
<?php 
//SE IL TASTO INVIA EMAIL E' STATO CLICCATO....
if(isset($_POST['invia_mail']))
{
    $to = "[COLOR=#333333]info@prova.com[/COLOR]";  
    $subject = "Oggetto";  
    
    $body = "Contenuto del modulo:\n\n"; 
    $body .= "Nome: " . trim(stripslashes($_POST['name'])) . "\n"; 
    $body .= "email: " . trim(stripslashes($_POST['email'])) . "\n"; 
    $body .= "Oggetto: " . trim(stripslashes($_POST['subject'])) . "\n"; 
    $body .= "Messaggio: " . trim(stripslashes($_POST['message'])) . "\n"; 

    $headers = "MIME-Version: 1.0";
    $headers .= "Content-type: text/plain; charset=iso-8859-1";
    $headers .= "From: {$name} <{$from}>";
    $headers .= "Reply-To: <{$from}>";
    $headers .= "Subject: {$subject}";
    $headers .= "X-Mailer: PHP/".phpversion();

    mail($to, $subject, $body, $headers); 
    Print "<h1> Email inviata correttamente a $to </h1>";
}
?>
P.s. non dimenticare di modificare info@prova.com con il tuo indirizzo email
 
Ultima modifica da un moderatore:
Ci sono un sacco di errori nel codice.
Lo script ti invia la mail vuota perchè non c'è un controllo in php che dice di eseguire la parte del codice php solo se viene premuto il tasto invia email, quindi ad esecuzione lato server della pagina che contiene campi vuoti, ti invia dati vuoti.

Gli errori erano :

Action del form : rimanda ad una pagina che non esiste.
Name input : E' sbagliato, nell'input lo chiami name, nel php lo chiami Nome.
Funzione Mail : Mancava il punto e virgola di fine istruzione.
Manca controllo :Ho inserito la funzione ISSET
ecc.. ecc..

Il codice corretto e funzionante è questo
(...)
P.s. non dimenticare di modificare info@prova.com con il tuo indirizzo email


Grazie Geca, prima che mi rispondessi ho modificato il codice php del file sendemail in questa maniera.
PHP:
$to   		= 'infor@prova.com';//r
$subject = 'Messaggio ';

$name       =   [MENTION=145791]TRiM[/MENTION](stripslashes($_POST['name'])); 
$from       =   [MENTION=145791]TRiM[/MENTION](stripslashes($_POST['email'])); 
$oggetto    =   [MENTION=145791]TRiM[/MENTION](stripslashes($_POST['subject'])); 
$testo   =   [MENTION=145791]TRiM[/MENTION](stripslashes($_POST['message'])); 

$message .= "Nome: $name \n";
$message .= "Email: $from \n";
$message .= "Oggetto: $oggetto \n";
$message .= "Messaggio: $testo \n";

$headers = "MIME-Version: 1.0";
$headers = "Content-type: text/plain; charset=iso-8859-1";
$headers = "From: {$name} <{$from}>";
$headers = "Reply-To: <{$from}>";
$headers = "Subject: {$subject}";
$headers = "X-Mailer: PHP/".phpversion();

mail($to, $subject, $message, $headers);

die;
ora mi sembra più pulito però il risultato è uguale. Ho notato che ho un file js che interagisce con l'invio dell'email. Questo è il codice:
Codice:
// Contact form
	var form = $('#main-contact-form');
	form.submit(function(event){
		event.preventDefault();
		var form_status = $('<div class="form_status"></div>');
		$.ajax({
			url: $(this).attr('action'),
			beforeSend: function(){
				form.prepend( form_status.html('<p><i class="fa fa-spinner fa-spin"></i> Email is sending...</p>').fadeIn() );
			}
		}).done(function(data){
			form_status.html('<p class="text-success">Thank you for contact us. As early as possible  we will contact you</p>').delay(3000).fadeOut();
		});
	});
Se cancello questo file, quando clicco su invia mi compare una pagina bianca mentre nell'email ho tutti i campi compilati. Quindi l'email mi arriva per bene ma ho questa pagina bianca che fa riferimento al file sendemail.php. Riesci a dirmi cosa devo modificare nel file js? Grazie ancora...
 
Ultima modifica da un moderatore:
Allora nel codice che hai postato all'inizio non c'era alcun codice javascript che veniva richiamato.
Nel codice che hai modificato continuano ad esserci errori, nell'$headers non ci metti la concatenazione (il punto .) come è fatto per $message .

La pagina bianca che ti rimanda dopo aver cliccato su invia, devi controllare l'action del form html .
Se nell'action è scritto pippo.php vuol dire che devi inserire il codice php nel file pippo.php e dopo l'esecuzione dell'invio email ci fai un redirect... boh alla home o ad una pagina...

In ogni caso, troppo casino, se crei un nuovo file chiamato email.php e ci incolli tutto il codice che ti ho postato, vedi che funziona senza javascript e ti dice anche che la mail è stata inviata.
 
Allora nel codice che hai postato all'inizio non c'era alcun codice javascript che veniva richiamato.
Nel codice che hai modificato continuano ad esserci errori, nell'$headers non ci metti la concatenazione (il punto .) come è fatto per $message .

La pagina bianca che ti rimanda dopo aver cliccato su invia, devi controllare l'action del form html .
Se nell'action è scritto pippo.php vuol dire che devi inserire il codice php nel file pippo.php e dopo l'esecuzione dell'invio email ci fai un redirect... boh alla home o ad una pagina...

In ogni caso, troppo casino, se crei un nuovo file chiamato email.php e ci incolli tutto il codice che ti ho postato, vedi che funziona senza javascript e ti dice anche che la mail è stata inviata.

Geca ho messo il codice che mi hai postato all'inizio. In effetti funziona, ma solo se rimuovo quel codice javascript. Altrimenti l'email non mi arriva. Inoltre quando clicco su invia mi si ricarica la pagina, può anche andare bene...
 
Stallone94 scusami se insisto, ma sbagli qualcosa, nel codice che ti ho postato se lo inserisci in un nuovo file non richiama e non c'è alcun javascript.
Nel file che lo incolli molto probabilmente richiama il codice javascript da qualche parte.
 
Stallone94 scusami se insisto, ma sbagli qualcosa, nel codice che ti ho postato se lo inserisci in un nuovo file non richiama e non c'è alcun javascript.
Nel file che lo incolli molto probabilmente richiama il codice javascript da qualche parte.

Scusami Geca, allora il pezzo di codice che ti ho incollato all'inizio è solo una parte del file index.html. Infatti il file index richiama il file main.js in cui all'interno ha anche il codice che ti ho postato prima. In questa riga : <form id="main-contact-form" name="contact-form" method="post" action="sendemail.php"> richiama il file php che ho modificato con il tuo. Ma per funzionare ho dovuto rimuovere il codice all'interno del file main.js
Ho provato anche in questa maniera
<form id="main-contact-form" name="contact-form" method="POST" action="<?php $_SERVER['PHP_SELF'];?>">
incollando poi dopo la chiusura del form il codice php che mi hai dato. Ma ripeto funziona, ma solo se rimuovo il codice all'interno del file main.js
Quindi credo che il problema sia all'interno del file javascript?
 
Certo perchè se incluso il file javascript viene richiamato qui <form id="main-contact-form" ... e così su ogni input...
Ciaoo
 
Come segnalato ci sono problemi sui tag PHP, pero' dividendo come ho fatto io piu' o meno funziona.
Per favore usate i tag CODE e PHP, grazie.
 
Ho scritto nel supporto ticket che i tag php su questo sito danno problemi.

ciao geca, comunque volevo ringraziarti per ieri. Forse poi sono stato poco chiaro. Comunque poi ho risolto aggiungendo queste righe al file javascript

Codice:
type: "POST",
data: $(this).serialize(),
 
Pubblicità
Pubblicità
Indietro
Top