Page 1 sur 1

récupérer données checkbox formulaire

Posté : 09 mai 2011, 13:47
par ch_pl
Bonjour à tous,

j'ai récupéré un code php pour un formulaire et je souhaiterai y inclure des checkbox, ce que j'ai réussi à faire, mais je n'arrive pas à récupérer les données quand je coche les box et que je m'envoie le formulaire...vu que je ne suis qu'intégrateur, je ne connais que quelques bases de php et là je suis complètement perdu...

Merci par avance si quel'q'un a une solution à me proposer.

Voici le code :

<?php



/*
********************************************************************************************
CONFIGURATION
********************************************************************************************
*/
// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
$destinataire = '[email protected]';

// copie ? (envoie une copie au visiteur)
$copie = 'non';

// Action du formulaire (si votre page a des paramètres dans l'URL)
// si cette page est index.php?page=contact alors mettez index.php?page=contact
// sinon, laissez vide
$form_action = $_SERVER["PHP_SELF#contact"];

// Messages de confirmation du mail
//$message_envoye = "Merci !";
//$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

// Message d'erreur du formulaire
//$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

/*
********************************************************************************************
FIN DE LA CONFIGURATION
********************************************************************************************
*/

/*
* cette fonction sert à nettoyer et enregistrer un texte
*/
function Rec($text)
{
$text = trim($text); // delete white spaces after & before text
if (1 === get_magic_quotes_gpc())
{
$stripslashes = create_function('$txt', 'return stripslashes($txt);');
}
else
{
$stripslashes = create_function('$txt', 'return $txt;');
}

// magic quotes ?
$text = $stripslashes($text);
$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
$text = nl2br($text);
return $text;
};

/*
* Cette fonction sert à vérifier la syntaxe d'un email
*/
function IsEmail($email)
{
$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
return (eregi($pattern,$email)) ? true : false;
};

$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

// si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
$nom = (isset($_POST['nom'])) ? Rec($_POST['nom']) : '';
$prenom = (isset($_POST['prenom'])) ? Rec($_POST['prenom']) : '';
$email = (isset($_POST['email'])) ? Rec($_POST['email']) : '';
$objet = (isset($_POST['objet'])) ? Rec($_POST['objet']) : '';
$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';

if (isset($_POST['envoi']))
{
// On va vérifier les variables et l'email ...
$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
$err_formulaire = (IsEmail($email)) ? false : true;



if (($nom != '') && ($prenom != '') && ($email != '') && ($objet != '') && ($message != '') )
{
// les 4 variables sont remplies, on génère puis envoie le mail
$headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";


// envoyer une copie au visiteur ?
if ($copie == 'oui')
{
$cible = $destinataire.','.$email;
}
else
{
$cible = $destinataire;
};

// Remplacement de certains caractères spéciaux
$message = html_entity_decode($message);
$message = str_replace(''',"'",$message);
$message = str_replace('&#8217;',"'",$message);
$message = str_replace('<br>','',$message);
$message = str_replace('<br />','',$message);

// Envoi du mail
if (mail($cible, $objet, $message, $headers))
{
echo '<p class="envoiMess">Merci !</p>'."\n";
echo "<p class='formErreur'><a href=".$form_action.">Envoyer un autre message...</a></p>";
}
else
{
echo '<p class="envoiMess">Raté... Réessayer pour voir !</p>'."\n";
};
}
else
{
// une des 3 variables (ou plus) est vide ...
echo '<p class="formErreur">Vérifiez que tous les champs soient bien remplis.</p>'."\n";
$err_formulaire = true;
};
}; // fin du if (!isset($_POST['envoi']))

if (($err_formulaire) || (!isset($_POST['envoi'])))
{
// afficher le formulaire
echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
echo ' <ul>'."\n";
echo ' <li>'."\n";
echo ' <input type="text" id="objet" name="objet" value="Organisme"'.stripslashes($objet).'" tabindex="1" onclick="clearf()"/>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <input type="text" id="nom" name="nom" value="Nom"'.stripslashes($nom).'" tabindex="2" onclick="clearf2()"/>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <input type="text" id="prenom" name="prenom" value="Prénom"'.stripslashes($prenom).'" tabindex="3" onclick="clearf3()"/>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <input type="text" id="email" name="email" value="Email"'.stripslashes($email).'" tabindex="4" onclick="clearf4()"/>'."\n";
echo ' </li>'."\n";
echo ' </ul>'."\n";
echo ' <ul>'."\n";
echo ' <li>'."\n";
echo ' <textarea id="message" name="message" value="Message" tabindex="5" onclick="clearf5()">'.stripslashes($message).'</textarea>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <p id="demandeDevis">Demande de devis</p>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <p class="optionsDevis"><input type="checkbox" name="options[]" value="Du monde entier au coeur du monde">Du monde entier au coeur du monde</p>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <p class="optionsDevis"><input type="checkbox" name="options[]" value="Les trois ptits loups et le grand méchant cochon">Les trois ptits loups et le grand méchant cochon</p>'."\n";
echo ' </li>'."\n";
echo ' <li>'."\n";
echo ' <p class="optionsDevis"><input type="checkbox" name="options[]"'.$options.' value="Musiques classiques, musiques du monde">Musiques classiques, musiques du monde</p>'."\n";
echo ' </li>'."\n";
echo ' </ul>'."\n";

echo ' <div id="submit"><input border=0 src="img/submit.png" type="image" value="submit" name="envoi" align="middle" ></div>'."\n";
echo '</form>'."\n";
};
?>

Re: récupérer données checkbox formulaire

Posté : 09 mai 2011, 14:12
par Mazarini
Bonjour,

D'après ce que j'ai vu, le résultat des checkbox se trouve dans $_POST['options'][0], $_POST['options'][1] et $_POST['options'][2].
En fait ces 3 variables ne sont définies que lorsque la case est cochée. Dans le cas contraire, rien n'est défini.

Pour un traitement plus simple, il serait peut être plus facile de donner des noms spécifiques aux variables plutôt qu'un tableau. Quoique tout dépends de ce que tu veux faire du résultats.

Il est tout à fait possible de faire :
if (IsSet($_POST['options']) {
   $options = $_POST['options'];
} else {
  $options = array();
}
foreach ($options as option) {
  traiement d'une option cochée dont la valeur est dans $option
}

Re: récupérer données checkbox formulaire

Posté : 09 mai 2011, 18:29
par ch_pl
Merci pour ta réponse, je teste tout de suite.

Re: récupérer données checkbox formulaire

Posté : 09 mai 2011, 18:42
par ch_pl
Je n'arrive pas à le faire marcher... Pourrais-tu m dire où mettre ce code stp?
Et à quoi correspond foreach et que faut-il mettre entre les accolades?

Re: récupérer données checkbox formulaire

Posté : 09 mai 2011, 21:40
par moogli
foreach

$options va contenir toutes les qui ont étaient coché sur le formulaire (et pas celle qui n'ont pas étés cochées).
A partir de la a toi de traiter les cases cochées en fonction de ce que tu souhaite en faire ;)


@+

Re: récupérer données checkbox formulaire

Posté : 09 mai 2011, 23:38
par ch_pl
Merci pour ta réponse Moogli, mais le problème c'est que je suis vraiment un gros noob en php, à mon grand regret d'ailleurs, faut que je travaille ca absolument...

Mais là je dois faire ce formulaire pour un site et je n'avais pas prévu les cases à cocher qui me font bien c*****.

J'ai essayé avec foreach mais je ne comprends pas comment ça marche, du coup j'ai essayé un autre truc :
if(!empty($_POST["options"])) {
		for ($i = 0; $i < count($_POST["options"]); $i++) 
echo $_POST["options"][$i]." - "; }
Ce qui marche bien car je récupère les value de mes input, mais cela s'affiche dans ma page alors que moi je voudrais les récupérer dans le mail, comme le message.

Pourrai-tu me dire où le placer, j'ai essayé 15 000 solutions mais rien ne marche...

Re: récupérer données checkbox formulaire

Posté : 10 mai 2011, 00:28
par moogli
nikel tu à la base, maintenant il te manque la concaténation.

ce qu'il te faut c'est, en lieu et place du echo, concaténer les valeurs des inputs avec la variable $message qui est le corps du mail qui te sera envoyé.
Il faut que tu fasse ce traitement juste avant le if (mail ( ... )) :)


@+

Re: récupérer données checkbox formulaire

Posté : 10 mai 2011, 01:11
par ch_pl
Merci beaucoup Moogli, ça marche parfaitement !

Et j'ai une dernière question au passage : Quand le formulaire est envoyé, on revient sur la page avec PHP_SELF . Je suis dans une navigation horizontale avec un système d'ancre et un scrollTo en javascript pour aller d'une section à l'autre (d'où le PHP_SELF#contact, même si je ne sais pas si c'est vraiment utile...). Ca marche nikel lorsqu'on envoie le formulaire, on revient bien sur #contact en repartant de #home avec toutes les autres sections qui défilent, ce qui est l'effet recherché,
On tombe donc sur un "Merci" et une phrase "Envoyer un autre message".
mais lorsque que je clique sur envoyer un autre message, je vais sur la page d'accueil au lieu de retourner sur la page contact alors que je voudrai le même comportement que lorsque j'envoie le formulaire.

C'est ptet pas super clair ce que je te raconte... Mais à tout hasard si tu entrevois une solution, elle serait la bienvenue. Je continue de chercher de tte facons.

Merci encore !

Le code si des gens sont intéressés :
if(!empty($_POST["options"])) {
			for ($i = 0; $i < count($_POST["options"]); $i++) 
			$message = $message."\n".$_POST["options"][$i]." - "; 
			}
et le code complet :
<?php



/*
		********************************************************************************************
		CONFIGURATION
		********************************************************************************************
	*/
	// destinataire est votre adresse mail. Pour envoyer à plusieurs à la fois, séparez-les par une virgule
	$destinataire = '[email protected]';

	// copie ? (envoie une copie au visiteur)
	$copie = 'non';

	// Action du formulaire (si votre page a des paramètres dans l'URL)
	// si cette page est index.php?page=contact alors mettez index.php?page=contact
	// sinon, laissez vide
	$form_action = $_SERVER["PHP_SELF#contact"];

	// Messages de confirmation du mail
	//$message_envoye = "Merci !";
	//$message_non_envoye = "L'envoi du mail a échoué, veuillez réessayer SVP.";

	// Message d'erreur du formulaire
	//$message_formulaire_invalide = "Vérifiez que tous les champs soient bien remplis et que l'email soit sans erreur.";

	/*
		********************************************************************************************
		FIN DE LA CONFIGURATION
		********************************************************************************************
	*/

	/*
	 * cette fonction sert à nettoyer et enregistrer un texte
	 */
	function Rec($text)
	{
		$text = trim($text); // delete white spaces after & before text
		if (1 === get_magic_quotes_gpc())
		{
			$stripslashes = create_function('$txt', 'return stripslashes($txt);');
		}
		else
		{
			$stripslashes = create_function('$txt', 'return $txt;');
		}

		// magic quotes ?
		$text = $stripslashes($text);
		$text = htmlspecialchars($text, ENT_QUOTES); // converts to string with " and ' as well
		$text = nl2br($text);
		return $text;
	};

	/*
	 * Cette fonction sert à vérifier la syntaxe d'un email
	 */
	function IsEmail($email)
	{
		$pattern = "^([a-z0-9_]|\\-|\\.)+@(([a-z0-9_]|\\-)+\\.)+[a-z]{2,7}$";
		return (eregi($pattern,$email)) ? true : false;
	};

	$err_formulaire = false; // sert pour remplir le formulaire en cas d'erreur si besoin

	// si formulaire envoyé, on récupère tous les champs. Sinon, on initialise les variables.
	$nom     = (isset($_POST['nom']))     ? Rec($_POST['nom'])     : '';
	$prenom     = (isset($_POST['prenom']))     ? Rec($_POST['prenom'])     : '';
	$email   = (isset($_POST['email']))   ? Rec($_POST['email'])   : '';
	$objet   = (isset($_POST['objet']))   ? Rec($_POST['objet'])   : '';
	$message = (isset($_POST['message'])) ? Rec($_POST['message']) : '';
	

	if (isset($_POST['envoi']))
	{
		
		// On va vérifier les variables et l'email ...
		$email = (IsEmail($email)) ? $email : ''; // soit l'email est vide si erroné, soit il vaut l'email entré
		$err_formulaire = (IsEmail($email)) ? false : true;
		
		 

		if (($nom != '') && ($prenom != '') && ($email != '') && ($objet != '') && ($message != '') )
		{
			// les 4 variables sont remplies, on génère puis envoie le mail
			$headers = 'From: '.$prenom.' '.$nom.' <'.$email.'>' . "\r\n";
			

			// envoyer une copie au visiteur ?
			if ($copie == 'oui')
			{
				$cible = $destinataire.','.$email;
			}
			else
			{
				$cible = $destinataire;
			};

			// Remplacement de certains caractères spéciaux
			$message = html_entity_decode($message);
			$message = str_replace(''',"'",$message);
			$message = str_replace('&#8217;',"'",$message);
			$message = str_replace('<br>','',$message);
			$message = str_replace('<br />','',$message);

			if(!empty($_POST["options"])) {
			for ($i = 0; $i < count($_POST["options"]); $i++) 
			$message = $message."\n".$_POST["options"][$i]." - "; 
			}
			
			// Envoi du mail
			if (mail($cible, $objet, $message, $headers))
			{
				echo '<p class="envoiMess">Merci !</p>'."\n";
				echo "<p class='formErreur'><a href=".$form_action.">Envoyer un autre message...</a></p>";
			}
			else
			{
				echo '<p class="envoiMess">Raté... Réessayer pour voir !</p>'."\n";
				echo "<p class='formErreur'><a href=".$form_action.">Envoyer un autre message...</a></p>";
			};
		}
		else
		{
			// une des 3 variables (ou plus) est vide ...
			echo '<p class="formErreur">Vérifiez que tous les champs soient bien remplis.</p>'."\n";
			$err_formulaire = true;
		};
	}; // fin du if (!isset($_POST['envoi']))

	if (($err_formulaire) || (!isset($_POST['envoi'])))
	{
		// afficher le formulaire
		echo '<form id="contact" method="post" action="'.$form_action.'">'."\n";
		echo '		<ul>'."\n";
		echo '			<li>'."\n";
		echo '			<input type="text" id="objet" name="objet" value="Organisme"'.stripslashes($objet).'" tabindex="1" onclick="clearf()"/>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '			<input type="text" id="nom" name="nom" value="Nom"'.stripslashes($nom).'" tabindex="2" onclick="clearf2()"/>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '			<input type="text" id="prenom" name="prenom" value="Prénom"'.stripslashes($prenom).'" tabindex="3" onclick="clearf3()"/>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '			<input type="text" id="email" name="email" value="Email"'.stripslashes($email).'" tabindex="4" onclick="clearf4()"/>'."\n";
		echo '		</li>'."\n";
		echo '		</ul>'."\n";
		echo '		<ul>'."\n";
		echo '		<li>'."\n";
		echo '			<textarea id="message" name="message" value="Message" tabindex="5" onclick="clearf5()">'.stripslashes($message).'</textarea>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '		<p id="demandeDevis">Demande de devis</p>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '		<p class="optionsDevis"><input type="checkbox" name="options[]"'.$options.' value="Du monde entier au coeur du monde">Du monde entier au coeur du monde</p>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '		<p class="optionsDevis"><input type="checkbox" name="options[]"'.$options.' value="Les trois ptits loups et le grand méchant cochon">Les trois ptits loups et le grand méchant cochon</p>'."\n";
		echo '		</li>'."\n";
		echo '		<li>'."\n";
		echo '		<p class="optionsDevis"><input type="checkbox" name="options[]"'.$options.' value="Musiques classiques, musiques du monde">Musiques classiques, musiques du monde</p>'."\n";
		echo '		</li>'."\n";
		echo '		</ul>'."\n";

		echo '	<div id="submit"><input border=0 src="img/submit.png" type="image" value="submit" name="envoi" align="middle" ></div>'."\n";
		echo '</form>'."\n";
	};
?>

Re: récupérer données checkbox formulaire

Posté : 10 mai 2011, 03:35
par ch_pl
j'ai mis ça comme code :
<a href=\"$PHP_SELF?#contact\"> et ca marche mais je ne peux faire que deux envois de formulaires, après le lien ne marche plus...

Re: récupérer données checkbox formulaire

Posté : 10 mai 2011, 10:54
par moogli
hum en fait tu ne met rien dans l'action tu "reste" sur la même page.

sur le même principe sur tu utilise simple ?var=value tu reste sur la même page et fournis en plus le $_GET['var'], donc sur le même principe si tu ne met que action="#contact" dans le formulaire cela fonction toujours quelque soit la page qui affiche le formulaire tu arrivera sur la même page à l'ancre voulu.

pour ce qui est de la concaténation il existe une variante qui est le .= qui veut dire ajouter à la variable précédente.
donc $message = message .' autre chaine', peut être écrit plus rapidement $message .= 'autre chaine'; :)


@+

Re: récupérer données checkbox formulaire

Posté : 10 mai 2011, 18:29
par ch_pl
Merci pour tout moogli.

Pour le PHP_SELF, ça ne marche toujours pas... Tant pis je pense que je vais espérer que personne ne veuille renvoyer le formulaire plus de deux fois... Parce que si je fais comme tu m'as dit, le formulaire ne se recharge pas, et moi j'ai besoin que la page se recharge tout en naviguant automatiquement vers l'ancre #contact.
Je comprends vraiment pas pourquoi ca marche deux fois et pas la troisième...