Déplacer un message d'erreur

Petit nouveau ! | 3 Messages

29 oct. 2011, 15:56

Bonjour.

Je travaille à la mise en place d'un formulaire de contact que vous trouverez à cette adresse: http://linda.cheznoir.com/wynand/english/contact.php

Mon problème est que lorsque l'utilisateur ne remplit pas une case (pseudo, courriel et message), il y a un message qui s'inscrit au-dessus et qui fait décaler mes trucs vers le bas.

Comment puis-je le faire apparaître à droite sur la photo? Au mieux, pourrais-je faire apparaître dans l'espace non rempli quelque chose qui dit que ça n'a pas été rempli?

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_telephone"])) $_POST["son_telephone"]=trim(stripslashes($_POST["son_telephone"])); // stripslashes()  retire les backslashes ==> \' devient '
	
	if (isset($_POST["son_adresse"])) $_POST["son_adresse"]=trim(stripslashes($_POST["son_adresse"])); // stripslashes()  retire les backslashes ==> \' devient '

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

    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 [email protected] (cf cours d'expressions régulières)
            $erreur="Votre adresse courriel n'est pas valide...";
        }
			
        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"></label><!-- Intitulé du champ pseudo -->
        <input type="text" size="53" 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 &
        }
        ?>" />

         <br />

        <label for="son_courriel"></label>
        <br /> <!-- Intitulé du champ courriel -->
        <input type="text" size="53" 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_telephone"></label>
        <br /> <!-- Intitulé du champ adresse -->
        <textarea name="son_telephone" id="son_telephone" cols="53" rows="1"><?php
        if (isset($_POST["son_telephone"])) {
        // le message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_telephone"],ENT_QUOTES);
        }
        ?> </textarea>
        <br />
        
        <label for="son_adresse"></label>
        <br /> <!-- Intitulé du champ adresse -->
        <textarea name="son_adresse" id="son_adresse" cols="53" rows="1"><?php
        if (isset($_POST["son_adresse"])) {
        // le message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_adresse"],ENT_QUOTES);
        }
        ?> </textarea>
        <br />
        
<label for="son_adresse2"></label>
        <br /> <!-- Intitulé du champ adresse -->
        <textarea name="son_adresse2" id="son_adresse2" cols="53" rows="1"><?php
        if (isset($_POST["son_adresse2"])) {
        // le message a été saisi --> le réafficher
        echo htmlspecialchars($_POST["son_adresse2"],ENT_QUOTES);
        }
        ?> </textarea>
        <br />

        <label for="son_message"></label>
        <br /> <!-- Intitulé du champ message -->
        <textarea name="son_message" id="son_message" cols="53" rows="4"><?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="Send" /><input type="reset" name="reset" value="Reset" />
    </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_telephone = $_POST["son_telephone"];
	 $son_adresse = $_POST["son_adresse"];
	  $son_adresse2 = $_POST["son_adresse2"];
    $son_message = $_POST["son_message"];

    $mon_email = "xxxxxxxx"; // Mise en forme du message que vous recevrez
    $mon_pseudo = "WYNAND RUTTEN DESIGN";
    $mon_url = "index.html";
    $msg_pour_moi = "- Son nom : $son_pseudo \n
    - Email : $son_courriel \n
	- Phone number : $son_telephone \n
	- First adress : $son_adresse \n
	- Second adress : $son_adresse2 \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 vous répondrons le plus rapidement possible.\n\n
    - Your email : $son_courriel \n
	- Your phone number : $son_telephone \n
	- Your adress : $son_adresse \n
	- Your 2nd adress : $son_adresse2 \n
    - Your 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=\"color:red;text-align: left;margin: 30px\">Votre message a &eacute;t&eacute; envoy&eacute;,<br /> vous recevrez une confirmation par courriel.<br /><br />\n"; // On affiche un message de confirmation
        
    }
    else { // Sinon il y a eu une erreur lors de l'envoi
        echo "<p style=\"text-align:left\">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
    }
}
?> 

ViPHP
xTG
ViPHP | 7331 Messages

29 oct. 2011, 17:10

Ce n'est pas vraiment un souci de PHP, mais de CSS. Au passage le design intègre n'importe comment ce formulaire.
Je ne sais pas sous quel navigateur tu testes mais saches que sous Firefox 7.0 le menu du bas est caché par les textarea.
Bref je pense qu'il vaudrait mieux commencer par régler cela avant. ;)

Petit nouveau ! | 3 Messages

29 oct. 2011, 23:01

J'ai retravaillé le tout. Toujours le même souci par contre...

ViPHP
xTG
ViPHP | 7331 Messages

30 oct. 2011, 10:48

Il suffit de déplacer le code suivant à l'endroit où tu souhaites l'afficher :
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
    }
En l’occurrence si tu souhaites l'intégrer au formulaire il faudra le placer à l'intérieur des balises mettant en forme ce dernier, la balise <p style="text-align:left"> si je ne m'abuse.

Petit nouveau ! | 3 Messages

30 oct. 2011, 16:10

Ok. Merci, je vais essayer ça.

Sur alsacreations, on m'a suggéré ça qui fonctionne très bien (léger décalage sur IE, mais pas trop pire), mais j'aimerais mieux quelque chose à même les cases:
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 "<div style=\"float:right\"><span style=\"color:red;margin:-60px 140px 0 0;float:right;z-index:1000\">".$erreur."</span><br /><br />\n</div>\n"; // On affiche le message correspondant à l'erreur

    }
?>