Dare segnalazione errore stessa pagina del form email

__SUPERMAN__

Nuovo Utente
19 Nov 2009
1
0
0
ciao a tuti sono nuovo :D :D e ho un problema

allora io ho queste 2 pagine

contatti.php
PHP:
<?php
session_start();
$_SESSION['random_number']=rand(1000, 9999);
?>
<html>
<head>
<title>Formmail</title>
</head>
<body>
<!-------------begin form------------>

<FORM ACTION="mail.php" METHOD="POST" NAME="contact_form">
 <TABLE>
 <TR>
 <TD><b><u>INVIA EMAIL</u></b><br><br></TD></TR><tr>
  <TD><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome:</font></TD>
  <TD><input type=text name="contact_name"></TD> 
 </TR>
 <TR>
  <TD><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Indirizzo Email:</font></TD>
  <TD><input type=text name="contact_email"></TD>
 </TR>
 <TR>
  <TD><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Messaggio:</font></TD>
  <TD><textarea name="comment" cols="40" rows="3"></textarea></TD>
 </TR>
<tr>
<td>
<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Inserisci il codice di verifica: </font>
</td>
<TD><input type=text name="val_code">&nbsp;
    <img  src="/image_number1.php?n=<?=rand(1000, 9999)?>" alt="number" /></TD> 
 </tr>
<tr>
  <td>
  <TR>
  <TD>&nbsp;</TD>
  <TD><input type="submit" value="Invia" name="submit"></TD>
  
 </TR>
 <tr><td><br><br></td></tr>
</TABLE>

e mail.php
PHP:
<?
session_start();
function checkOK($field)
{
if (eregi("\r",$field)){
die("Invalid Input!");
}
}
$val_code=$_POST['val_code'];
$name=$_POST['contact_name'];
checkOK($name);
$email=$_POST['contact_email'];
checkOK($email);
$comments=$_POST['comment'];
checkOK($comments);
$to="mio indirizzo"; //Replace with an email address where the form results will be sent
if ("{$_SESSION['random_number']}"!="{$val_code}") {
 echo "Codice Errato";
}
else {
$message="$name ti ha inviato il seguente messaggio:\n\n$comments\n\nIndirizzo e-mail: $email\n";
if(mail($to,"Messaggio proveniente da Studiomareta.com",$message, "From: $email")) {
echo "E-mail inviata con successo.";
} else {
echo "Si sono verificati dei problemi durante l'invio. Controlla bene i dati inseriti.";
}
}
?>

la mia domanda è come posso fare in modo che la conferma dell'invio e la segnalazione di errore in caso di codice errato avvenga direttmante su contatti.php magari con una scritt ain rosso accanto.... grazie mille
 
ciao
potresti fare in due modi
1. mettere l'invio nella stessa pagina del form
2. mettere i messaggi in una variabile e trasmetterli alla pag del form (o con session o con un cookie o con una querystringa)
 
Lo script, scritto com'era, non avrebbe neanche funzionato per un errore nel sistema di verifica del codice. Lo hai scritto tu? :p

Comunque ho fatto qualche correzione anche all'HTML (attieniti agli standard!) e riscritto completamente il sistema che si occupa dell'invio della e-mail. La pagina contatti.php diventa:
PHP:
<?php
session_start();
$_SESSION['random_number'] = rand(1000, 9999);
?>
<html>
	<head>
		<title>Formmail</title>
	</head>
	<body>
		<!------------- begin errors ------------>
		<?php
		if(isset($_SESSION['errors']) && is_array(unserialize($_SESSION['errors'])))
		{
			echo '<p style="color: red;">';
			foreach(unserialize($_SESSION['errors']) as $err)
				echo "Errore: {$err} <br />";
			echo '</p>';
		}
		?>
		<!------------- end errors ------------>
		
		<!------------- begin form ------------>
		<form action="mail.php" method="POST" name="contact_form">
			<table>
				<tr>
					<td><b><u>INVIA EMAIL</u></b> <br /> <br /></td>
				</tr>
				<tr>
					<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Nome:</font></td>
					<td><input type="text" name="contact_name" /></td> 
				</td>
				<td>
					<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Indirizzo Email:</font></td>
					<td><input type=text name="contact_email" /></td>
				</td>
				<td>
					<td><font size="2" face="Verdana, Arial, Helvetica, sans-serif">Messaggio:</font></td>
					<td><textarea name="comment" cols="40" rows="3"></textarea></td>
				</td>
				<tr>
					<td>
						<font size="2" face="Verdana, Arial, Helvetica, sans-serif">Inserisci il codice di verifica: </font>
					</td>
					<td>
						<input type="text" name="val_code" />&nbsp;
						<img src="/image_number1.php?n=<?php echo $_SESSION['random_number']; ?>" alt="number" />
					</td> 
				</tr>
				<tr>
					<td>
					<td>
						<td><input type="submit" name="submit" value="Invia" /></td>
						<td><input type="reset" name="reset" value="Resetta" /></td>
					</td>
					<tr>
						<td><br /><br /></td>
					</tr>
				</tr>
			</table>
		</form>
		<!------------- end form ------------>
	</body>
</html>

Mentre la pagina mail.php si trasforma in:
PHP:
<?php
session_start();

$name = isset($_POST['contact_name']) ? trim($_POST['contact_name']) : '';
$email = isset($_POST['contact_email']) ? trim($_POST['contact_email']) : '';
$comment = isset($_POST['comment']) ? trim($_POST['comment']) : '';
$val_code = isset($_POST['val_code']) ? trim($_POST['val_code']) : '';

$errors = array();
$to = '[email protected]';

if($name == '')
	$errors[] = 'Non hai inserito il tuo nome.';
if(eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $email))
	$errors[] = 'Non hai inserito una e-mail valida.';
if($comment == '')
	$errors[] = 'Non hai inserito il tuo messaggio.';
if($val_code == '')
	$errors[] = 'Non hai inserito il codice di verifica.';

if(count($errors) > 0)
{
	$_SESSION['errors'] = serialize($errors);
	header('Location:contatti.php');
	exit();
}

if($_SESSION['random_number'] != $val_code)
	$errors[] = 'Il codice di verifica non &egrave; corretto.';

if(count($errors) > 0)
{
	$_SESSION['errors'] = serialize($errors);
	header('Location:contatti.php');
	exit();
}

$message = "{$name} ti ha inviato il seguente messaggio:\n\n";
$message .= "{$comment}\n\n";
$message .= "Indirizzo e-mail: {$email}\n";

if(!mail($to, 'Messaggio proveniente da Studiomareta.com', $message, "From: {$email}"))
	$errors[] = 'Impossibile inviare il messaggio. Riprova pi&ugrave; tardi.';

if(count($errors) > 0)
{
	$_SESSION['errors'] = serialize($errors);
	header('Location:contatti.php');
	exit();
}

echo 'La tua e-mail &egrave; stata inviata con successo!';
?>
 
ciao alex
volevo dirti un paio di cose
1. al posto di
PHP:
if(eregi("^[_a-z0-9+-]+(\.[_a-z0-9+-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)+$", $email)) 
    $errors[] = 'Non hai inserito una e-mail valida.';

visto che te l'ho fatta conoscere usa

PHP:
if(!filter_var($email, validate_email){
     $errors[] = 'Non hai inserito una e-mail valida.';
}//fine if validazione email

2. commenta di più gli scripts, anche se semplici, per buona abitudine (poi ci si dimentica) e perchè
così fai capire meglio ai non esperti quello che fai (insegni o lameno cerchi di) es.

PHP:
$_SESSION['errors'] = serialize($errors); //trasformo la variabile in stringa

3. anche se non necessario in certi casi, sempre per facilitare la lettura (e successivo inevitabile debug)
utilizza le graffe apertura/chiusura

PHP:
if($name == ''){
    $errors[] = 'Non hai inserito il tuo nome.';
}//fine if name vuoto

se in seguito devi aggiungere nell'if qualcosa rischi di fare meno errori

ultimo: guardando ho detto: "ehe...ehm.." verifica dove
 
Giusto, dubito che mi ricorderò mai della funzione filter_var, comunque grazie per i consigli. L'unico su cui non sono d'accordo riguarda le parentesi graffe: usarle per una sola istruzione a me è sempre sembrata una blasfemia :D
 
Giusto! Non me ne ero accorto perché ho copiato l'espressione regolare (non sono mai state il mio forte) da un sito Web e mi sono scordato di aggiungere il punto esclamativo. Comunque in ogni caso è meglio usare filter_var :D
 

Discussioni simili