Problème affichage date dans le module de news - PHP - Programmation
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
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... ?
Marsh Posté le 14-03-2013 à 00:03:43
Je pense que dans ta requète d'insert tu devrais avoir :
Code :
|
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 :
|
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.
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...
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.
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,
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