[RESOLU] Afficher code erreur formulaire dans le corps du formulaire

Petit nouveau ! | 9 Messages

15 juil. 2014, 03:25

Bonjour, j'ai créée un formulaire de contact que j'affiche dans une fenêtre modale (réalisée en css), le fichier php est basique, et il y a un petit antispam intégré. Quand le formulaire est correctement renseigné, une page de redirection s'ouvre. En cas d'erreur, une page blanche apparait avec un message d'erreur simple invitant à recommencer. J'aimerai que le message d'erreur s'affiche dans le formulaire du départ (par exemple dans le footer). si vous avez des tuyaux je suis preneur. :D merci
voici le code php

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: http://www.xxxx.com';
$to = '[email protected]';
$subject = 'Hello';
$human = $_POST['antispam'];

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit'] && $antispam == '4') {
if (mail ($to, $subject, $body, $from)) {
header("location:http://www.xxxx.com/redirect2.html");
} else {
echo 'Formulaire incomplet !';
}
} else if ($_POST['submit'] && $antispam != '4') {
echo 'Mauvais calcul, recommencez !';
}


?>


voici le code html

<head>
<meta charset="iso-8859-1" />
<link rel="stylesheet" type="text/css" href="formulaire.css">
<link rel="stylesheet" type="text/css" href="modal.css">
</head>
<body>
<div id="openModal" class="modalDialog">
<div>
<a href="#close" title="Close" class="close"></a>
<header class="body">
Formulaire:
</header>
<section class="body">

<form method="post" action="http://www.xxxx.com/customform/index.php">

<label>NOM,Pr&eacute;nom :</label>
<input name="name" placeholder="Ecrivez ici">

<label>Email :</label>
<input name="email" type="email" placeholder="Ecrivez ici">

<label>Votre message :</label>
<textarea name="message" placeholder="Ecrivez ici"></textarea>

<label>Que donne 2+2 ?</br> (Anti-spam)</label>
<input name="antispam" placeholder="R&eacute;sultats">
<input id="submit" name="submit" type="submit" value="Submit">

</form>
</section>
<footer class="body">
</footer>

</div>
</div>

</body>
</html>
</body>

Mammouth du PHP | 1339 Messages

15 juil. 2014, 08:55

Tu fais un redirection avec une information dans l'url ...
if ($_POST['submit'] && $antispam == '4') {
if (mail ($to, $subject, $body, $from)) {
header("location:http://www.xxxx.com/redirect2.html");
} else {
header("location:http://www.xxxx.com/redirect2.php?erreur=1");
}
} else if ($_POST['submit'] && $antispam != '4') {
header("location:http://www.xxxx.com/redirect2.php?erreur=2");
}
<head>
<meta charset="iso-8859-1" />
<link rel="stylesheet" type="text/css" href="formulaire.css">
<link rel="stylesheet" type="text/css" href="modal.css">
</head>
<body>
<div id="openModal" class="modalDialog">
<div>
<a href="#close" title="Close" class="close"></a>
<header class="body">
Formulaire:
</header>
<section class="body">

<form method="post" action="http://www.xxxx.com/customform/index.php">

<label>NOM,Pr&eacute;nom :</label>
<input name="name" placeholder="Ecrivez ici">

<label>Email :</label>
<input name="email" type="email" placeholder="Ecrivez ici">

<label>Votre message :</label>
<textarea name="message" placeholder="Ecrivez ici"></textarea>

<label>Que donne 2+2 ?</br> (Anti-spam)</label>
<input name="antispam" placeholder="R&eacute;sultats">
<input id="submit" name="submit" type="submit" value="Submit">

</form>
</section>
<footer class="body">
<?php if(!empty($_GET['erreur']) && ($_GET['erreur'] == 1)) {
echo 'Formulaire inclomplet';
} else if(!empty($_GET['erreur']) && ($_GET['erreur'] == 2)) {
echo 'Antispam pas bon';
} 
</footer>

</div>
</div>

</body>
</html>
</body>
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 9 Messages

20 juil. 2014, 19:54

Bonjour, merci pour la réponse, donc comme je le précisais, le formulaire s'ouvre dans une fenêtre modale (en html et css3), tout cela est contenu dans une page "renseignements.html", j'ai donc modifié le code comme cela :

if ($_POST['submit'] && $antispam == '4') {
if (mail ($to, $subject, $body, $from)) {
header("location:http://www.csvb-matoury.com/redirect2.html");
} else {
header("location:http://www.csvb-matoury.com/renseigneme ... l?erreur=1");
}
} else if ($_POST['submit'] && $antispam != '4') {
header("location:http://www.csvb-matoury.com/renseigneme ... l?erreur=2");
}

et effectivement cela renvoie sur la page voulue. le problème c'est que la fenêtre modale se ferme de plus, j'ai testé sur une page vierge, l'affichage des erreurs dans le footer du formulaire mais cela ne fonctionne pas, le formulaire réapparait sans message. donc là je suis un peu bloqué

Mammouth du PHP | 1339 Messages

20 juil. 2014, 19:58

Il faut que la page renseignement ai l'extention .php et non pas .html
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 9 Messages

20 juil. 2014, 22:53

Et bien là dans ce cas, la redirection se fait sur une page blanche, "/renseignements.php". par contre est ce un oubli ou bien c'est fait exprès, il n'y a pas de balise de fermeture du code php, ?>, dans la partie html?

Mammouth du PHP | 1339 Messages

20 juil. 2014, 22:58

C'est une erreur oui... Le navigageur ne l'affiche pas ?
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 9 Messages

20 juil. 2014, 23:16

Oui c'est bon mais rien à faire, j'ai changer de fusil d'épaule, j'ai donc fais deux page "erreur" une pour le formulaire incomplet et une autre pour l'antispam, et j'ai mis une redirection où le formulaire se retrouve à chaque fois, mon problème maintenant et que mon code me semble incomplet, cela fonctionne pour l'antispam mais pas quand les autres champs sont vides, cela me redirige vers une page index.php vide, j'ai compris qu'il fallait que j'utilise le code "empty" mais je ne sais pas trop comment le faire

voici le code:

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'From: http://www.xxx.com';
$to = '[email protected]';
$subject = 'Hello';
$human = $_POST['antispam'];

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit'] && $name && $email && message && $antispam == '4') {
if (mail ($to, $subject, $body, $from))
{ header("location:http://www.xxx.com/redirect2.html");
}
else
{
header("location:http://www.xxx.com/email1.html");
}
} else if ($_POST['submit'] && $antispam != '4') {
header("location:http://www.xxx.com/email2.html");
}
?>

merci d'avance :D

Mammouth du PHP | 1339 Messages

20 juil. 2014, 23:28

N'hesites pas a poser la question à Google en fait...
http://www.webtutoriaux.com/tutoriel-45 ... -vide.html
Bon sinon tu me fais un message privé et on se fait un TeamViewer

Petit nouveau ! | 9 Messages

21 juil. 2014, 00:52

Ok, je pense que je vais tout reprendre à zéro, en effet, déja je vais placer le php dans le corps de ma page et pas sur un fichier externe et revoir un peu tout cela :priere:
merci tout de même, dès que j'ai avancé je pense poster ma solution

Mammouth du PHP | 2278 Messages

21 juil. 2014, 07:57

Moi je mettrais une dic cachée quelque part sur la page du formulaire dans une autre div: avec du code php en réaffichant la même page si formulaire incomplet
$visible = (condition)? "visible": hidden;
ou un appel à javascript
<div id ='mess_err' style = ''visiility:$visible'>
</div>
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Petit nouveau ! | 9 Messages

21 juil. 2014, 23:23

Cela semble interessant mais le statut d'embryon me va comme un gant, j'en suis au stade de la conception (html et css), je sais que le jquery ou autres peuvent faire tout cela, là j'ai modifié le code php, mais il ne fonctionne pas même si il semble valide

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$antispam = $_POST['antispam'];

$from = 'From: www..com';
$to = '[email protected]';
$subject = 'Hello';
$body = "De: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit'] && $antispam == '4') {
else if(!empty($name)) {
header("location:http://www..com/email1.html");
} else {
header("location:http://www..com/redirect2.html");
else if(!empty($email)) {
header("location:http://www..com/email1.html");
} else {
header("location:http://www..com/redirect2.html");
else if(!empty($message)) {
header("location:http://www..com/email1.html");
} else {
header("location:http://www..com/redirect2.html");
}
}
}
}
else if ($_POST['submit'] && $antispam != '4') {
header("location:http://www..com/email2.html");
}

?>
mais je pense que c'est pas très bon, #-o

Petit nouveau ! | 9 Messages

23 juil. 2014, 17:16

Bon voila j'ai un peu résolu mes problèmes, en mettant des attributs html5 dans le corps du formulaire, comme "required" pour rendre obligatoire les champs, "maxlenght" pour le nombre de caractères et "pattern" pour la forme des contenus, le formulaire php et simple, avec juste un header pour la redirection sur la page d'erreur de calcul. C'est vrai que tout ce passe coté "client" mais bon c'est juste un formulaire de contact pour un club sportif, donc stop la parano
voici le code :

<!DOCTYPE html>
<html lang="fr">
<head>
<meta charset="UTF-8" /><!-- <meta charset="iso-8859-1" /> -->
<link rel="stylesheet" type="text/css" href="formulaire.css">
<link rel="stylesheet" type="text/css" href="modal.css">
</head>

<body>
<a href="#openModal">Open Modal</a>



<div id="openModal" class="modalDialog">
<div>
<a href="#close" title="Close" class="close"></a>

<header class="body">
Formulaire:
</header>

<section class="body">

<form method="post" action="http://www.xxx/customform/index.php">

<label>NOM,Pr&eacute;nom :</label>
<input type="text" maxlength="25" name="name" placeholder="Ecrivez ici" required pattern="[a-zA-Z0-9]">

<label>Email :</label>
<input type="text" maxlength="25" name="email" type="email" placeholder="Ecrivez ici" required=" /^[^\W][a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\@[a-zA-Z0-9_]+(\.[a-zA-Z0-9_]+)*\.[a-zA-Z]{2,4}$/ ">

<label>Votre message :</label>
<textarea maxlength="250" name="message" placeholder="Ecrivez ici" required pattern="[a-zA-Z0-9]"></textarea>

<label>Que donne 2+2 ?<br> (Anti-spam)</label>
<input type="text" maxlength="1" name="antispam" placeholder="R&eacute;sultat" style="width:60px;" required pattern="[0-9]">
<br>
<input id="submit" name="submit" type="submit" value="Submit">
</form>

</section>

<footer class="body">
</footer>

</div>
</div>
</body>
</html>

et le php :

<?php
$name = $_POST['name'];
$email = $_POST['email'];
$message = $_POST['message'];
$from = 'Site internet du CSVBM';
$to = '[email protected]';
$subject = 'Contact depuis le site internet';
$antispam = $_POST['antispam'];

$body = "From: $name\n E-Mail: $email\n Message:\n $message";

if ($_POST['submit'] && $antispam == '4') {

if (mail ($to, $subject, $body, $from)) {
header("location:http://www..com/redirect2.html");
}
} else if ($_POST['submit'] && $antispam != '4') {
header("location:http://www..com/email1.html");
}


?>

J'ai aussi une possibilité avec la balise <iframe>, en utilisant le code de la fenêtre modale. J'utilise webacapela pour construire mes sites internet, j'améliore les possibilités avec des fenêtre modale, ou des menus css "maison", webaccapela propose un formulaire de contact , je le place sur une page et je le fais apparaître grâce à la iframe, cela m'évite de programmer en php ou autre jquery pour le traitement du formulaire, vive le bricolage mais c'est pas mal.

Merci pour l'aide apportée.