risposta form con testo

Paperino78

Utente Attivo
30 Giu 2012
409
0
16
Milano
Nella pagina che sto creando ho un form, che viene validato nella stessa pagina ed al termine se tutto è ok mi da una risposta così
PHP:
if (!$mail->Send() && !$mail2->Send()){
			//Messaggio che appare se clicco invio e tutti i campi sono vuoti
			echo '<div>
			<p><h3>C\'è stato un errore nell\'invio della mail</h3></p>
			Cortesemente riprova e se vedi che il problema persiste, contattami direttamente</div>'; //	Messaggio di errore invio mail
			echo "<meta http-equiv='Refresh' content='30; URL=contatti.php'>";
		} else if ($mail->Send() && !$mail2->Send()) {
			echo "<meta http-equiv='Refresh' content='30; URL=contatti.php'>";
			echo '<div>
			<p><h3>C\'è stato un errore nell\'invio della mail 2</h3></p>
			Cortesemente riprova e se vedi che il problema persiste, contattaci direttamente</div>';
		}  else if ($mail2->Send() && !$mail->Send()) {
			echo "<meta http-equiv='Refresh' content='30; URL=contatti.php'>";
			echo '<div>
			<p><h3>C\'è stato un errore nell\'invio della mail 1</h3></p>
			Cortesemente riprova e se vedi che il problema persiste, contattaci direttamente</div>';
		} else {
			echo "Grazie, ti contatterò nei prossimi giorni. Denis Topino";  //Messaggio invio riuscito
			echo "<meta http-equiv='Refresh' content='30; URL=contatti.php'>";
		}
. Il problema è che prima del form ho una parte di testo, che mi appare ogni qual volta ottengo l'invio del contatto dal form. Quindi invece di avere una pagina vuota con l'ok dell'invio della mail per il contatto ottengo invece il testo ed in fondo naturalmente la risposta all'invio del form. Cosa posso fare per non caricare anche il testo?
 
metti la parte di testo dentro ad un if:

PHP:
if (!isset ($_POST)) {

  // Parte di testo da visualizzare solo prima dell'invio

}

Logicamente se invii i dati a PHP con get sostituisci $_POST con $_GET

E se la pagina iniziale è richiamata grazie ad una variabile "post" o "get" allora sostituisci $_POST con, ad esempio, $_POST["email"] presupponendo che l'email dell'utente venga passata con POST.
Spero di essere stato chiaro, se ti servono delucidazioni fammi sapere.


PS: comunque la sezione adatta sarebbe PHP, non HTML5
 
Grazie per la risposta.
mi spiego meglio. La pagina contatti ha un form con una parte di testo prima del form stesso. Al momento di compilare il form e di inviarlo dovrei avere una risposta del buon fine o no dell'invio. Solitamente quando si mette sia il codice html sia il codice php cioè il motore per l'invio dei dati, la risposta la si ottiene nella stessa pagina, ma avendo prima del form questo testo mi trovo ad avere nella risposta sia il testo che la risposta e non mi piace. Vorrei avere solo la risposta e non vorrei creare una pagina apposta con i ringraziamenti per aver compilato il form.

P.S. credo di aver inserito il quesito nella sezione giusta visto che siamo in php e non html5
 
mi pareva di aver letto HTML5, avran spostato.

Comunque la mia soluzione è quello che cerchi.
 
Non capisco. Ti allego un po di codice magari mi faccio capire meglio. Il testo in questione è un normalissimo testo all'interno di alcuni div, nulla di speciale mentre il codice del form è questo
PHP:
<?php
if(!isset($_POST['invia'])){
	?>
<form id="form_contact" method="post" action='<?php echo $_SERVER['PHP_SELF']; ?>'>
	<fieldset style="width:300px;">
    <legend>Dati Generali</legend>
    <ol>
        <input id="name"  name="name" type="text" tabindex="1" placeholder="Nome" required autofocus />
    </ol>
    <ol>
        <span>
        <input id="cell_1" name="cell1" type="text" tabindex="2" maxlength="4" placeholder="349" required /> /
        </span>
		<span>
        <input id="cell_2" name="cell2" type="text" tabindex="3" maxlength="8" placeholder="1234567" required />
        </span>
	</ol>
    <ol>
        <input id="email"  name="mail" type="text" tabindex="4" placeholder="E-Mail" required />
	</ol>
    </fieldset>
etc etc ...
</form>
		<?php
} else {

	//Variabili Validazione
	$formok	=	true;
	$errors	=	array();

	//Recupero dati
	$ip		=	$_SERVER['REMOTE_ADDR']	;
	$data	=	date('d/m/Y');
	$time	=	date('H:i:s');

	//Dati del Form
	$nome		=	trim($_POST['name']);
	$cell_1		=	trim($_POST['cell1']);
	$cell_2		=	trim($_POST['cell2']);
	$email		=	$_POST['mail'];
	$testo		=	trim($_POST['testo']);
	$data		=	trim($_POST['mydate']);
	$richiesta	=	trim($_POST['checkbox']);

ho saltato alcuni passaggi per la validazione del form ovviamente che non servono per il nostro problema

	//Invio mail se tutto è OK
	if($formok){

		$denis 		= "[email protected]"; //Mail di Denis
		$alessio	= "[email protected]"; //Mail di Alessio
		
		//Se è tutto OK preparo la mail con la funzione mail() di php
		//Preparo la mail per l'utente in HTML
		$messaggiohtml	= "<html><body style='background: #DCCE6D;'><head>
				<div style='width:100%; margin:0 auto; padding:20px 10px;'>
				<h1>Grazie!</h1><br>Ho ricevuto la tua richiesta<p>Qui di seguito troverai un resoconto di quello che mi hai scritto.
				Ti contatterò il prima possibile per definire i dettagli e magari per incontrarci.</p><br>Denis</div><br><br>
				<div style='padding:10px;'>
				Ciao Denis,<br> mi chiamo <span style='text-transform:uppercase;'>".$nome."</span> e sto cercando uno showman per l'evento che si terrà il ".$dataevento.",
				sarà un " .implode(", ",$richiesta).".	Questa è la mia richiesta:<br> ".$testo."<br><br>
				Chiamami al numero ".$cell_1."-".$cell_2."<br><br> <h4>Grazie</h4><span style=\"text-transform:uppercase;\">".$nome."</span><br><br>
				Questa richiesta te l'ho inviata oggi ".$oggi." alle ".$time." con questo indirizzo IP ".$ip." e sto utilizzando ".$browser."<br><br>
				</div>
				</head></body></html>";
		
		//Intestazioni generali
		$header		=	"From: DenisLive.it" .$denis;
		$header		.=	"Reply-To: Denis ".$denis;
		$header		.=	"Bcc:" .$alessio;
		$header		.=	"X-Mailer: PHP/" . phpversion();
		
		//Stringa che funge da separatore
		$boundary	=	"==String_Boundary_x" .md5(time()). "x";
		
		// costruiamo le intestazioni specifiche per un messaggio
		// con parti relazionate
		$header .= "MIME-Version: 1.0\n";
		$header .= "Content-Type: multipart/related;\n";
		$header .= " boundary=\"$boundary\";\n\n";

		// questa parte del messaggio viene visualizzata
		// solo se il programma non sa interpretare
		// i MIME poiché è posta prima della stringa boundary
		$header .= "Se visualizzi questo testo il tuo programma non supporta i MIME\n\n";
		
		// inizia la prima parte del messaggio in testo puro
		$header .= "–$boundary\n";
		$header .= "Content-Type: text/plain; charset=\"iso-8859-1\"\n";
		$header .= "Content-Transfer-Encoding: 7bit\n\n";
		$header .= "Nome: . $nome ";
		$header .= "E-mail: ". "\n\" . $email . \"\n\r";
		$header .= 'Telefono:' . "\n" . $cell_1 . "-" . $cell_2 . "\n\n";
		$header .= 'Richiesta:' . "\n" . $richiesta . "\n\n";
		$header .= 'Testo:' . "\n" . $testo . "\n\n";
		$header .= $data . "\n";
		$header .= $time . "\n";
		$header .= $ip . "\n";
		
		// inizia la seconda parte del messaggio in formato html
		$header .= "–$boundary\n";
		$header .= "Content-Type: text/html; charset=\"iso-8859-1\"\n";
		$header .= "Content-Transfer-Encoding: 7bit\n\n";
		$header .= ".$messaggiohtml.\n";
		
		//Chiusura della stringa di Boundary
		$header	.=	"-boundary-\n";

		$oggetto	=	"Richiesta Informazioni dal sito Denis Live";
		

		
		
		if (!mail($email,$oggetto,$messaggiohtml,$header)){
			//Messaggio che appare se clicco invio e tutti i campi sono vuoti
			echo '<div>
			<p><h3>C\'è stato un errore nell\'invio della mail</h3></p>
			Cortesemente riprova e se vedi che il problema persiste, contattami direttamente</div>'; //	Messaggio di errore invio mail
			echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";
		}else {
			header('location: contatti4.php');
			echo '<div class="testo">Grazie, ti contatterò nei prossimi giorni. Denis Topino</div>';
			exit(0);
			//echo "Grazie, ti contatterò nei prossimi giorni. Denis Topino";  //Messaggio invio riuscito
			//echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";
		}
	}

}

partendo da qui, dove dovrei mettere il tuo codice? In che punto?
 
Si hanno spostato.

Allora:
- Tu hai una pagina di contatto
- hai del testo prima di questo form (che non si sa che roba sia XD)
- Supponiamo che il testo che hai prima della form sia: "Compila il seguente modulo e premi invio.."
- Quindi logicamente una volta che uno preme INVIO gli riappare la stessa pagina di contatti ma con il messaggino di conferma scritto sopra la form stessa, e senza la scritta "Compila il seguente modulo e premi invio..", giusto? penso di si.

Io ora non so di preciso come farlo perchè ci dovrei fare delle prove sopra, ma di primo acchito mi viene da pensare ad una soluzione così:
PHP:
if (!mail($email,$oggetto,$messaggiohtml,$header)){
            //Messaggio che appare se clicco invio e tutti i campi sono vuoti
			$risposta = "formnoncompleta";
            echo '<div>
            <p><h3>C\'è stato un errore nell\'invio della mail</h3></p>
            Cortesemente riprova e se vedi che il problema persiste, contattami direttamente</div>'; //    Messaggio di errore invio mail
            echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";
        }else {
			$risposta = "messaggiospedito";
            header('location: contatti4.php');
            echo '<div class="testo">Grazie, ti contatterò nei prossimi giorni. Denis Topino</div>';
            exit(0);
            //echo "Grazie, ti contatterò nei prossimi giorni. Denis Topino";  //Messaggio invio riuscito
            //echo "<meta http-equiv='Refresh' content='3; URL=contatti3.php'>";

All'inizio dell'IF ed all'inizio dell'ELSE ho assegnato un valore ad una variabile chiamata "risposta".

Poi al posto del testo che hai prima della form ci metti questo:
PHP:
<?php	if (isset($_GET['risposta']))
				{
				switch($_GET['risposta'])
					{
					//Qui il codice da mostrare sopra il form quando il messaggio viene spedito
					case "messaggiospedito":	echo 'Messaggio spedito! grazie per averci contattato..';
					
					//Qui il codice da mostrare sopra il form se mancano dei campi
					case "formnoncompleta":		echo 'Non hai compilato il form correttamente, riprova!';
					}
				}
				//Qui il codice da mostrare sopra il form la prima volta che si visualizza la pagina
				else{echo 'Compila il form e premi invio per spedire la richiesta';}
?>
Puo funzionare come può non funzionare perchè non avendo il codice completo della pagina non ho neanche capito bene come vuoi che sia questo messaggio e in PHP anche io non è che sia chissà a quale livello, spero ti possa servire.
Ciao
 
Ultima modifica:
Grazie Jonn!
Allora, solo per chiarire alcuni dubbi. Io sto creando il sito per un amico il quale in questa pagina ha voluto inserire prima del form di contatto un testo dove spiega alcune cose. Per la serie, se vuoi scrivimi qui, chiamami qua, o se vuoi compila il form e poi subito dopo il form in oggetto.
Se hai avuto modo di provare saprai che, se la pagina ha solo il codice html del form ed il codice php per l'analisi e l'invio, al momento di cliccare su invia la risposta sarà un avviso dato dalla riga "echo" nel codice php che apparirà nella pagina priva del form stesso. Sia chiaro che non è una regola, posso sbagliarmi.
Naturalmente avendo questo testo prima del form quando ricarica la pagina senza il form mi ricarica comunque il testo incriminato. Proverò quello che mi hai detto ed usare la funzione switch come da te scritto.

P.S. se poi sapessi darmi qualche dritta su un altro thread sempre qua in php te ne sarei grato. :fonzie::fonzie:
 

Discussioni simili