problème livre d'or
Hors ligneFulltrip Le 29/02/2008 à 15:31 Profil de Fulltrip Configuration de Fulltrip

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">&amp;</span> El jefe</span> <span class="Style2">: www.rap34.fr</span> </p>

 </body>
</html>
Hors ligneBrako Le 29/02/2008 à 22:50 Profil de Brako Configuration de Brako

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 ...
Hors ligneFulltrip Le 01/03/2008 à 00:43 Profil de Fulltrip Configuration de Fulltrip

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.
Hors ligneBrako Le 01/03/2008 à 10:25 Profil de Brako Configuration de Brako

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 ...
Hors ligneFulltrip Le 04/03/2008 à 11:06 Profil de Fulltrip Configuration de Fulltrip

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!
Hors ligneBrako Le 04/03/2008 à 19:31 Profil de Brako Configuration de Brako

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">&amp;</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 ...
Hors ligneFulltrip Le 04/03/2008 à 21:50 Profil de Fulltrip Configuration de Fulltrip

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!
Hors ligneBrako Le 04/03/2008 à 22:02 Profil de Brako Configuration de Brako

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 ...
Hors ligneFulltrip Le 05/03/2008 à 12:59 Profil de Fulltrip Configuration de Fulltrip

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!
Hors ligneBrako Le 05/03/2008 à 13:20 Profil de Brako Configuration de Brako

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 ...
Vous avez résolu votre problème avec VIC ? Faites-le savoir sur les réseaux sociaux !
Vulgarisation-informatique.com
Cours en informatique & tutoriels