form php con checkbox

massimiliano76

Nuovo Utente
26 Apr 2016
1
0
0
salve a tutti,
ho un problema con la formazione di un form contenente dei checkbox. in pratica non riesco ad includere nel messaggio in uscita le voci selezionate nei checkbox. qualcuno potrebbe darmi un aiuto? ho incluso lo script del form.
così com'è il messaggio esce, ma se sulla riga 46 provo ad includere 'interessi', alla sottoscrizione mi restituisce errore.
grazie anticipatamente a chiunque possa dare qualche consiglio.

PHP:
<html>

<script>
 function goBack()
   {
     window.history.back()
   }
 </script>

<body>
<div class=" clear">

<?php
if (isset($_REQUEST['email'])) {
	//send email
	$email = $_REQUEST['email'] ;
	$subject = $_REQUEST['subject'] ;
	$message = $_REQUEST['message'] ;
	
	
	
	echo "<table class='table' width='50%'>
		<tr class='table_header'>
			<td>Contact Form</td>
		</tr>
		<tr class='row1'>
			<td>";
				if ($email == "") {
					echo "ERROR: you have to fill in a E-mail adress<br>";
					echo "<input type='button' value='Back' onclick='goBack()' />";
					exit;
				}
				if ($subject == "") {
					echo "ERROR: you have to fill in a subject<br>";
					echo "<input type='button' value='Back' onclick='goBack()' />";
					exit;
				}
				if ($message == "") {
					echo "ERROR: you have to fill in a message<br>";
					echo "<input type='button' value='Back' onclick='goBack()' />";
					exit;
				
				}
				
			mail($my_email, $subject,
			$message,  "From:" . $email);
			echo "Grazie per esserti iscritto. Potrai aggiornare integrare e cancellare i tuoi dati dalla nostra mail list in qualsiasi momento, ricompilando il form con la richiesta specifica<br>Your message has been send.
			</td>
		</tr>
	</table>";
 
} else {

	echo "<form method='post' action='contatti.php'>
		<table class='table' width='100%'>
			<tr class='table_header'>
				<td colspan='2'><h1>Contatti</h1><h2>Sezione in lavorazione, potete comunque conttatarci ad uno degli idirizzi e mail sopra indicati. Grazie per la comprensione</h2></td>
				</tr>
				<tr><td colspan='4'><h1>Iscrivendoti alla nostra newsletter sarai aggiornato sulle nostre migliori proposte di viaggio</h1></td>
				</tr>

			</tr>
			<tr class='row1'>
				<td>Email:</td>
				<td><input name='email' type='text' /></td>
			</tr>
			<tr class='row1'><td>Oggetto:</td>
				<td>
					<input name='subject' type='text' />
				</td>
			</tr>
			<tr class='row1'>
				<td valign='top'>Messaggio:</td>
				<td>
					<textarea name='message' rows='8' cols='40'></textarea>
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr></td>
				<td class='row1'><hr></td>
				</tr>
			<tr>
			<td></td>
			<td>Selezionate le aree d'interesse di cui vorrete essere aggiornati</td></tr>

				
			<tr class='row1'>
				<td valign='top'>Escursioni:</td>
				<td>
				<input type='checkbox' name='interessi[]' value='escursioni' />
				
					
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'></td>
				</tr>

			<tr class='row1'>
				<td valign='top'>Eventi:</td>
				<td>
					<input type='checkbox' name='interessi[]' value='eventi' />

				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'></td>
				</tr>

			<tr class='row1'>
				<td valign='top'>Dove Dormire:</td>
				<td>
				<input type='checkbox' name='interessi[]' value='dove_dormire' />
				
					
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'></td>
				</tr>
				
			<tr class='row1'>
				<td valign='top'>Dove Mangiare:</td>
				<td>
				<input type='checkbox' name='interessi[]' value='dove_mangiare' />
				
					
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'></td>
				</tr>

			<tr class='row1'>
				<td valign='top'>Noleggio Auto:</td>
				<td>
				<input type='checkbox' name='interessi[]' value='noleggio_auto' />
				
					
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'></td>
				</tr>

			<tr class='row1'>
				<td valign='top'>Transfert:</td>
				<td>
				<input type='checkbox' name='interessi[]' value='transfert' />
				
					
				</td>
			</tr>
			<tr><td class='row1'><hr></td>
				<td class='row1'><hr align='left' width='90px'></td>
				<td class='row1'><hr></td>
				</tr>


			<tr class='row1'>
				<td></td>				
				<td valign='top'><hr>* Autorizzazione al trattamento dei dati personali<br></td>
				
				<td><input type='checkbox' name='autorizzazione[]' value='si, autorizzo al trattamento dei dati personali' /></td>
				
			</tr>
			<tr class='row1'>
				<td valign='top'></td>
				<td>
					
				</td>
			</tr>



			<tr class='row1'>
				<td>&nbsp;</td>
				<td>
					<input type='submit' value='Invia' />
				</td>
			</tr>
		</table>
	</form>";
}
?>
 
Ultima modifica:
ciao
ti schematizzo
PHP:
<?php
if(isset($_POST['invia'])){
	//attento $_POST['interessi'] è un array di array
	if($_POST['interessi']==NULL){
		$interesse="nessun interesse<br>";
	}else{
		$interesse="interessato a: ";
		foreach($_POST['interessi'] as $int){
			$interesse .=" ".$int." ";
		}
		$interesse .=" <br>";
	}
	echo $interesse;
}
?>
<form action="#" method="post">
	uno <input type='checkbox' name='interessi[]' value='uno' /><br>
	due <input type='checkbox' name='interessi[]' value='due' /><br>
	tre <input type='checkbox' name='interessi[]' value='tre' /><br>
    <input name="invia" type="submit" id="invia" value="Invia">
</form>

poi ti consiglio:
per l'autorizzazione della privacy ti conviene usare i radio
HTML:
si <input name="autorizzazione" type="radio" value="si" checked> no<input name="autorizzazione" type="radio" value="no">

per la verifica dell'email usa
PHP:
<?php
//....
if(!filter_var($email, FILTER_VALIDATE_EMAIL)){
	echo "ERROR: you have to fill in a E-mail adress<br>";
	echo "<input type='button' value='Back' onclick='goBack()' />";
	exit;
} 
//.....
?>
verificando solo che sia vuota uno potrebbe inviarti ahahahhhh che non è un indirizzo

p.s.
quando scrivi usa gli apposisti bccode per ragghiudere gli script (seconda riga di formattazione del post, ultime tre iconcine)
 
Attenzione che per validare un indirizzo email con i filtri non basta usare il filtro validate ma ci vuiole anche il sanitize, questo perché validate, valida se un indirizzo è scritto nel modo corretto ma non elima i caratteri spuri, per questo si utilizza il filtro sanitize.
In pratica bisogna fare questo giochino:
PHP:
function filtraEmail( $indirizzo ){
    $emailSana = filter_var($indirizzo, FILTER_SANITIZE_EMAIL );
    if ( filter_var( $emailSana, FILTER_VALIDATE_EMAIL )) {
        return $emailSana;
    }
return false;
}
Ovvero la funzione prima sanitizza gli indirizzi email per caratteri supuri, cioè fuori dalle regole dell'RFC 2822 ( mi pare ) poi se è giusta con il controllo di validazione controlla se è anche scritta bene e in quel caso restituisce l'indirizzo, altrimenti restituisce false.

Poi :D
Se si usano i filtri per una cosa, tanto vale usarli sempre e per tutto, compreso il loro meccanismo sono semplici da usarsi.
Per verificare l'indirizzo email basta richiamare la funzione come una callback, così:
PHP:
function filtraEmail( $indirizzo ){
    $emailSana = filter_var($indirizzo, FILTER_SANITIZE_EMAIL );
    if ( filter_var( $emailSana, FILTER_VALIDATE_EMAIL )) {
        return $emailSana;
    }
return false;
}

//  Semplificando molto....
$indirizzoEmail = filter_input( INPUT_POST, 'email', FILTER_CALLBACK, array( 'options' => 'filtraEmail' ));
//  E in indirizzoEmail ti ritrovi l'indirizzo passato se giusto, altrimenti un valore false se scritto male.
 
Altra cosa, se ho capito bene il problema esposto da @massimiliano76, attenzione perché se un valore non esiste il protocollo http/s passa un campo vuoto se questo è definito ( vedi il caso di un input di testo con value="" ) ma se non esiste non passa proprio nulla, come se il campo in questione proprio non fosse mai esistito.
E' il caso dei checkbox e radiobutton, se inserisci nel codice un checkbox che deve ritornarti un valore 1 se spuntato ( checked ) nel caso non sia spuntato non viene riportato nulla!
In altre parele, se il campo in questione si chiama name="privacy" e il suo value è value="1" e se questo è spuntato, nell'array POST ti ritrovi la copia valore privacy=1 ma se non è spuntato non ti trovi proprio il valore privacy, semplicemente non esiste perché per lui è importante ciò che è definito in value, ma qui non c'è dato che non è spuntato e quindi value è indefinito.
E non passa false o null perché sono due valori definiti, ma non può essere sicuro a priori di ciò che il programmatore voleva fare.
Quindi se il campo privacy esiste ed è uguale a 1 è significativo, se non esiste, ma tu te lo aspettavi, allora è 0.
 
ciao marcograzia
per il filter_var hai ragione anche se l'avevo fatto per semplificare, quello che non capisco è cosa intendi quando parli del radio privacy, io lo terrei diviso e indipendente dalla scelta dell'interesse
in quanto l'interesse è indipendente da dare l'autorizzazione o meno alla privacy
 

Discussioni simili