Fulltrip |
Le 29/02/2008 à 15:31 |
|
|
Bonjour!
Voilà je viens de finir mon livre d'or mais j'ai un petit problème que je n'arrive pas à résoudre, je suis donc venu ici... Mon problème est le suivant, imaginons que je sois l'utilisateur, j'entre mon message et je l'envoi. Les données qu'entrent l'utilisateur dans le formulaire sont par la suite intégrer dans un tableau, mais le message que vient d'envoyer l'user n'apparait pas directement, c'est seulement quand un autre internaute vient laisser un autre message que celui-ci apparait, et ainsi de suite. Il faut donc qu'un autre user envoi un message pour que le précédent s'affiche, je n'arrives pas à résoudre ce problème, ce serait donc sympa de m'aider. Merci d'avance.
Mon code est le suivant:
[/code]
[code=langage]
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Rap34</title>
<meta http-equiv="Content-Type" content="text/html; charset=" />
<link rel="stylesheet" type="text/css" href="style.css" /></head>
<body>
<div id="conteneur">
<div id="haut">
<div class="Style7">
<p><img src="images/banniere2.png" width="750" height="180"></p>
</div>
</div>
<div id="centre">
<div id="centrage">
<div id="menu">
<ul>
<li><a href="index.xhtml">ACCEUIL</a></li>
<li><a href="artiste.html">ARTISTES</a></li>
<li><a href="livredor.php">LIVRE D'OR</a></li>
<li><a href="commander.xhtml" >COMMANDER</a></li>
<li><a href="contact.xhtml" >CONTACT</a></li>
</ul>
</div>
<div id="droite">
<div id="haut_droite">
<p><img src="images/des_3.gif" width="35" height="25"/></p>
<p class="Style2"><span class="Style11">Lache un com's</span></p>
<br /><br />
<?php
if (isset($_POST['go']) && $_POST['go']=='Signer') {
if ((isset($_POST['auteur'])) && (isset($_POST['email'])) && (isset($_POST['message']))) {
// si les 3 variables ne sont pas vides, et si l'adresse E-mail est valide, alors, et seulement dans ce cas, on fera notre insertion dans la base
if ((!empty($_POST['auteur'])) && (!empty($_POST['email'])) && (!empty($_POST['message']))) {
// on verifie le format de l'adresse E-mail saisie
$test_mail = eregi ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+$', $_POST['email']);
if ($test_mail) {
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('livredor', $base);
// on prepare notre requête d'insertion des données
$sql = 'INSERT INTO livre_or VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['email']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['message']).'")';
// on lance la requête
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on ferme la connexion à la base de données
mysql_close();
// on redirige le visiteur vers l'accueil du livre d'or
header('location: livredor.php');
// on termine le script courant
exit();
}
else {
$erreur = 'Votre adresse E-mail est invalide.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
}
}
else {
$erreur = 'Les variables nécessaires au script ne sont pas définies.';
}
}
?>
<form action="livredor.php" method="post">
<table>
<tr><td>
<span class="gras">Auteur :</span>
</td><td>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php if (isset($_POST['auteur'])) echo htmlentities(trim($_POST['auteur'])); ?>"/>
</td></tr><tr><td>
<span class="gras">Adresse E-mail :</span>
</td><td>
<input type="text" name="email" maxlength="50" size="50" value="<?php if (isset($_POST['email'])) echo htmlentities(trim($_POST['email'])); ?>">
</td></tr><tr><td>
<span class="gras">Votre message :</span>
</td><td>
<textarea name="message" cols="50" rows="10"><?php if (isset($_POST['message'])) echo htmlentities(trim($_POST['message'])); ?></textarea>
</td></tr><tr><td><td align="right">
<input type="submit" name="go" value="Signer">
</td></tr></table>
</form>
<?php
if (isset($erreur)) echo '<br /><br />',$erreur;
?>
<div class="englobe_h3">
<h2 align="center" >Commentaires</h2>
</div>
<?php
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('livredor', $base);
$sql = 'SELECT auteur, email, date_signature, message FROM livre_or ORDER BY date_signature DESC';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb_signature = mysql_num_rows($req);
if ($nb_signature == 0) {
echo 'Aucune signature.';
}
else {
while ($data = mysql_fetch_array($req)) {
sscanf($data['date_signature'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
echo '<table id="table1" >'."\n";
echo '<thead>';// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr id="tr1">';
echo '<td id="td1"><b><u>auteur</u></b></td>';
echo '<td id="td1"><b><u>message</u></b></td>';
echo '<td id="td1"><b><u>le:</u></b></td>';
echo '</tr>'."\n";
echo '</thead>';
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($req)) {
echo '<tbody>';
echo '<tr id="tr1">';
echo '<td id="td1">'.$row['auteur'].'</td>';
echo '<td id="td1">'.$row['message'].'</td>';
echo '<td id="td1">'.$row['date_signature'].'</td>';
echo '</tr>'."\n";
echo '</tbody>';
}
echo '</table>'."\n";
// fin du tableau.
}
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on ferme la connection à la base de données.
mysql_close ();
?>
</div>
</div>
<div id="bas"> </div>
</div>
</div>
<p class="signature"><span class="Style2">Design by</span><span id="krek"><span class="Style5"> Schevshev,</span> <span class="Style6">Vladou</span> <span class="Style2">&</span> El jefe</span> <span class="Style2">: www.rap34.fr</span> </p>
</body>
</html>
|
Brako |
Le 29/02/2008 à 22:50 |
|
|
Bonjour Fulltrip
Pour que le message apparaisse il faut impérativement que la page soit actualisée/rechargée. Ce qui est tout a fait normal cela permet de mettre a jour la requête mysql.
Je pense que pour un livre d'or c'est pas gênant. C'est pas un chat.
Si tu veux tout de même avoir cet effet ou la page se met continuellement à jour il existe deux façon à ma connaissance
1) La première est pas très belle, il s'agit de mettre une balise meta de rafraichissement
2)La deuxième est bien mieux, mais elle est dure à mettre en place (manque de documentation pertinente sur le net), il s'agit des requêtes serveur avec l'xmlhttprequest. Cela permet de faire des requêtes php/mysql sans recharger la page.
J'espère être tomber juste sur ton problème.
sinon
essaye de supprimer ces lignes :
// on redirige le visiteur vers l'accueil du livre d'or
header('location: livredor.php');
// on termine le script courant
exit();
le exit(); arrête ton script et empêche la mise à jour de ta requête sql qui se trouve en dessous -- Ce qui donne une éventuelle matière à suspecter une quelconque propagande ... |
Fulltrip |
Le 01/03/2008 à 00:43 |
|
|
Re,
en ce qui concerne de supprimer:
header('location: livredor.php'); // on termine le script courant exit();
je préfère le laisser car elle permet d'afficher le message sur la page 'livredor.php' et pour le exit(), rien ne change en le supprimant.
Quand à la fonction javascript que vous m'avez conseillé d'inclure dans le script, je suis allé vérifié sur le net et je sais pas en fait comment je vais réussir a l'intégrer dans mon code.
Si vous aviez une petite idée...
Merci d'avance. |
Brako |
Le 01/03/2008 à 10:25 |
|
|
salut ! Fulltrip a écrit :je préfère le laisser car elle permet d'afficher le message sur la page 'livredor.php' et pour le exit(), rien ne change en le supprimant.
Je comprens pas trop. Tout ce code n'est pas dans la page livredor.php ? Tu as séparé l'affichage du traitement du formulaire ? A quoi correspond cette page alors ? Ce n'est pas le code ci-dessous qui te sert à afficher les signatures ? alors pourquoi le header ?
<?
while ($data = mysql_fetch_array($req)) {
sscanf($data['date_signature'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
echo '<table id="table1" >'."\n";
echo '<thead>';// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr id="tr1">';
echo '<td id="td1"><b><u>auteur</u></b></td>';
echo '<td id="td1"><b><u>message</u></b></td>';
echo '<td id="td1"><b><u>le:</u></b></td>';
echo '</tr>'."\n";
echo '</thead>';
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($req)) {
echo '<tbody>';
echo '<tr id="tr1">';
echo '<td id="td1">'.$row['auteur'].'</td>';
echo '<td id="td1">'.$row['message'].'</td>';
echo '<td id="td1">'.$row['date_signature'].'</td>';
echo '</tr>'."\n";
echo '</tbody>';
}
echo '</table>'."\n";
// fin du tableau.
?>
J'ai un peu de mal avoir ca que tu veux faire. Si tu pouvais m'expliquer un peu plus en détail. -- Ce qui donne une éventuelle matière à suspecter une quelconque propagande ... |
Fulltrip |
Le 04/03/2008 à 11:06 |
|
|
Re,
oui désolé de vous répondre si tardivement mais je ne pouvais pas avant, sinon je me suis trompé, vous avez raison, ils sont sur le même fichier...comment avant ils étaient dans des fichiers séparés.
Sinon je ne sais toujours pas comment résoudre mon problème! Je me suis renseigner un peu partout et le problème reste irrésolu!
Merci d'avance pour votre aide! |
Brako |
Le 04/03/2008 à 19:31 |
|
|
voilà j'ai trouvé !!
le problème vient d'ici
<?
while ($data = mysql_fetch_array($req)) {
sscanf($data['date_signature'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
echo '<table id="table1" >'."\n";
echo '<thead>';// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr id="tr1">';
echo '<td id="td1"><b><u>auteur</u></b></td>';
echo '<td id="td1"><b><u>message</u></b></td>';
echo '<td id="td1"><b><u>le:</u></b></td>';
echo '</tr>'."\n";
echo '</thead>';
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($req)) {
echo '<tbody>';
echo '<tr id="tr1">';
echo '<td id="td1">'.$row['auteur'].'</td>';
echo '<td id="td1">'.$row['message'].'</td>';
echo '<td id="td1">'.$row['date_signature'].'</td>';
echo '</tr>'."\n";
echo '</tbody>';
}
echo '</table>'."\n";
// fin du tableau.
?>
Il y a une boucle while en trop. l'intitulé des colonne ne doit être dans une boucle. Après je sais pas pourquoi il y avait ce bug.
Voila le script corrigé avec quelques modifications. Je l'ai testé sur mon hébergeur donc normalement le script fonctionne.
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<title>Rap34</title>
<meta http-equiv="Content-Type" content="text/html; charset=" />
<link rel="stylesheet" type="text/css" href="style.css" /></head>
<body>
<div id="conteneur">
<div id="haut">
<div class="Style7">
<p><img src="images/banniere2.png" width="750" height="180"></p>
</div>
</div>
<div id="centre">
<div id="centrage">
<div id="menu">
<ul>
<li><a href="index.xhtml">ACCUEIL</a></li>
<li><a href="artiste.html">ARTISTES</a></li>
<li><a href="livredor.php">LIVRE D'OR</a></li>
<li><a href="commander.xhtml" >COMMANDER</a></li>
<li><a href="contact.xhtml" >CONTACT</a></li>
</ul>
</div>
<div id="droite">
<div id="haut_droite">
<p><img src="images/des_3.gif" width="35" height="25"/></p>
<p class="Style2"><span class="Style11">Lache un com's</span></p>
<br /><br />
<?php
if (isset($_POST['go']) && $_POST['go']=='Signer') {
if ((isset($_POST['auteur'])) && (isset($_POST['email'])) && (isset($_POST['message']))) {
// si les 3 variables ne sont pas vides, et si l'adresse E-mail est valide, alors, et seulement dans ce cas, on fera notre insertion dans la base
if ((!empty($_POST['auteur'])) && (!empty($_POST['email'])) && (!empty($_POST['message']))) {
// on verifie le format de l'adresse E-mail saisie
$test_mail = eregi ('^[_a-z0-9-]+(.[_a-z0-9-]+)*@[a-z0-9-]+(.[a-z0-9-]+)+$', $_POST['email']);
if ($test_mail) {
// on se connecte à notre base
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('livredor', $base);
// on prepare notre requête d'insertion des données
$sql = 'INSERT INTO livre_or VALUES("", "'.mysql_escape_string($_POST['auteur']).'", "'.mysql_escape_string($_POST['email']).'", "'.date("Y-m-d H:i:s").'", "'.mysql_escape_string($_POST['message']).'")';
// on lance la requête
mysql_query($sql) or die('Erreur SQL !'.$sql.'<br />'.mysql_error());
// on ferme la connexion à la base de données
mysql_close();
$auteur = htmlentities(trim($_POST['auteur']));
$email = htmlentities(trim($_POST['email']));
$message = '';
}
else {
$erreur = 'Votre adresse E-mail est invalide.';
}
}
else {
$erreur = 'Au moins un des champs est vide.';
if(empty($_POST['auteur']))
{
$erreurAuteur = 'Veuillez entrer un pseudo';
}
if(empty($_POST['email']))
{
$erreurEmail = 'Veuillez entrer vôtre adresse E-mail';
}
if(empty($_POST['message']))
{
$erreurMessage = 'Veuillez entrer un message';
}
}
}
else {
$erreurFatale = 'Les variables nécessaires au script ne sont pas définies.';
}
}
if(isset($erreur))
{
$auteur = htmlentities(trim($_POST['auteur']));
$email = htmlentities(trim($_POST['email']));
$message = htmlentities(trim($_POST['message']));
}
?>
<p style="text-align: center;"><?php if(isset($erreur)) { echo $erreur;} ?></p>
<form action="livredor.php" method="post">
<table>
<tr><td>
<span class="gras">Auteur : <?php if($erreurAuteur) { echo $erreurAuteur; } ?></span>
</td><td>
<input type="text" name="auteur" maxlength="30" size="50" value="<?php if ($auteur) echo $auteur; ?>"/>
</td></tr><tr><td>
<span class="gras">Adresse E-mail : <?php if($erreurEmail) { echo $erreurEmail; } ?></span>
</td><td>
<input type="text" name="email" maxlength="50" size="50" value="<?php if ($email) echo $email; ?>">
</td></tr><tr><td>
<span class="gras">Votre message : <?php if($erreurMessage) { echo $erreurMessage; } ?></span>
</td><td>
<textarea name="message" cols="50" rows="10"><?php if ($message) echo $message; ?></textarea>
</td></tr><tr><td><td align="right">
<input type="submit" name="go" value="Signer">
</td></tr></table>
</form>
<div class="englobe_h3">
<h2 align="center" >Commentaires</h2>
</div>
<?php
$base = mysql_connect ('localhost', 'root', '');
mysql_select_db ('livredor', $base);
$sql = 'SELECT auteur, email, date_signature, message FROM livre_or ORDER BY id DESC';
$req = mysql_query($sql) or die('Erreur SQL !<br />'.$sql.'<br />'.mysql_error());
$nb_signature = mysql_num_rows($req);
if ($nb_signature == 0) {
echo 'Aucune signature.';
}
else {
echo '<table id="table1" >'."\n";
echo '<thead>';// première ligne on affiche les titres prénom et surnom dans 2 colonnes
echo '<tr id="tr1">';
echo '<td id="td1"><b><u>auteur</u></b></td>';
echo '<td id="td1"><b><u>message</u></b></td>';
echo '<td id="td1"><b><u>le:</u></b></td>';
echo '</tr>'."\n";
echo '</thead>';
// lecture et affichage des résultats sur 2 colonnes, 1 résultat par ligne.
while($row = mysql_fetch_array($req)) {
sscanf($row['date_signature'], "%4s-%2s-%2s %2s:%2s:%2s", $annee, $mois, $jour, $heure, $minute, $seconde);
echo '<tbody>';
echo '<tr id="tr1">';
echo '<td id="td1">'.$row['auteur'].'</td>';
echo '<td id="td1">'.$row['message'].'</td>';
echo '<td id="td1">'.$row['date_signature'].'</td>';
echo '</tr>'."\n";
echo '</tbody>';
}
echo '</table>'."\n";
// fin du tableau.
}
// on libère l'espace mémoire alloué pour cette requête
mysql_free_result ($req);
// on ferme la connection à la base de données.
mysql_close ();
?>
</div>
</div>
<div id="bas"> </div>
</div>
</div>
<p class="signature"><span class="Style2">Design by</span><span id="krek"><span class="Style5"> Schevshev,</span> <span class="Style6">Vladou</span> <span class="Style2">&</span> El jefe</span> <span class="Style2">: www.rap34.fr</span> </p>
</body>
</html>
Par contre je sais pas si le script est sécurisé, vu que je suis pas un pro du php... à vériffier. -- Ce qui donne une éventuelle matière à suspecter une quelconque propagande ... |
Fulltrip |
Le 04/03/2008 à 21:50 |
|
|
Merci beaucoup déjà pour ton aide! Mais il y a des erreurs dans l'affichage: Auteur : Notice: Use of undefined constant erreurAuteur - assumed 'erreurAuteur' in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 102 Notice: Undefined variable: erreurAuteur in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 102 Adresse E-mail : Notice: Use of undefined constant erreurEmail - assumed 'erreurEmail' in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 106 Notice: Undefined variable: erreurEmail in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 106 Votre message : Notice: Use of undefined constant erreurMessage - assumed 'erreurMessage' in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 110 Notice: Undefined variable: erreurMessage in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 110 mais je vais essayé de me débrouiller! et qu'entends tu par là qu'il n'est pas sécurisé? Merci en tout cas il n'y plus l'erreur précédente meme si elle en a généré une nouvelle! |
Brako |
Le 04/03/2008 à 22:02 |
|
|
Arf désolé
J'avais oublié de mettre les "$" devant les variables, ce qui est étrange c'est que le script fonctionnait très bien sur mon hébergeur..... En tout cas j'ai corrigé le script au dessus.
Cette fois c'est la bonne :) -- Ce qui donne une éventuelle matière à suspecter une quelconque propagande ... |
Fulltrip |
Le 05/03/2008 à 12:59 |
|
|
Merci encore sincèrement! Mais je vois pas ou tu as oublié les "$" devant les variables...j'aimerai bien qu'il soit complètement fonctionnel!
Merci encore! |
Brako |
Le 05/03/2008 à 13:20 |
|
|
J'avais oublié les "$" sur les variables du formulaire J'avais écrit :
<?php if(erreurAuteur) { echo $erreurAuteur; } ?>
au lieu de :
<?php if($erreurAuteur) { echo $erreurAuteur; } ?>
J'avais fait la même erreur sur les variables $erreurMessage et $erreurEmail Voilà d'où venait la fameuse erreur : Fulltrip a écrit : Notice: Use of undefined constant erreurAuteur - assumed 'erreurAuteur' in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 102
Notice: Undefined variable: erreurAuteur in C:\Users\fulltrip\Desktop\rap34\livredor.php on line 102
Normalement maintenant sa devrait fonctionner correctement. -- Ce qui donne une éventuelle matière à suspecter une quelconque propagande ... |