Problème affichage date dans le module de news

Problème affichage date dans le module de news - PHP - Programmation

Marsh Posté le 12-03-2013 à 22:07:12    

Bonjour,
 
j'ai mis un module de news sur mon site, mais je rencontre un problème: Lorsque je rajoute une news la date affichée est le 31/12/1969 à 19h00.
Après plusieurs manipulations, j'ai toujours pas réussi à résoudre le problème. Je me tourne donc vers vous pour avoir une aide.  
 
Je vous transmet mon fichier news.html:

 
<?php        
   
mysql_connect("", "", "" ); //On se connecte à Mysql
mysql_select_db("" );// on selectionne la base  
   
// le nombre de news (3) qu'on veut afficher dans une page  
$MessagesPerPage = 3;    
// On récupère le nombre total de messages  
$return = mysql_query('SELECT COUNT(*) AS nb_messages FROM news');  
$data = mysql_fetch_array($return);  
$Messages = $data['nb_messages'];  
// On calcule le nombre de pages à créer  
$Pages  = ceil($Messages / $MessagesPerPage);  
// Puis on fait une boucle pour écrire les liens vers chacune des pages  
echo 'Page : ';  
for ($i = 1 ; $i <= $Pages ; $i++)  
{  
    echo '<a href="news.php?page=' . $i . '">' . $i . '</a> ';  
}  
   
// On récupère les 3 dernières news  
   
if (isset($_GET['page']))  
{  
        $page = $_GET['page']; // On récupère le numéro de la page indiqué dans l'adresse ( exemple news.php?page=4)  
}  
else // si non la variable n'existe pas, c'est la première fois qu'on charge la page  
{  
        $page = 1; // On affiche la page 1, la page par defaut  
}  
   
$firstmessage = ($page - 1) * $MessagesPerPage;  
   
$result = mysql_query('SELECT * FROM news ORDER BY id DESC LIMIT ' . $firstmessage . ', ' . $MessagesPerPage);  
   
while ($data = mysql_fetch_array($result))  
{  
   
?>  
   
   
   
    <h2>  
       
       <?php echo stripslashes($data['titre']); //on recupère titre  ?>  
    </h2>    
   
       
   
<em> Ajouté le <?php echo date('d/m/Y à H\hi', $data['date']); //on recupère la date ?></em>  <BR>  
   
    <?php    
    $url = $data['url'];  
    // s'il n'y a l'url de l'image, on affiche le contenu  
if (empty($url))
   {    
   $contenu = nl2br(stripslashes($data['contenu']));  
    echo $contenu;  
   }  
else// sinon on affiche l'image puis le contenu  
{  
?>  
<img  alt="image de news" src="<?php echo $url ?>"/>  
 <?php    
   $contenu = nl2br(stripslashes($data['contenu']));  
    echo $contenu;    
}  
//Nous affichons le lien nous dirigeant vers les commentaires  
?>    
 <br/><em><a href="commentaires.html?news=<?php echo $data['id']; ?>">Commentaires</a></em>  
 <?php    
} // Fin de la boucle des news  
   
?>  
 
Voici mon fichier ajout_news.html:

 
<?php        
mysql_connect("", "", "" ); //On se connecte à Mysql
mysql_select_db("" );// on selectionne la base  
   
if (isset($_POST['titre']) && isset($_POST['contenu']))  
 {    
 $titre = addslashes($_POST['titre']);  
 $contenu = addslashes($_POST['contenu']);  
 $url = addslashes($_POST['url']);  
 //on verifie si le champ titre et le champ contenu ne sont pas vides  
if ($_POST['titre'] != NULL && $_POST['contenu'] != NULL )    
 {  
 //on balance tous dans la table  
mysql_query ("insert into news values    
('', '". $titre ."','". $contenu ."', '" .$url."', '" .time()."')" );  
 //on confirme l'envoie des données  
 echo"news ajouté.";  
 }  
else// sinon on affiche un message d'erreur  
 {  
echo"verifiez si le titre et le contenu ont été saisis.";    
 }  
   
 }  
 mysql_close();// on ferme la connexion  
   
?>      
 
 <form method="post" action="add_news.html">  
      Titre du news : <input name="titre"/><br/>  
       contenu :<br/>  
      <textarea name="contenu" rows="10" cols="45"> </textarea> <br/>  
   url de l'image : <input name="url"/><br/>  
       <input type="submit" value="Envoyer"/>  
</form>
 
Dans mon table, j'ai un champ date de type datetime. Par contre dans mon bdd, la date affiché c'est 0000-00-00 00:00:00
 
Voila, est-ce que vous pourriez m'aider à corriger cette problème?
 
Merci par avance,


Message édité par david214 le 12-03-2013 à 22:13:38
Reply

Marsh Posté le 12-03-2013 à 22:07:12   

Reply

Marsh Posté le 12-03-2013 à 22:29:22    

Attention lors de ton insertion en bdd tu utilises la fonction php time() qui renvoie un timestamp Unix (nombre de secondes écoulées depuis le 1er janvier 1970 00:00 GMT), si ton champ en base est de type datetime, il ne va pas comprendre et utiliser 0000-00-00 00:00:00.
 
De fait quand tu vas récuperer cette date pour l'afficher sur ta page de news avec la fonction date(), il va t'afficher l'heure correspondante au 1er janvier 1970 00:00 GMT sur ton fuseau horaire à toi, donc le 31/12/1969 19:00 si tu es à GMT +5

Reply

Marsh Posté le 13-03-2013 à 21:42:11    

Ah d'accord...
Comme je suis débutant tu pourrai m'aider? Je dois enlever complètement le time() ou je dois le remplacer par now ou... ?

Reply

Marsh Posté le 14-03-2013 à 00:03:43    

Je pense que dans ta requète d'insert tu devrais avoir :

Code :
  1. mysql_query ("insert into news values   
  2. ('', '". $titre ."','". $contenu ."', '" .$url."', '" .date("Y-m-d H:i:s" )."')" );
 

Pour plus d'infos sur la fonction date() et ses paramètres : http://php.net/manual/fr/function.date.php

 

Ensuite pour l'affichage il faudra adapter car date() prend un timestamp comme second paramètre, donc cette partie de code sera à mettre en place pour l'affichage :

Code :
  1. <em> Ajouté le <?php echo date('d/m/Y à H\hi', strtotime($data['date'])); //on recupère la date ?></em>  <BR>
 

Enfin petite remarque, tu travailles avec des entrées utilisateurs que tu vas stocker et afficher, il faut faire très attention avec ce genre de données car tu pourrais vite te retrouver avec des comportements dangereux. Regarde du coté de la sécurisation des entrées utilisateurs et des requètes SQL (injection & co.), tu trouveras pas mal d'infos sur ces sujets.


Message édité par xaeon le 14-03-2013 à 00:06:45
Reply

Marsh Posté le 14-03-2013 à 20:15:33    

Ah ok... Merci de me l'avoir signalé. Je vais faire des recherche sur ca...
 
Sinon, je viens d'essayer avec la correction, et il semblerai que ca marche, il y a juste le problème de fuseau horaires, mais ca je peux le faire...
 
Une dernière question: vu que je met un formulaire de commentaire, est-ce que tu sais si je dois faire déclarer mon site à la CNIL? (Parce que la déclaration des sites personnels n'est plus obligatoire, mais je ne sais plus si je dois le faire pour les commentaires)?
 
Merci encore, pour m'avoir aidé et merci pour les remarques...


Message édité par david214 le 14-03-2013 à 20:16:28
Reply

Marsh Posté le 14-03-2013 à 21:42:38    

Bonne question concernant la CNIL, je ne suis pas spécialiste mais je dirais que tant que tu n'as pas d'information personnelles sur la personne qui poste le commentaire (email par exemple), tu peux t'en passer, dans le cas contraire j'aurai tendance à dire que c'est nécessaire mais tu trouveras des personnes ici mieux documentées que moi.

Reply

Marsh Posté le 15-03-2013 à 13:59:14    

Ok, très bien...
 
Merci en tout cas pour tout, tu m'a vraiment débloqué... et merci aussi pour les remarques...  
Pour la CNIL, ok, je vais faire des recherche, ou au pire des cas, je prendrai contact directement avec eux...
 
merci,

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed