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
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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)
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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!';
?>
 

borgo italia

Super Moderatore
Membro dello Staff
SUPER MOD
MOD
4 Feb 2008
16.046
150
63
PR
www.borgo-italia.it
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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
 

alessandro1997

Utente Attivo
6 Ott 2009
5.302
1
0
26
Roma
alessandro1997.netsons.org
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
Autore Titolo Forum Risposte Data
G E' possibile dare la vividezza in un colpo solo a più foto Photoshop 1
A Dare l'accesso ad una pagina solo ad un utente specifico PHP 0
Zidane Spero di poter dare e ricevere molti consigli Presentati al Forum 0
G [Javascript] nome da dare ad una funzione Javascript 1
N loghi su t-shirt: che formato dare? Webdesign e Grafica 2
D rete con ip statici, dare anche dhcp Reti LAN e Wireless 1
J Per legge il webmaster deve dare la password al cliente? Leggi, Normative e Fisco 1
M problemino legale: farsi dare le password dai precedenti gestori del sito. Leggi, Normative e Fisco 0
N Dare id ad elementi classe jQuery 1
blackhawk Dare la possibilità all'amministratore di modificare il contenuto di una pagina del sito PHP 8
carter Dare un titolo alla finestra confirm Javascript 5
B Mkportal probemi dare i permessi hai file! Web Server 5
A loghi su magliette: che formato dare? Webdesign e Grafica 1
L Dare a un dowload solo l'opzione salva e non quella apri HTML e CSS 3
T Vuoi dare una svolta alla tua vita? Guadagni sicuri con questo metodo! Guadagnare col Sito 0
C Dare la possibilità agli utenti registrati di mandarsi dei messaggi PHP 2
M Chi mi può dare un consiglio pratico ? HTML e CSS 4
M dare la possibilità agli utenti di creare un ticker Javascript 1
mptech come faccio per dare una posizione al popup Javascript 3
N Dare dei punteggi ai propri utenti Classic ASP 0
T Segnalazione post PHP 4
R W10 Segnalazione di errore su terminale USB Windows e Software 0
A [PHP] Segnalazione in up-load immagine PHP 2
E Rinnovo sito e segnalazione a Google SEO e Posizionamento 1
G [Vendo] Segnalazione Top Directory Italiane + Visibilità su home directory pr4 Altri Annunci 0
P Sito che mi copia, segnalazione a Google SEO e Posizionamento 1
S Segnalazione directory Presenta il tuo Sito 0
S Servizzi Segnalazione directory Presenta il tuo Sito 0
borgo italia segnalazione Discussioni Varie 0
A Segnalazione programma di affiliazione Guadagnare col Sito 0
A segnalazione il tuo sito in directory gratis Presenta il tuo Sito 0
G segnalazione per gli admin-scambio link non attivo Supporto Mr.Webmaster 1
S [VENDO] Segnalazione manuale a 262 directory italiane. Vendere e Acquistare pubblicita' online 2
W [Offro] Segnalazione sito web in 100-300-500-800 Directory da 25 € Altri Annunci 0
S [Offro] Segnalazione in directory Altri Annunci 0
M Script segnalazione errore PHP 2
P Segnalazione Spam su guestbook Supporto Mr.Webmaster 0
A Segnalazione nuovo sito Guadagnare col Sito 0
Apeweb Nuova directory di segnalazione Tutorial Presenta il tuo Sito 0
G segnalazione malfunzionamento .. Supporto Mr.Webmaster 1
D Segnalazione Vs. sito GRATIS SEO e Posizionamento 4
4 segnalazione top100 Discussioni Varie 0
P Segnalazione risorse... Discussioni Varie 0
K Inserimento query Errore 1366 PHP 4
F errore 1062 su campo nuovo MySQL 4
N Errore interno Access MS Access 2
R mi da errore dove inizia il while PHP 1
R Recupero di permalink di un sito che è stato eliminato per errore WordPress 5
R Yoast SEO errore semafori sempre rossi SEO e Posizionamento 0
S Visualizza l'errore di creazione in MSSQL Database 4

Discussioni simili