Form

stonino82

Nuovo Utente
14 Dic 2012
9
0
0
Salve a tutti...
ho un problema (premetto che non sono un esperto di programmazione)

sto facendo un form semplice semplice che prevede alcuni campi
se i campi non vengono riempiti adeguatamente (non passano la validazione) compaiono dei messaggi di errore proprio subito sotto il campo

il problema è che tutto ció funziona fin quando il codice php è compreso nella stessa pagina in cui c'è il form
se lo metto in un file a parte e indirizzo l'action del form a questo nuovo file...non funziona
anzichè farmi comparire i messaggi di errore nella stessa pagina del form mi reindirizza alla pagina dove c'è il codice php..

come fare ?
vi aggiungo il codice:

PHP:
if(isset($_POST['invia'])){
	if( mb_strlen( $_POST['nome']) >= 3 ) {
		$nomeOk = true;
	}else{
		$nomeOk = false;
		$eNomeInput = 'class="errorinput"';
		$eNome = '<p class="error">Please insert valid name</p>';
	}
	if($nomeOk){
		echo "<p>messaggio inviato correttamente</p>";
	}else{
		$contenido = $_POST;	
	}
}
 
Ultima modifica di un moderatore:
ciao
forse non ho capito bene, ma se tu invii con l'action ad una pag diversa e gli echo li ha in quella pagina è evidente che te li stampi sull'altra pagina.
 
ok.. questo è il codice completo per una maggiore chiarezza..
se entrambi si trovassero nella stessa pagina funzionerebbe!
ma ho la necessitá di portare il codice php in una pagina a parte...
come lo faccio funzionare ?


############# HTML ################
PHP:
<form id="formail" method="post" action="mail.php">
<p>Your Name:</p>
<input type="text" id="nome" name="nome" value="<?php echo $contenido['nome'];?>" <?php echo $eNomeInput; ?>/><br />
<div class="errorBox"><?php echo $eNome; ?></div>
<div class="clear"></div>
<p>Your E-mail:</p>
<input type="text" id="email" name="email" value="<?php echo $contenido['email'];?>" <?php echo $eEmailInput; ?>/><br />
<div class="errorBox"><?php echo $eEmail; ?></div>
<div class="clear"></div>
<p>Subject:</p>
<input type="text" id="titolo" name="titolo" value="<?php echo $contenido['titolo'];?>" <?php echo $eTitoloInput; ?>/><br />
<div class="errorBox"><?php echo $eTitolo; ?></div>
<div class="clear"></div>
<p>Your Message:</p>
<textarea id="messaggio" name="messaggio" <?php echo $eMessaggioInput; ?>><?php echo $contenido['messaggio'];?></textarea><br />
<div class="errorBox"><?php echo $eMessaggio; ?></div>
<div class="clear"></div>
<input type="submit" id="invia" name="invia" value="" />
</form>


############# PHP #################
PHP:
<?php
if( isset($_POST['invia']) ) {	 //se si preme INVIA si puó andare avanti

##############VALIDAZIONI ############

if( mb_strlen( $_POST['nome']) >= 3 ) {
$nomeOk = true;
}else{
$nomeOk = false;
$eNomeInput = 'class="errorinput"';
$eNome = '<p class="error">Please insert valid name</p>';
}
if( mb_eregi('^[a-z0-9\-\.~_]{2,}@[a-z0-9\-\.~_]{2,}\.[a-z]{2,4}$',$_POST['email']) ) {
$emailOk = true;
}else{
$emailOk = false;
$eEmailInput = 'class="errorinput"';
$eEmail = '<p class="error">Please insert valid mail</p>';
}
if( mb_strlen( $_POST['titolo']) >= 3 ) {
$titoloOk = true;
}else{
$titoloOk = false;
$eTitoloInput = 'class="errorinput"';
$eTitolo = '<p class="error">Please insert valid subject</p>';
}
if( !empty($_POST['messaggio']) ) {
$messaggioOk = true;
}else{
$messaggioOk = false;
$eMessaggioInput = 'class="errorinput"';
$eMessaggio = '<p class="error">Please insert valid message</p>';
}

############raccolgo le variabili e monto l'email #############

if($nomeOk && $emailOk && $titoloOk && $messaggioOk){

$nome = $_POST['nome'];
$email = $_POST['email'];
$titolo = $_POST['titolo'];
$ip = $_SERVER['REMOTE_ADDR'];
$data = date('\i\l d-M-Y \a\l\l\e \o\r\e H:i:s');
$to = "[email protected]";

$messaggio = $data."<br />";
$messaggio .= "hai ricevuto una e-mail da:<br />";
$messaggio .= "<strong>".$nome."</strong> (".$email.")<br />";
$messaggio .= "indirizzo IP: ".$ip."<br /><br />";
$messaggio .= "Oggetto:<br /><h2><strong>".$titolo."</strong></h2><br /><br />";
$messaggio .= nl2br("Messaggio: <br /><p>".$_POST['messaggio']."</p><br /><br />");

$headers = "From: $email \n";
$headers .= "Reply-To: $email \n";
$headers .= "MIME-Version: 1.0 \n";
$headers .= "Content-Type: text/html; charset=ISO-8859-1 \n";

if(mail($to,$titolo,$messaggio, $headers)){
echo "<p>Success! Your email is on its way into my inbox!</p>";

}else{
echo "<p>Your email failed, probably my fault. Try again later.</p>";
}
}else{
$contenido = $_POST;	
}
}
?>
 
Ultima modifica di un moderatore:
ciao
per passare il valore di variabili tra le pagine potresti usare le sessioni per cui nella pagina mail.php le valorizzi e nella pag del form l leggi.
oppure, visto che nella pag mail.php dovresti avere un ritorno al form potresti al link di ritorno aggiungere una querystringa di valore diverso in funzione del messaggio che vuoi visualizzare, poi nella pag del form in funzione del valore di ritorno che preleverai con il $_GET valorizzi la variabile che dovrai visualizzare.
se hai pazienza ti posto i due esempi
 
ciao
per passare il valore di variabili tra le pagine potresti usare le sessioni per cui nella pagina mail.php le valorizzi e nella pag del form l leggi.
oppure, visto che nella pag mail.php dovresti avere un ritorno al form potresti al link di ritorno aggiungere una querystringa di valore diverso in funzione del messaggio che vuoi visualizzare, poi nella pag del form in funzione del valore di ritorno che preleverai con il $_GET valorizzi la variabile che dovrai visualizzare.
se hai pazienza ti posto i due esempi

si per favore...
perchè cosí ci ho capito poco e niente...
 
ciao
piccolo esempio con le sessioni che detto tra noi è il sistema migliore
pagina mail.php
PHP:
<?php
session_start();//questa istruzione deve essere in tutte le pagine dove utilizzi le sessioni, E ALLA PRIMA RIGA
if( isset($_POST['invia']) ) {     //se si preme INVIA si puó andare avanti
	##############VALIDAZIONI ############
	if( mb_strlen( $_POST['nome']) >= 3 ) {
		$nomeOk = true;
	}else{
		$nomeOk = false;
		$_SESSION['eNomeInput'] = 'class="errorinput"';//creo le sessioni che mi servono
		$_SESSION['eNome'] = '<p class="error">Please insert valid name</p>';
	} 
//..ecc....
?>
pagina del form
PHP:
<?php
session_start();//questa istruzione deve essere in tutte le pagine dove utilizzi le sessioni, E ALL PRIMA RIGA
//verifico se le sessioni esistono 
if(isset($_SESSION['eNomeInput'])){$eNomeInput=$_SESSION['eNomeInput'];}else{$eNomeInput="";}
if(isset($_SESSION['eNome'])){$eNome=$_SESSION['eNome'];}else{$eNome="";}
//.....
?>
<!DOCTYPE html>
<html>
<head>
<!-- tutto quello che si serve nell'hed -->
</head>
<body>
<form id="formail" method="post" action="mail.php">
<p>Your Name:</p>
<input type="text" id="nome" name="nome" value="<?php echo $contenido['nome'];?>" <?php echo $eNomeInput; ?>/><br />
<div class="errorBox"><?php echo $eNome; ?></div> 
<!-- ecc....-->
</body>
</html>
le sessioni sono accessibili da tutte le pagine e vivono sino a che non esci dal bw o le fai morire con un comando
es.
unsett($_SESSION['eNomeInput']); //ne elimino una
o
session_destroy();//le elimino tutte

p.s.
quando scrivi il codice racchiudilo tra gli appositi tag (seconda riga di formattazione del post, ultime tre iconcine)
 
ciao
piccolo esempio con le sessioni che detto tra noi è il sistema migliore
pagina mail.php
PHP:
<?php
session_start();//questa istruzione deve essere in tutte le pagine dove utilizzi le sessioni, E ALLA PRIMA RIGA
if( isset($_POST['invia']) ) {     //se si preme INVIA si puó andare avanti
	##############VALIDAZIONI ############
	if( mb_strlen( $_POST['nome']) >= 3 ) {
		$nomeOk = true;
	}else{
		$nomeOk = false;
		$_SESSION['eNomeInput'] = 'class="errorinput"';//creo le sessioni che mi servono
		$_SESSION['eNome'] = '<p class="error">Please insert valid name</p>';
	} 
//..ecc....
?>
pagina del form
PHP:
<?php
session_start();//questa istruzione deve essere in tutte le pagine dove utilizzi le sessioni, E ALL PRIMA RIGA
//verifico se le sessioni esistono 
if(isset($_SESSION['eNomeInput'])){$eNomeInput=$_SESSION['eNomeInput'];}else{$eNomeInput="";}
if(isset($_SESSION['eNome'])){$eNome=$_SESSION['eNome'];}else{$eNome="";}
//.....
?>
<!DOCTYPE html>
<html>
<head>
<!-- tutto quello che si serve nell'hed -->
</head>
<body>
<form id="formail" method="post" action="mail.php">
<p>Your Name:</p>
<input type="text" id="nome" name="nome" value="<?php echo $contenido['nome'];?>" <?php echo $eNomeInput; ?>/><br />
<div class="errorBox"><?php echo $eNome; ?></div> 
<!-- ecc....-->
</body>
</html>
le sessioni sono accessibili da tutte le pagine e vivono sino a che non esci dal bw o le fai morire con un comando
es.
unsett($_SESSION['eNomeInput']); //ne elimino una
o
session_destroy();//le elimino tutte

p.s.
quando scrivi il codice racchiudilo tra gli appositi tag (seconda riga di formattazione del post, ultime tre iconcine)



non funziona. schiacciando sul bottone la pagina mi reindirizza in mail.php e li rimane senza mostrar nulla
 
ok...
ho ridotto all'osso html e php e finalmente ne sono venuto a capo!
non riesco a risolvere alcune cose però....
1) il campo compare sempre in rosso, con il messaggio d'errore... Mi sembra di capire di dover usare un session_destroy, ma non so esattamente dove posizionarlo..
2) come faccio a far rimanere nei campi il contenuti immessi dall'utente in caso di errore? (quelli che in precedenza stampavo nel value con $contenido['nome'].....$contenido['email']...ecc ecc....)
 
ciao
rimane nella mail.php perchè non c'è un link di ritorno
io uso il ritorno automatico usando
PHP:
<?php
echo "<meta http-equiv='Refresh' content='4; URL=nome_pagina_form.php'>";
?>
alla fine, dove content='4; sono i secondi di attesa prima di essere reindirizzato (puoi mettere da zero in su, in funzione a quanto tempo vui che l'utente abbia il tempo di leggere i vari messaggi)
poi per ritrasmettere i valori del post
nella pag mail.php
PHP:
<?php
//....

	}else{
		$_SESSION['contenido'] = serialize($_POST); //dentro la sessione non puoi mettere un array, qundi la trasformo
	}
//e qui il ritorno automatico
echo "<meta http-equiv='Refresh' content='4; URL=nome_pagina_form.php'>";
} 
?>
per ricavare i valori del $_SESSION['contenido'] nella pag del form
PHP:
<?php
//con unserializze la riporto ad array
if(isset($_SESSION['contenido'])){$contenido=unserialize($_SESSION['contenido']);}else{$contenido=array();} 
?>
puoi usare diversi modi per distruggere la sessione, ti conviene distruggerla se l'email è partita regolarmente quindi dove hai
PHP:
<?php
if(mail($to,$titolo,$messaggio, $headers)){
	echo "<p>Success! Your email is on its way into my inbox!</p>"; 
	if(isset($_SESSION){session_destroy()};
	/*
	oppure
	if(isset($_SESSION){unset($_SESSION)};
	io uso questo perche la prima distrugge TUTTE la sessioni e potrebbe essercene qualcuna che ti serve indipendentemente
	quindi nomino le sessioni che mi servono per il form come array di array
	es.
	$_SESSION['per_mail']['eNomeInput']
        $_SESSION['per_mail']['eNome']
	$_SESSION['per_mail']['contenido']
	quindi la 
	if(isset($_SESSION['per_mail']){unset($_SESSION['per_mail'])};
	elimina solo le sessioni relative al form e mail.php
	*/
?>
 
se invece io volessi che, nel caso in cui l'utente immetta dei dati sbagliati, rimanesse nella stessa pagina (o comunque gli desse questa illusione) e gli facesse comparire i messaggi d'errore e il value con l'ultimo contenuto immesso ?
il codice che mi hai dato per riempire i values va bene per tutti i campi ? non campisco il meccanismo con cui salva values differenti(venendo da campi differenti) e poi li stampa senza specificare quale va in un campo e quale in un altro ?
tra l'altro col codice di session_destroy che mi hai passato mi da un errore che suppongo sia di sintassi.
so che chiedo troppo....ma potresti scrivermi il codice completo ?
non ci sto capendo piú nulla..
 
Ultima modifica:
non capisco quale è il problema...a volte funziona, a volte no
e non capisco come far cancellare correttamente le sessioni per non far apparire sempre i messaggi ogni volta che si apre la pagina
lascio il codice

PHP:
<?php
session_start();
if(isset($_SESSION['eNome'])){
	$eNome=$_SESSION['eNome'];
}else{
	$eNome="";
}
if(isset($_SESSION['eNomeInput'])){
	$eNomeInput = $_SESSION['eNomeInput'];
}else{
	$eNomeInput="";
}
if(isset($_SESSION['eEmailInput'])){
	$eEmailInput = $_SESSION['eEmailInput'];
}else{
	$eEmailInput = "";
}
if(isset($_SESSION['eEmail'])){
	$eEmail = $_SESSION['eEmail'];
}else{
	$eEmail = "";
}
if(isset($_SESSION['eTitolo'])){
	$eTitolo = $_SESSION['eTitolo'];
}else{
	$eTitolo = "";
}
if(isset($_SESSION['eTitoloInput'])){
	$eTitoloInput = $_SESSION['eTitoloInput'];
}else{
	$eTitoloInput = "";
}
if(isset($_SESSION['eMessaggio'])){
	$eMessaggio = $_SESSION['eMessaggio'];
}else{
	$eMessaggio = "";
}
if(isset($_SESSION['eMessaggioInput'])){
	$eMessaggioInput = $_SESSION['eMessaggioInput'];
}else{
	$eMessaggioInput = "";
}
if(isset($_SESSION['contenido'])){$contenido=unserialize($_SESSION['contenido']);}else{$contenido=array();}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
</head>
<body>
<form id="formail" method="post" action="mail3.php">
                            <p>Your Name:</p>
                            <input type="text" id="nome" name="nome"  value="<?php echo $contenido['nome']; ?>" <?php echo $eNomeInput; ?>/><br />
                    		<div class="errorBox"><?php echo $eNome; ?></div>
                    		<div class="clear"></div>
                            <p>Your E-mail:</p>
                            <input type="text" id="email" name="email"  value="<?php echo $contenido['email']; ?>" <?php echo $eEmailInput; ?>/><br />
                    		<div class="errorBox"><?php echo $eEmail; ?></div>
                    		<div class="clear"></div>
                            <p>Subject:</p>
                            <input type="text" id="titolo" name="titolo"  value="<?php echo $contenido['titolo'];?>" <?php echo $eTitoloInput; ?>/><br />
                    		<div class="errorBox"><?php echo $eTitolo; ?></div>
                    		<div class="clear"></div>
                            <p>Your Message:</p>
                            <textarea id="messaggio" name="messaggio" <?php echo $eMessaggioInput; ?>><?php echo $contenido['messaggio'];?></textarea><br />
                    		<div class="errorBox"><?php echo $eMessaggio; ?></div>
                    		<div class="clear"></div>
                            <input type="submit" id="invia" name="invia" value="" />
                        </form>
</body>
</html>


PHP:
<?php
	session_start();
		#############################################################
		######################### VALIDAZIONI #######################
		#############################################################
		if( mb_strlen( $_POST['nome']) >= 3 ) {
			$nomeOk = true;
		}else{
			$nomeOk = false;
			$_SESSION['eNomeInput'] = 'class="errorinput"';
			$_SESSION['eNome'] = '<p class="error">Please insert valid name</p>';
		}
		if( mb_eregi('^[a-z0-9\-\.~_]{2,}@[a-z0-9\-\.~_]{2,}\.[a-z]{2,4}$',$_POST['email']) ) {
			$emailOk = true;
		}else{
			$emailOk = false;
			$_SESSION['eEmailInput'] = 'class="errorinput"';
			$_SESSION['eEmail'] = '<p class="error">Please insert valid mail</p>';
		}
		if( mb_strlen( $_POST['titolo']) >= 3 ) {
			$titoloOk = true;
		}else{
			$titoloOk = false;
			$_SESSION['eTitoloInput'] = 'class="errorinput"';
			$_SESSION['eTitolo'] = '<p class="error">Please insert valid subject</p>';
		}
		if( !empty($_POST['messaggio']) ) {
			$messaggioOk = true;
		}else{
			$messaggioOk = false;
			$_SESSION['eMessaggioInput'] = 'class="errorinput"';
			$_SESSION['eMessaggio'] = '<p class="error">Please insert valid message</p>';
		}
		
	if($nomeOk && $emailOk && $titoloOk && $messaggioOk){
		//Recuperiamo tutte le variabili
		$nome = $_POST['nome'];
		$email = $_POST['email'];
		$titolo = $_POST['titolo'];
		$ip = $_SERVER['REMOTE_ADDR'];
		$data = date('\i\l d-M-Y \a\l\l\e \o\r\e H:i:s');
		$to = "[email protected]";
			
		//Qui andrà inserito il tuo indirizzo e-mail
		$to = "[email protected]";
		
		//Creazione del mesaggio da inviare
		$messaggio = $data."<br />";
		$messaggio .= "hai ricevuto una e-mail da:<br />";
		$messaggio .= "<strong>".$nome."</strong> (".$email.")<br />";
		$messaggio .= "indirizzo IP: ".$ip."<br /><br />";
		$messaggio .= "<h2><strong>".$titolo."</strong></h2><br /><br />";
		$messaggio .= nl2br("<p>".$_POST['messaggio']."</p><br /><br />");
				
		$headers = "From: $email \n";
		$headers .= "Reply-To: $email \n";
		$headers .= "MIME-Version: 1.0 \n";
		$headers .= "Content-Type: text/html; charset=UTF-8";
		
		//Se l'e-mail viene spedita correttamente, compare un messaggio di avvenuto invio
		if(mail($to,$titolo,$messaggio, $headers)){
					echo "<p>Success! Your email is on its way into my inbox!</p>";
					session_destroy(); 
					echo "<meta http-equiv='Refresh' content='2; URL=index.php#quarta'>";
		//Altrimenti un messaggio di errore
		}else{
					echo "<p>Your email failed, probably my fault. Try again later.</p>";
					echo "<meta http-equiv='Refresh' content='2; URL=index.php#quarta'>";
		}
	}else{
		$_SESSION['contenido'] = serialize($_POST);
		echo "errore di validazione!";
		echo "<meta http-equiv='Refresh' content='2; URL=index.php#quarta'>";
	}
?>
 

Discussioni simili