Formulaire de contact, one page, recharger la page sur contact.

Résolu/Fermé
cevek Messages postés 45 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 8 décembre 2018 - 23 juil. 2014 à 19:14
cevek Messages postés 45 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 8 décembre 2018 - 26 juil. 2014 à 11:40
Bonjour,

Je suis en train de créer mon site... et je rencontre (encore) des difficultés... et vu que vous êtes toujours efficaces et bien sympa... je m'en remet à vous une fois de plus :-D Mes sauveurs ^_^

Je réalise un formulaire de contact.
Il fonctionne bien, (oui étonnant, j'y suis arrivée toute seule :-P )
Mais étant donné que mon site est one page (défilement horizontal), quand je valide mon formulaire, il recharge la page sur l'accueil... donc les gens ne voient pas le message de confirmation d'envoi ou d'erreur.

Et quand il est validé et envoyé, les informations entrées restent inscrites et j'aimerais vider les champs.

Voici l'adresse de mon site : http://art.cevek.fr/
N'hésitez pas à envoyer des messages bidons pour tester.

Merci mille fois pour votre aide,
Bonne soirée,

Voici le code que j'ai entré dans Dream :

<head>
<?php
//Si je reçois quelque chose du form de contact
if(isset($_POST["go"])){


//Je stocke
$mail = $_POST["mail"];
$objet = $_POST["objet"];
$message = $_POST["message"];

//Vérification des saisies
if(!preg_match("/^[-a-z0-9._]+@[-a-z0-9._]+\.[a-z]{2,4}$/i",$mail)){
$message1 = "* Votre mail est obligatoire";
}

if(empty($objet)){
$message2 = "* L'objet est obligatoire";
}
if(empty($message)){
$message3 = "* Ce champ obligatoire";
}

if(
(!isset($message1))
&&(!isset($message2))
&&(!isset($message3))
){
//CONSTRUIRE LE MAIL
$destinataire = "c.vekemans@hotmail.fr";//!!!
//---------------------------------------------
//Les entêtes
$tete = "FROM:".$mail."\n";
$tete .="MIME-Version: 1.0\r\n";//Pour un envoi en HTML
$tete .="Content-Type: text/html; charset=utf-8\r\n";
//$tete.="Content-Type: text/html; charset=iso-8859-1\r\n";
$tete.= "Content-Transfert-Encoding: 8bit\r\n";
$tete.="Object:".$objet."\n";


//L'envoi en lui-même (utilise le serveur SMTP de l'hébergeur)
if(mail($destinataire,$objet,$message,$tete)){
$message4 = "* Votre message a bien été transmis.";
//echo "<p>Mail bien envoyé</p>";
}else{
$message5 = "* Attention, votre message n'a pas été transmis.";
//echo "<p>Pb</p>";

}
}
}
?>

</head>


<body>
<form action="#contact" method="post">
<?php if(isset($message4)){
echo "<span class='error'>".$message4."</span>";
}
?>
<?php if(isset($message5)){
echo "<span class='error'>".$message5."</span>";
}
?>
<p>
<label class="consigne" for="mail">Votre mail : </label>
<input class="champs" type="text" name="mail" id="mail"
<?php if(isset($mail))
echo " value='".$mail."'";
?>
>
<?php if(isset($message1)){
echo "<span class='error'>".$message1."</span>";
}
?>
</p>

<p>
<label class="consigne" for="objet">Objet du message : </label>
<input class="champs" type="text" name="objet" id="objet"
<?php
if(isset($objet)) echo " value=\"".$objet."\"";
?>
>
<?php if(isset($message2)){
echo "<span class='error'>".$message2."</span>";
}
?>
</p>

<p>
<label class="consigne" for="message">Votre message : </label>
<textarea class="champs" name="message" id="message"><?php if(isset($message)) echo $message; ?></textarea>
<?php if(isset($message3)){
echo "<span class='error'>".$message3."</span>";
}
?>
</p>

<p>
<input type="submit" name="go" id="go" value="Soumettre">
</p>


</form>
</body>
A voir également:

5 réponses

Utilisateur anonyme
24 juil. 2014 à 01:28
Alors tout d'abords je sais pas si on peut considérer ton site comme OnePage, car un site OnePage, on a accès à tout le contenu juste en scrollant, que toi le contenu est invisible et se charge avec le JS.

Ensuite tu utilises mal tes ancres, car là tu as mis:

<form method="post" action="#contact">


Mais j'ai vérifié et tu as aucune balise avec l'id contact, tu devrais mettre plutôt:

<form method="post" action="#vue4">


Donc là tu vas voir ton formulaire directement mais sans le bandeau et menu car tes contenus sont charger avec le JS, donc je te conseille de revoir ton concept ^^

Et si les champs sont remplis directement c'est à cause de ça:

<?php
if(isset($objet)) echo " value=\"".$objet."\"";
?> 


Car même si le contenu est validé et envoyé le contenu du POST vas de nouveau se stocker dans $objet, et donc être afficher avec le bout de code au dessus.

En gros tu dois vider le contenu de $objet (et des autres) soit avec unset($objet) ou $objet = '';

Et tu peux faire ça que quand tout est bon, donc à cet endroit:

if(mail($destinataire,$objet,$message,$tete)){
$message4 = "* Votre message a bien été transmis.";
//echo "<p>Mail bien envoyé</p>";
}


Ce qui donne:

if(mail($destinataire,$objet,$message,$tete)){
$message4 = "* Votre message a bien été transmis.";
unset($objet); //ou $objet = '';
//echo "<p>Mail bien envoyé</p>";
}


Sinon tu as des petits soucis de CSS, tu utilises trop d'id ce qui est pas top, mais bon on a tous été débutant ^^
0
cevek Messages postés 45 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 8 décembre 2018
24 juil. 2014 à 11:51
Merci mille fois pour tous ces conseils, en effet tout fonctionne comme tu le dit et mon site est caduque... Moi qui cherchais à faire un truc un peu original... ça me coince ^^
C'est vrai que je n'ai eu que 3 mois de formations web, alors pour maîtriser html, css, js, php etc etc c'est un peu tendu et je n'ai pas encore les bons réflexes !
Je vais essayer de voir comment améliorer tout ça pour avoir un site fluide et logique.
Merci beaucoup pour ton aide !
Bonne journée :)
0
cevek Messages postés 45 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 8 décembre 2018
24 juil. 2014 à 11:58
et... excuse moi de t'embêter encore, mais je tente un truc vu que je vois tu y connais beaucoup :-D
Est-il possible que la fenêtre ne se recharge pas quand je valide mais qu'une petite fenêtre s'ouvre "message bien envoyé"... ?
0
Si la fenêtre ne se recharge pas, ça veut dire que tes informations n'ont pas été posté.

Ce que tu peux faire c'est envoyer les infos grâce à Ajax, enfin ici la fonction post de jQuery:

https://api.jquery.com/jQuery.post/

En gros tu récupérés l'événement "submit" du formulaire:

https://api.jquery.com/submit/

Dedans tu postes à l'aide de la fonction $.post les données du formulaire.

Puis tu finis ta fonction avec un "return false;" pour que la soumission du formulaire ne se fasse pas.

Enfin c'est les grand ligne, car tu dois aussi vérifier si les informations sont correctes.

Sinon deux tutos qui peuvent t'aider:

https://www.youtube.com/watch?v=EqzLugEJGJs

https://www.youtube.com/watch?v=LwsDf3PIdPc
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
cevek Messages postés 45 Date d'inscription mercredi 9 juillet 2014 Statut Membre Dernière intervention 8 décembre 2018
26 juil. 2014 à 11:40
Merci beaucoup, je vais regarder ça !
Je vais me mettre à Ajax... pour un site plus propre :-) (---> ok je sors)
Merci pour votre aide !
0