Salut,
je n'arrive pas à régler mon problème d'affichage d'erreurs après vérifications des champs du formulaire : le message d'erreur ne s'affiche pas.
J'ai fais un site avec un livre d'or. J'ai utilisé les include pour chaque page de mon site.
Dans mon livre d'or, j'ai utlisé un tableau pour faire le formulaire, et j'ai mis une dernière ligne en bas du tableau pour afficher les erreurs.
Voici la partie mon code de livreor.php pour la présentation du formulaire et affichage des erreurs :
Puis j'ai fait le code classique qui vérifie les entrées avant de sauvegarder le message. S'il n'y a pas de message ou pseudo, il ne sauvegard pas et enregistre dans la variable $erreur le message à afficher dans la dernière ligne du tableau.
[#][color=red]Comment faire pour que le message d'erreur s'affiche bien dans la dernière ligne du tableau (lorsqu'il y a erreur)? car pour l'instant même s'il y a des erreurs, rien ne s'affiche...!
Autre problème :
j'ai rajouté dans les input, cette condition :
pour que s'il y a des erreurs, il raffiche le texte déjà tapé (pour que le visiteur ne retape pas tout de nouveau) mais le problème est que si le message n'a pas d'erreur, ça affiche quand même le texte dans les input alors que je ne veux pas... : [#][color=red]comment faire pour que si le message a été enregistré, il ne raffiche pas le texte tapé dans les input ?
Merci de votre aide car je ne vois pas où sont les erreurs commises pour ces deux problèmes !!
Modifié par telecofr (05 Feb 2007 - 16:29)
je n'arrive pas à régler mon problème d'affichage d'erreurs après vérifications des champs du formulaire : le message d'erreur ne s'affiche pas.
J'ai fais un site avec un livre d'or. J'ai utilisé les include pour chaque page de mon site.
Dans mon livre d'or, j'ai utlisé un tableau pour faire le formulaire, et j'ai mis une dernière ligne en bas du tableau pour afficher les erreurs.
Voici la partie mon code de livreor.php pour la présentation du formulaire et affichage des erreurs :
<div id="corps">
<h2>Livre d or</h2>
<div id="conteneur">
<form method="post" action="index.php?feuil=livreor" name="formulaire">
<table> //tableau pour la présentation du formulaire
<tr><td><label for="nom">Nom :</label></td>
<td><input type="text" name="pseudo" value="<?php if (!empty($_POST['pseudo'])) echo ($_POST['pseudo']); ?>" size="30" id="nom" /></td>
</tr>
<tr><td><label for="email">E-mail :</label></td>
<td><input type="text" name="mail" value="<?php if (!empty($mail)) echo ($_POST['mail']); ?>" size="30" id="email" /> <span style="margin-left:30px;"><input type="reset" name="Submit" value="Effacer" />
<input type="submit" value="Envoyer" /></span></td>
</tr>
<tr><td><label for="ville">Ville :</label></td>
<td><input type="text" name="ville" value="<?php if (!empty($ville)) echo ($_POST['ville']); ?>" size="30" id="ville" /></td>
</tr>
<tr><td span style="vertical-align:top;" rowspan="2"><label for="textarea">Message :</label></td>
<td><textarea type="text" name="message" id="textarea" rows="7" cols="45" /><?php if (!empty($message)) echo($_POST['message']); ?></textarea></td>
</tr>
<tr><td><?php if (!empty($erreur)) echo $erreur; else echo "Ce livre d'or n'est pas un téléphone, merci d'écrire en français." ?></td> // ligne pour afficher les messages d'erreur s'il y a erreur
</tr>
</table>
</form>
</div>
<p>
<?php
mysql_connect("localhost", "root", "");
mysql_select_db("test");
// --------------- Etape 1 ----------------------------------------
// Si un message est envoyé, on vérifie les post et on l'enregistre
// ----------------------------------------------------------------
if (isset($_POST['pseudo']) AND isset($_POST['message']))
{
if ($_POST['pseudo'] != NULL AND $_POST['message'] != NULL)
{
if (trim($_POST['pseudo']) != "" AND trim($_POST['message']) != "")
{
if (isset($_POST['mail']) AND $_POST['mail']!= NULL)
{
if (preg_match("!^[a-z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$!", $_POST['mail'])) //verification du mail : si ok on enregistre
{
$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
$mail = htmlentities($_POST['mail'], ENT_QUOTES);
$ville = htmlentities($_POST['ville'], ENT_QUOTES);
$message = stripslashes(htmlentities($_POST['message'], ENT_QUOTES));
$message = nl2br($message);
$jour = date ( "Y/m/d H:i:s" );
// Contôle si le message est un double pour ne pas l'enregistrer
$reponsetest = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT 0, 1') or die(mysql_error());
$donneestest = mysql_fetch_array($reponsetest);
if ($donneestest['message'] != $message) // si les 2 messages sont différents alors on enregistre
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $mail . "', '" . $ville . "', '" . $message . "', '" . $jour . "', '" . time() . "')") or die(mysql_error()); }
else
{
$erreur = "<span class=\"erreur\">Le mail n'est pas valide !</span>";
}
}
if ($_POST['mail'] == NULL) //s'il n'y pas de mail, on enregistre les donnees
{
$pseudo = htmlentities($_POST['pseudo'], ENT_QUOTES);
$mail = htmlentities($_POST['mail'], ENT_QUOTES);
$ville = htmlentities($_POST['ville'], ENT_QUOTES);
$message = stripslashes(htmlentities($_POST['message'], ENT_QUOTES));
$message = nl2br($message);
$jour = date ( "Y/m/d H:i:s" );
// Contôle si le message est un double pour ne pas l'enregistrer
$reponsetest = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT 0, 1') or die(mysql_error());
$donneestest = mysql_fetch_array($reponsetest);
if ($donneestest['message'] != $message) // si les 2 messages sont différents alors on enregistre
mysql_query("INSERT INTO livreor VALUES('', '" . $pseudo . "', '" . $mail . "', '" . $ville . "', '" . $message . "', '" . $jour . "', '" . time() . "')") or die(mysql_error());
else
{
$erreur = "<span class=\"erreur\">Vous avez déjà posté ce message !</span>";
}
}
}
else if (trim($_POST['pseudo']) == "")
{
$erreur = "<span class=\"erreur\">Vous n'avez pas précisé votre nom !</span>";
}
else if (trim($_POST['message']) == "")
{
$erreur = "<span class=\"erreur\">Vous n'avez pas rédigé de message !</span>";
}
}
else if ($_POST['pseudo'] == NULL)
{
$erreur = "<span class=\"erreur\">Vous n'avez pas précisé votre nom !</span>";
}
else if ($_POST['message'] == NULL)
{
$erreur = "<span class=\"erreur\">Vous n'avez pas rédigé de message !</span>";
}
}
// --------------- Etape 2 -----------------
// On écrit les liens vers chacune des pages
// -----------------------------------------
// On met dans une variable le nombre de messages qu'on veut par page
$nombreDeMessagesParPage = 10;
// On récupère le nombre total de messages
$retour = mysql_query('SELECT COUNT(*) AS nb_messages FROM livreor') or die(mysql_error());
$donnees = mysql_fetch_array($retour);
$totalDesMessages = $donnees['nb_messages'];
// On calcule le nombre de pages à créer
$nombreDePages = ceil($totalDesMessages / $nombreDeMessagesParPage);
// On affiche le nombre total de messages et le nombre de pages
if ($totalDesMessages == 0)
echo "<h3>Aucun message n'a été posté </h3>";
else if ($totalDesMessages == 1)
echo "<h3>1 message a été posté </h3> <center>Page : 1</center><br />";
else
{
echo "<h3>". $totalDesMessages . " messages ont été postés </h3> <center>Pages : ";
for ($i = 1 ; $i <= $nombreDePages ; $i++)
echo '<a href="index.php?feuil=livreor&page=' . $i . '">' . $i . '</a> ';
echo "</center> <br />";
}
?>
</p>
<?php
// --------------- Etape 3 ---------------
// Maintenant, on va afficher les messages
// ---------------------------------------
if (isset($_GET['page']))
{
$page = intval($_GET['page']); // On récupère le numéro de la page indiqué dans l'adresse (livreor.php?page=4)
}
else // La variable n'existe pas, c'est la première fois qu'on charge la page
{
$page = 1; // On se met sur la page 1 (par défaut)
}
// On calcule le numéro du premier message qu'on prend pour le LIMIT de MySQL
$premierMessageAafficher = ($page - 1) * $nombreDeMessagesParPage;
$reponse = mysql_query('SELECT * FROM livreor ORDER BY id DESC LIMIT ' . $premierMessageAafficher . ', ' . $nombreDeMessagesParPage) or die(mysql_error());
while ($donnees = mysql_fetch_array($reponse))
{
$heure=date('d/m/Y à H\hi', $donnees['timestamp']);
echo '<p><strong>' .$donnees['pseudo']. '</strong> ';
if ($donnees['mail'] != NULL)
echo '(<a href=\"mailto:' .$donnees['mail']. '\">' .$donnees['mail']. '</a>) ';
if ($donnees['ville'] != NULL)
echo 'de ' .$donnees['ville']. ', ';
echo 'le ' .$heure. '</p> <p>' .$donnees['message']. '</p>';
}
// On fait une boucle pour écrire les liens vers chacune des pages
if ($totalDesMessages == 1)
echo "<center>Page : 1</center><br />";
else if ($totalDesMessages > 1)
{
echo "<center>Pages : ";
for ($i = 1 ; $i <= $nombreDePages ; $i++)
echo '<a href="index.php?feuil=livreor&page=' . $i . '">' . $i . '</a> ';
echo "</center> <br />";
}
mysql_close();
?>
</div>
Puis j'ai fait le code classique qui vérifie les entrées avant de sauvegarder le message. S'il n'y a pas de message ou pseudo, il ne sauvegard pas et enregistre dans la variable $erreur le message à afficher dans la dernière ligne du tableau.
[#][color=red]Comment faire pour que le message d'erreur s'affiche bien dans la dernière ligne du tableau (lorsqu'il y a erreur)? car pour l'instant même s'il y a des erreurs, rien ne s'affiche...!
Autre problème :
j'ai rajouté dans les input, cette condition :
value="<?php if (isset($mail)) echo($_POST['mail']);
pour que s'il y a des erreurs, il raffiche le texte déjà tapé (pour que le visiteur ne retape pas tout de nouveau) mais le problème est que si le message n'a pas d'erreur, ça affiche quand même le texte dans les input alors que je ne veux pas... : [#][color=red]comment faire pour que si le message a été enregistré, il ne raffiche pas le texte tapé dans les input ?
Merci de votre aide car je ne vois pas où sont les erreurs commises pour ces deux problèmes !!
Modifié par telecofr (05 Feb 2007 - 16:29)