8791 sujets

Développement web côté serveur, CMS

Bonjour.

Je suis en train de faire une page de contact en php. Je n'y connais pas grand chose. Pour la faire, j'ai utilisé un modèle trouvé sur le net.

Mon soucis est qu'il faut que j'ajoute 2 checkbox déjà cochées, ce que j'ai fait. Malheureusement, je n'ai aucune idée de la manière de traiter ces checkbox lorsque les deux choix sont cochés. On me renvoie toujours un message comme si le deuxième choix était coché:

  Bonjour largo,
Votre message nous a bien été envoyé et nous tâcherons de vous répondre le plus rapidement possible.
   - Votre courriel : xxxxxx 
   - L'objet de votre message : Demande d'iinformations 
	[b]-Votre abonnement : liste de diffusion [/b]
   - Votre message : 
aiwfoiwfe 
   Merci et à bientôt sur  http://academiedapprentissage.com  !


Quelqu'un pourrait m'aider s.v.p? Merci

Voici l'adresse du formulaire: http://academiedapprentissage.com/contact.php

De plus, mais c'est bcp moins important puisque je peux tout simplement l'enlever, je n'arrive pas à comprendre ce que je dois mettre pour mon bouton "retour" pour revenir à la page d'accueil

ET oui, je sais que l'affichage lorsque je reçois la confirmation sur mon mac est à chier, mais j'ai abandonné l'idée de changer le code après avoir passé 3 soirées à essayer de comprendre comment faire.
Modifié par largowin (11 Jan 2010 - 01:31)
Salut,

en général pour une question concernant PHP il faut mettre le code puisque ça ne se devine pas en ligne. Smiley cligne

En l'occurrence c'est inutile puisque ça ne peut effectivement pas fonctionner vu que tu as donné le même nom aux INPUT checkbox.

Un petit exemple :
<?php
// Déclaration des options (id / label)
$options = array(
	'option_cadeau'		=>	'S.V.P. Envoyez-moi le cadeau gratuit.', 
	'option_mailing'	=>	'S.V.P. Ajoutez-moi sur votre liste de diffusion.'
);

// Déclaration des champs (vides ou récupération des $_POST)...
$nom = !empty($_POST['nom']) ? trim($_POST['nom']) : ''; // 
$prenom = !empty($_POST['prenom']) ? trim($_POST['prenom']) : ''; // 
// etc.

$erreurs = array();

// Si le formulaire a été envoyé, on teste les champs...
if($_SERVER['REQUEST_METHOD'] == 'POST') {
	if(empty($nom)) {
		$erreurs[] = 'Le nom doit être renseigné !';
	}
	if(empty($prenom)) {
		$erreurs[] = 'Le prénom doit être renseigné !';
	}
	// etc.

	// Si aucune erreur
	if(empty($erreurs)) {

		$msg = '';

		// Récupération des options cochées
		if(!empty($_POST['options'])) {
			$msg .= "Options :\n";
			foreach($options as $id_option => $label) {
				if(isset($_POST['options'][$id_option])) { 
					$msg .= "* ".$label."\n";
				}
			}
		}
		
		// traitement (envoi de mail)

		header("Location: confirmation.php"); // redirection vers page de confirmation du traitement
	}
} else { // sinon (premier affichage) on initialise les options à checked
	foreach($options as $id_option => $label) {
		$_POST['options'][$id_option] = 'on';
	}
}
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" lang="fr">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
<title>Test formulaire</title>
<style type="text/css">
.alert {
	color:#990000;
}
</style>
</head>
<body>
<?php
// erreur(s) à afficher ?
if(!empty($erreurs)) {
	foreach($erreurs as $erreur) {
		echo '<p class="alert">'.$erreur."</p>\n";
	}
}
?>
<form action="<?php echo htmlspecialchars($_SERVER['PHP_SELF']); ?>" method="post">
	<fieldset>
		<legend>Identité</legend>
		<p>
			<label for="nom">Nom : </label>
			<input type="text" id="nom" name="nom" value="<?php echo htmlspecialchars($nom); ?>" />
		</p>
		<p>
			<label for="prenom">Prénom : </label>
			<input type="text" id="prenom" name="prenom" value="<?php echo htmlspecialchars($prenom); ?>" />
		</p>
	</fieldset>
	<fieldset>
		<legend>Options</legend>
<?php // affichage des options
	foreach($options as $id_option => $label) {
		$checked = isset($_POST['options'][$id_option]) ? ' checked="checked"' : '';
		echo "\t\t\t".'<p><input type="checkbox" name="options['.$id_option.']" id="'.$id_option.'"'.$checked.' />';
		echo '<label for="'.$id_option.'">'.$options[$id_option]."</label></p>\n";
		$compteur_option ++;
	}

?>
	</fieldset>
	<p>
		<input type="submit" value="Envoyer" />
	</p>
</form>
</body>
</html>
D'autre part les LABEL for ciblent un id et pas un name. (Re)lire http://openweb.eu.org/articles/formulaire_accessible
Modifié par Heyoan (09 Dec 2009 - 01:10)
Heyoan a écrit :


en général pour une question concernant PHP il faut mettre le code puisque ça ne se devine pas en ligne. Smiley cligne


Oups.! C'est bien trop vrai! Pas très avisé de ma part...

Les voici, en attendant de jeter un coup d'oeil à tes explications et lien. Merci.



<?php
if (isset($_POST["envoyer"])){ // Si le formulaire a été soumis
    $etat = "erreur"; // On initialise notre état à erreur, il sera changé à "ok" si la vérification du formulaire est un succès, sinon, il reste à erreur

    // On récupère les champs du formulaire, et on arrange leur mise en forme
    if (isset($_POST["son_pseudo"])) $_POST["son_pseudo"]=trim(stripslashes($_POST["son_pseudo"])); // trim()  enlève les espaces en début et fin de chaine

    if (isset($_POST["son_courriel"])) $_POST["son_courriel"]=trim(stripslashes($_POST["son_courriel"])); // stripslashes()  retire les backslashes ==> \' devient '

    if (isset($_POST["son_url"])) $_POST["son_url"]=trim(stripslashes($_POST["son_url"]));
	
	if (isset($_POST["fonction"])) $_POST["fonction"]=trim(stripslashes($_POST["fonction"]));

    if (isset($_POST["son_objet"])) $_POST["son_objet"]=trim(stripslashes($_POST["son_objet"]));
	
	if (isset($_POST["abonnement"])) $_POST["abonnement"]=trim(stripslashes($_POST["abonnement"]));

    if (isset($_POST["son_message"])) $_POST["son_message"]=trim(stripslashes($_POST["son_message"]));

    // Après la mise en forme, on vérifie la validité des champs
    if (empty($_POST["son_pseudo"])) { // L'utilisateur n'a pas rempli le champ pseudo
        $erreur="Vous n'avez pas entr&eacute; votre nom..."; // On met dans erreur le message qui sera affiché
        }
        elseif (empty($_POST["son_courriel"])) { // L'utilisateur n'a pas rempli le champ email
            $erreur="Nous avons besoin de votre courriel pour vous r&eacute;pondre...";
        }
        elseif (!eregi("^[0-9a-z]([-_.]?[0-9a-z])*@[0-9a-z]([-.]?[0-9a-z])*\.[a-z]{2,4}$",$_POST["son_courriel"])){ // On vérifie si l'email est bien de la forme messagerie@domaine.tld (cf cours d'expressions régulières)
            $erreur="Votre adresse courriel n'est pas valide...";
        }
        elseif (empty($_POST["son_objet"])) { // L'utilisateur n'a pas rempli le champ objet
            $erreur="Vous devez entrer la raison de votre message...";
        }
        elseif (empty($_POST["son_message"])) { // L'utilsateur n'a écrit aucun message
            $erreur="Merci de saisir un message...";
        }
        else { // Si tous les champs sont valides, on change l'état à ok
            $etat="ok";
        }
}
else { // Sinon le formulaire n'a pas été soumis
    $etat="attente"; // On passe donc dans l'état attente
}

if ($etat!="ok"){ // Le formulaire a été soumis mais il y a des erreurs (etat=erreur) OU le formulaire n'a pas été soumis (etat=attente)
    if ($etat=="erreur"){ // Cas où le formulaire a été soumis mais il y a des erreurs
        echo "<span style=\"color:red\">".$erreur."</span><br /><br />\n"; // On affiche le message correspondant à l'erreur
    }
?>

<!-- Formulaire HTML qu'on affiche dans l'état attente ou erreur -->
<form method="post" action="<?php echo $_SERVER["PHP_SELF"]; ?>"> <!-- Les données du formulaire seront récupérée avec la méthode POST, et action correspond à la page contenant le formulaire -->
    <p style="text-align:left">
        <label for="son_pseudo">Votre nom  *</label>
        <br /> <!-- Intitulé du champ pseudo -->
        <input type="text" size="40" name="son_pseudo" id="son_pseudo" value="<?php
        if (!empty($_POST["son_pseudo"])) {
        // le pseudo de l'expéditeur a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_pseudo"],ENT_QUOTES); // htmlspecialchars() convertit les caractères spéciaux en leurs code html, exemple : & devient &amp;
        }
        ?>" />

        <br />

        <label for="son_courriel">Votre courriel *</label>
        <br /> <!-- Intitulé du champ courriel -->
        <input type="text" size="40" name="son_courriel" id="son_courriel" value="<?php
        if (!empty($_POST["son_courriel"])) {
        // le courriel de l'expéditeur a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_courriel"],ENT_QUOTES);
        }
        ?>" />

        <br />

        <label for="son_objet">La raison de votre message  *</label>
        <br /> 

		<SELECT name="son_objet">
		<OPTION VALUE="Demande d'iinformations">Demande d'informations</OPTION>
		<OPTION VALUE="Bulletin A.Q.A">Bulletin A.Q.A</OPTION>
		<OPTION VALUE="Cadeau gratuit">Cadeau gratuit</OPTION>
	</SELECT>
	<?php
        if (!empty($_POST["son_objet"])) {
        // l'objet du message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_objet"],ENT_QUOTES);
        }
        ?> 
	 <br /><br />
	 
	  	

<input type="checkbox" name="abonnement" value="cadeau gratuit" checked="checked">
S.V.P. Envoyez-moi le cadeau gratuit. <br />
<input type="checkbox" name="abonnement" value="liste de diffusion" checked="checked">
S.V.P. Ajoutez-moi sur votre liste de diffusion. <?php
        if (isset($_POST["abonnement"])) {
        // le message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_message"],ENT_QUOTES);
        }
        ?><br /> <br />


        <label for="son_message">Votre  message *</label>
        <br /> <!-- Intitulé du champ message -->
        <textarea name="son_message" id="son_message" cols="60" rows="25"><?php
        if (isset($_POST["son_message"])) {
        // le message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_message"],ENT_QUOTES);
        }
        ?>


</textarea>

        <br />

        <input type="submit" name="envoyer" value="Envoyer" /><input type="reset" name="reset" value="Effacer" />
    </p>
</form>
<!-- FIN du formulaire HTML -->

<?php
}
else { // Sinon l'état est ok donc on envoie le mail
    $son_pseudo = $_POST["son_pseudo"]; // On stocke les variables récupérées du formulaire
    $son_courriel = $_POST["son_courriel"];
    $son_url = $_POST["son_url"];
    $son_objet = $_POST["son_objet"];
	$abonnement = $_POST["abonnement"];
    $son_message = $_POST["son_message"];

    $mon_email = "info@academiedapprentissage.com"; // Mise en forme du message que vous recevrez
    $mon_pseudo = "Académie québécoise d'apprentissage";
    $mon_url = "index.html";
    $msg_pour_moi = "- Son nom : $son_pseudo \n
    - Son courriel : $son_courriel \n
    - Objet du message : $son_objet \n
	- Objet du message : $abonnement \n
    - Message : \n $son_message \n\n";

    // Mise en forme de l'accusé réception qu'il recevra
    $accuse_pour_lui = "Bonjour $son_pseudo,\n
    Votre message nous a bien été envoyé et nous tâcherons de vous répondre le plus rapidement possible.\n\n
    - Votre courriel : $son_courriel \n
    - L'objet de votre message : $son_objet \n
	-Votre abonnement : $abonnement \n
    - Votre message : \n $son_message \n\n
    Merci et à bientôt sur  http://academiedapprentissage.com  !";

    // Envoie du mail
    $entete = "From: " . $mon_pseudo . " <" . $mon_email . ">\n"; // On prépare l'entête du message
    $entete .= "MIME-Version: 1.0";
	

    if (@mail($mon_email,$son_objet,$msg_pour_moi,$entete) && @mail($son_courriel,$son_objet,$accuse_pour_lui,$entete)){ // Si le mail a été envoyé
        echo "<p style=\"text-align:center\">Votre message a &eacute;t&eacute; envoy&eacute;, vous recevrez une confirmation par courriel.<br /><br />\n"; // On affiche un message de confirmation
        echo "<a href=\"index.html" . $mon_url . "\">Retour</a></p>\n"; // Avec un lien de retour vers l'accueil du site
    }
    else { // Sinon il y a eu une erreur lors de l'envoi
        echo "<p style=\"text-align:center\">Un problème s'est produit lors de l'envoi du message.\n";
        echo "<a href=\"".$_SERVER["PHP_SELF"]."\">Réessayez...</a></p>\n"; // On propose un lien de retour vers le formulaire
    }
}
?>  

Modifié par largowin (09 Dec 2009 - 01:07)
Bonjour,

Une checkbox se traite comme tous les autres élèments d'un formulaire, si tu souhaites récupérer le contenu de ta checkbox utilise $_POST['abonnement']

maintenant je vois que tes 2 checkbox porte le meme nom, su tu veux pouvoir avoir les 2 valeurs il te faudra faire plutot de cette manière :

<input type="checkbox" name="abonnement[]" value="cadeau gratuit" checked="checked">
S.V.P. Envoyez-moi le cadeau gratuit. <br />
<input type="checkbox" name="abonnement[]" value="liste de diffusion" checked="checked">
S.V.P. Ajoutez-moi sur votre liste de diffusion.