Form mail php - ajax

aledero75

Utente Attivo
6 Apr 2012
88
0
0
Lamezia Terme
Buongiorno a tutti,
ho utillizzato un form mail in ajax e php. Il problema è che nella mail ricevo soltanto il testo del campo messaggio e non riesco ad inviare gli altri campi ( ragione, telefono, partita )

Qualcuno può aiutarmi a capire perché?
Grazie mille :D
PHP:
// Clean up the input values
foreach($_POST as $key => $value) {
	if(ini_get('magic_quotes_gpc'))
		$_POST[$key] = stripslashes($_POST[$key]);
	
	$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}

// Assign the input values to variables for easy reference
$ragione = $_POST['ragione'];
$email = $_POST['email'];
$partitaiva = $_POST['partita'];
$telefono = $_POST['telefono'];
$message = $_POST['message'];

// Test input values for errors
$errors = array();
if(strlen($ragione) < 2) {
	if(!$ragione) {
		$errors[] = "Devi inserire la tua ragione sociale.";
	} else {
		$errors[] = "La ragione sociale deve essere minimo di 2 caratteri.";
	}
}

if(!$email) {
	$errors[] = "Devi inserire un'email.";
} else if(!validEmail($email)) {
	$errors[] = "Devi inserire un'email valida.";
}
$errors = array();
if(strlen($partitaiva) < 11) {
	if(!$ragione) {
		$errors[] = "Devi inserire la tua partita iva.";
	} else {
		$errors[] = "La partita iva deve essere minimo 11 caratteri.";
	}
	
	
}

if($errors) {
	// Output errors and die with a failure message
	$errortext = "";
	foreach($errors as $error) {
		$errortext .= "<li>".$error."</li>";
	}
	die("<span class='failure'>Spiacenti!<br />Ci sono stati problemi:<ul>". $errortext ."</ul>Riprova</span>");
}

// Send the email
$to = "[email protected]";
$subject = "Messaggio ricevuto da: $ragione";
$message = "$message";
$headers = "From: $email";

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

// Die with a success message
die("<span class='success'>Complimenti!<br /><br /> Il tuo messaggio e' stato inviato correttamente!</span>");

// A function that checks to see if
// an email is valid
function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $domainLen > 255)
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if ($local[0] == '.' || $local[$localLen-1] == '.')
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $local))
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $domain))
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 str_replace("\\\\","",$local)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
      if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}
 
Guardandolo così mi sembra il tuo codice invia la mail anche se vengono trovati degli errori.
 
Controlla il loro valore.
E vuoi che la mail venga inviata anche se vengono trovati errori?
 
No certo,
ma di quali errori parli? Il messaggio che mi da, una volta premuto il bottone invia è :" il messaggio è stato inviato correttamente"

I valori corrispondono nell'html il codice è questo:
HTML:
<form id="contactform" action="processForm.php" method="post">
				<table id="modulo_contatti">
                <tr>
                	<td></td>
                   <td></td>
                
                </tr>
					<tr>
                    	
						<td><label for="ragione">Ragione Sociale:</label></td>
						<td><input type="text" id="ragione" name="ragione" /></td>
					</tr>
					<tr>
						<td><label for="email">Email:</label></td>
						<td><input type="text" id="email" name="email" /></td>
                        
					</tr>
                    <tr>
						<td><label for="partita">Partita Iva:</label></td>
						<td><input type="text" id="partita" name="partita" /></td>
                        
					</tr>
                    <tr>
						<td><label for="telefono">Telefono:</label></td>
						<td><input type="text" id="telefono" name="telefono" /></td>
                        
					</tr>
					<tr>
						<td><label for="message">Messaggio:</label></td>
						<td><textarea id="message" name="message" rows="5" cols="20"></textarea></td>
					</tr>
					<tr>
						<td></td>
						<td><input type="submit" value="Invia" id="send" class="button" /></td>
                        
					</tr>
                   		
						
				</table>
			</form>
 
Ok,
ho corretto gli errori.
Però quello che non riesco a fare è stampare nel corpo della mail i dati del telefono, partita iva e ragione sociale.
Puoi aiutarmi a capire come fare?
Ti ricopio il codice corretto
PHP:
// Clean up the input values
foreach($_POST as $key => $value) {
	if(ini_get('magic_quotes_gpc'))
		$_POST[$key] = stripslashes($_POST[$key]);
	
	$_POST[$key] = htmlspecialchars(strip_tags($_POST[$key]));
}

// Assign the input values to variables for easy reference
$ragione = $_POST['ragione'];
$email = $_POST['email'];
$partitaiva = $_POST['partita'];
$telefono = $_POST['telefono'];
$message = $_POST['message'];

// Test input values for errors
$errors = array();
if(strlen($ragione) < 2) {
	if(!$ragione) {
		$errors[] = "Devi inserire la tua ragione sociale.";
	} else {
		$errors[] = "La ragione sociale deve essere minimo di 2 caratteri.";
	}
}

if(!$email) {
	$errors[] = "Devi inserire un'email.";
} else if(!validEmail($email)) {
	$errors[] = "Devi inserire un'email valida.";
}
$errors = array();
if(strlen($partitaiva) < 11) {
	if(!$partitaiva) {
		$errors[] = "Devi inserire la tua partita iva.";
	} else {
		$errors[] = "La partita iva deve essere minimo 11 caratteri.";
	}
	
	
}

if($errors) {
	// Output errors and die with a failure message
	$errortext = "";
	foreach($errors as $error) {
		$errortext .= "<li>".$error."</li>";
	}
	die("<span class='failure'>Spiacenti!<br />Ci sono stati problemi:<ul>". $errortext ."</ul>Riprova</span>");
}

// Send the email
$to = "[email protected]";
$subject = "Messaggio ricevuto da: $ragione";
$message = "$message";
$headers = "From: $email";

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

// Die with a success message
die("<span class='success'>Complimenti!<br /><br /> Il tuo messaggio e' stato inviato correttamente!</span>");

// A function that checks to see if
// an email is valid
function validEmail($email)
{
   $isValid = true;
   $atIndex = strrpos($email, "@");
   if (is_bool($atIndex) && !$atIndex)
   {
      $isValid = false;
   }
   else
   {
      $domain = substr($email, $atIndex+1);
      $local = substr($email, 0, $atIndex);
      $localLen = strlen($local);
      $domainLen = strlen($domain);
      if ($localLen < 1 || $localLen > 64)
      {
         // local part length exceeded
         $isValid = false;
      }
      else if ($domainLen < 1 || $domainLen > 255)
      {
         // domain part length exceeded
         $isValid = false;
      }
      else if ($local[0] == '.' || $local[$localLen-1] == '.')
      {
         // local part starts or ends with '.'
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $local))
      {
         // local part has two consecutive dots
         $isValid = false;
      }
      else if (!preg_match('/^[A-Za-z0-9\\-\\.]+$/', $domain))
      {
         // character not valid in domain part
         $isValid = false;
      }
      else if (preg_match('/\\.\\./', $domain))
      {
         // domain part has two consecutive dots
         $isValid = false;
      }
      else if(!preg_match('/^(\\\\.|[A-Za-z0-9!#%&`_=\\/$\'*+?^{}|~.-])+$/',
                 str_replace("\\\\","",$local)))
      {
         // character not valid in local part unless 
         // local part is quoted
         if (!preg_match('/^"(\\\\"|[^"])+"$/',
             str_replace("\\\\","",$local)))
         {
            $isValid = false;
         }
      }
      if ($isValid && !(checkdnsrr($domain,"MX") || checkdnsrr($domain,"A")))
      {
         // domain not found in DNS
         $isValid = false;
      }
   }
   return $isValid;
}
 
Intanto prova a fare degli errori tipo mettere una ragione minore di 2 caratteri o altro e vedi se manda la mail.
Poi prova a stampare $ragione e le altre variabili che non si riesci a mandare e vedi il contenuto.
In più l'invio della mail deve avvenire solo se non ci sono errori quindi dovresti mettere una else a if($errors) e mettere la parte dell'invio dentro alla else creata.
 
Per quanto riguarda il primo punto, la mail la invia solo se non ci sono errori,
Ho provato a stampare i valori di $ragione, $partitaiva e $telefono e mi stampa i valori che ho inserito.
Forse sbaglio qualcosa qui?
PHP:
// Send the email
$to = "[email protected]";
$subject = "Messaggio ricevuto da: $ragione";
$message = "$message";
$headers = "From: $email";

mail($to, $subject, $message, $headers);
 
Non vedo errori.
Prova a controllare le variabili $to $subject e $headers e poi ti consiglio di usare phpmailer o swiftmailer per l'invio delle mail.
 

Discussioni simili