Probleme date -PHP-Mysql

Résolu/Fermé
Signaler
-
Messages postés
1802
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
12 janvier 2022
-
Bonjour a tous

déja, excusez moi si c'est dans la mauvaise section (par raport a mysql)...

voila, je debute en programmation, dans le php enfait. Apres avoir suivi le tuto qui est sur le site du zero, j'ai quand meme un probleme et je n'ai pas trouver la réponse la-bas :(


je vais vous decrire vite fais ce qui bloque:

j'ai voulu mettre un petit systeme de commentaires, avec des champs a remplir (auteur, le sujet, le texte), je le poste, tout va bien, il s'affiche bien, mais, je demande aussi a php de me recuperer l'heure pour qu'il affiche la date et l'heure a laquelle ca a été posté.

Malheuresement, ca me met: posté le 00/00/0000 a 00h00

apres quelques recherches, je n'ai pas tellement compris ce qu'il fallait faire, comme je debute juste, je voyais des fonctions que je ne connaissais pas et que je ne savais pas utiliser :/


je me tourne donc vers vous, si vous aviez une idée de comment résoudre ce probleme :)

vous allez surement me demander des infos plus precises, mais, je ne pas sais quoi, j'essayerais de vous repondre le plus rapidement possible ;)

merci a mes futurs sauveurs ^^



8 réponses

Messages postés
5290
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
788
Et bien pour faire simple, sans ton code on saura pas te dire ce qui ne va pas dedans =)

Pour le coller, utilise la balide "code" (le bouton avec <> écris dessus). Comme ça, ça respecte l'indentation, et c'est lisible.
0
ok, jme doutais bien un peu de ca

merci de m'avoir répondu si vite !!

voila le code de ma page qui me sert a récuperer les commentaires + a la fin, les champs pour en créer

<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Commentaire</title> 
<link href="css/commentaire.css" rel="stylesheet" type="text/css" /> 
</head> 

<body> 

<?php 
 include('banniere.php'); 
 include('menu.php'); 
 include('news.php'); 
 ?> 

<div class="date"> 

<?php include('date.php'); ?> 

</div> 

<div id="corps"> 
 <h1>Vos commentaires</h1> 
<?php 
// Connexion à la base de données 
try 
{ 
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
    $bdd = new PDO('mysql:host=localhost;dbname=site', 'root', '', $pdo_options); 
  
    // On récupère les 10 derniers billets 
    $req = $bdd->query('SELECT id, titre, auteur, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh%imin%ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0, 20'); 
     
    while ($donnees = $req->fetch()) 
    { 
    ?> 
<div class="messages"> 


        <h3> 
        
        <em>le <?php echo $donnees['date_creation_fr']; ?> 
        posté par <?php echo $donnees['auteur']; ?> </em><br /> 
        <?php echo htmlspecialchars($donnees['titre']); ?> 
        </h3> 
         
        <p> 
        <?php //contenu du commentaire 
  echo nl2br(htmlspecialchars($donnees['contenu'])); ?> 
        <br /> 
        </p> 
 </div>        

  <?php 
    } // Fin de la boucle des billets 
    $req->closeCursor(); 
     
} 
catch(Exception $e) 
{ 
    die('Erreur : '.$e->getMessage()); 
} 
?> 
</div> 

<div id="post"> 
       

<form action="post_commentaire.php" method="post"> 
        <p> 
        <label for="auteur">Votre nom</label> : <input type="text" name="auteur" id="auteur" /><br /> 
        <label for="titre">Titre</label> : <input type="text" name="titre" id="titre" /><br /> 
       <textarea name="contenu" rows="8" cols="45" ></textarea><br /> 
         
   
       

        <input type="submit" value="Poster" /> 
 </p> 
    </form> 

</div> 
 <?php 
 include('pied_de_page.php'); 
 ?> 

</body> 
</html> 


et voila la page qui se charge de transmettre tous ca a mysql:

<!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> 
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> 
<title>Document sans titre</title> 
</head> 
<body> 
<?php 
// Connexion à la base de données 
try 
{ 
    $pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION; 
    $bdd = new PDO('mysql:host=localhost;dbname=site', 'root', '', $pdo_options); 
  
 // Insertion du commentaire à l'aide d'une requête préparée 
 $req = $bdd->prepare('INSERT INTO billets (titre, auteur, contenu) VALUES (?,?,?)'); 
 $req->execute(array($_POST['titre'], $_POST['contenu'], $_POST['auteur'])); 
  
 // Redirection du visiteur vers la page 
    header('Location: commentaire.php'); 
} 
catch(Exception $e) 
{ 
    die('Erreur : '.$e->getmessage()); 
} 
?> 
</body> 
</html> 


il vous faut aussi la base de donnée ??

ma table s'apelle "billets" dedans, il y a:

id(int11) clé primaire, auto_increment
auteur: varchar(255)
titre: varchar(255)
contenu: text
date_creation: datetime

tous avec "non" dans la colone null ainsi que dans défaut, toute ont "aucun"

j'espere avoir tous mis, n'hesitez pas a me redemander, a critiquer le code etc... !! je debute ;)

encore merci !
0
Messages postés
5290
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
788
Yop,

Comment tu veux rentrer ta date dedans avec cette requête?
$req = $bdd->prepare('INSERT INTO billets (titre, auteur, contenu) VALUES (?,?,?)');


Y'a la fonction time() ou date() qui peux t'interresser. Cherche un tour sur le man de Php. Mais je crois bien que sur le SDZ y'a un passage du cours il ou parle du timestamp. C'est exactement ça qu'il te faut :)
0
encore merci !!


je me doutais bien qu'il fallait une fonction de ce genre. sur le sdz, ils parlent du timestap mais, surtout dans des cookies...

et, apres plusieurs test, je ne vois pas du tout comment integrer time () ou date() dans cette fonction. En fait, je ne la comprend meme pas quand j'integre ca :S

ca ressemblerais a ca ??
 $req = $bdd->prepare('INSERT INTO billets (titre, auteur, contenu, date()) VALUES (?,?,?)'); 
?? (evidement, ca me retourne une erreur ^^)

si tu pouvais me donner un petit coup de pouce stp ^^

encore merci d'avoir répondu aussi vite !
0
Messages postés
5290
Date d'inscription
mercredi 28 janvier 2009
Statut
Contributeur
Dernière intervention
29 mai 2016
788
C'est loin pour moi, mais fait:
echo date();


Tu en déduis donc que:
$date = date();
 $req = $bdd->prepare('INSERT INTO billets (titre, auteur, contenu, date) VALUES (?,?,?,?)'); 
$req->execute(array($_POST['titre'], $_POST['contenu'], $_POST['auteur'], $date)); 


ça doit s'approcher de ce que tu veux.

y'a plus qu'à utiliser le cours sur le timestamp pour faire apparaitre la date sous le bonne forme une fois extraite de la BDD pour l'afficher =)
0
Messages postés
2064
Date d'inscription
vendredi 29 juin 2007
Statut
Contributeur
Dernière intervention
7 décembre 2017
713
Bonjour,
ce lien peut t'aider.
Cdt
0
Messages postés
18628
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
4 janvier 2022
4 349
Salut,

La fonction date() requiert un argument, une chaine indiquant le format.
Tu peux utiliser la fonction SQL NOW() afin d'insérer la date "actuelle".

$sql  = 'INSERT INTO billets ';
$sql .= '   (titre, auteur, contenu, date_creation) ';
$sql .= 'VALUES ';
$sql .= '   (?,?,?,NOW())';

$req = $bdd->prepare($sql);
$req->execute(array(
    $_POST['titre'],
    $_POST['contenu'],
    $_POST['auteur']
));

La pensée mène le monde.
0
merci a vous deux, j'ai pris l'option de apatik qui me parlais plus ;)

et ca marche niquel !!

sauf un probleme (evidement hein ^^)
l'heure qui est indiquée a 2h de retard

pour l'heure que je fais afficher sur le site, j'ai reussi a ajouter 2 a la valeur $heure

mais, la, apres plusieurs essais, je ne sais pas ou le mettre. Si il y a une autre solution, je suis preneur, mais, encore un grand merci a vous deux ;)
0
Messages postés
18628
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
4 janvier 2022
4 349
La fonction date() utilisée par le code de Apatik permet d'obtenir une chaine à partir d'un timestamp (actuel si pas précisé).
Mais un argument est obligatoire : une chaine indiquant le format de sortie.

« $date = date(); » n'est donc pas valide.

Les champs « DATETIME » requièrent le format suivant : AAAA-MM-JJ HH:MM:SS
0
j'ai écrit ceci dans mon formulaire:
$date = date("Y-m-d-H-i-s");
$req = $bdd->prepare('INSERT INTO billets (titre, auteur, contenu, date_creation) VALUES (?,?,?,?)');
	$req->execute(array($_POST['titre'], $_POST['contenu'], $_POST['auteur'], $date));


puis, mis en forme dans cette requete pour afficher:
$req = $bdd->query('SELECT id, titre, auteur, contenu, DATE_FORMAT(date_creation, \'%d/%m/%Y à %Hh %imin %ss\') AS date_creation_fr FROM billets ORDER BY date_creation DESC LIMIT 0, 10');


ca marche, mais c'est quand meme bon ?? Je recherche tous simplement le moyen d'ajouter +2 a l'heure pour qu'elle soie bonne car, pour un message posté a 19h20 heure francaise, cela affiche 17h20 ...

merci !
0
Messages postés
18628
Date d'inscription
dimanche 17 février 2008
Statut
Contributeur
Dernière intervention
4 janvier 2022
4 349
« $date = date("Y-m-d-H-i-s"); » : ce n'est pas le format correct.
Utilise plutôt la fonction SQL NOW(), elle se chargera d'inscrire la date au bon format, ça évite du code PHP supplémentaire.

https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/915206-les-dates-en-sql
0
Génial !! je ne m'en souvenais plus !!

merci beacoup, ca marche niquel ;)

merci a tous !!
0
Messages postés
1802
Date d'inscription
vendredi 9 mai 2008
Statut
Modérateur
Dernière intervention
12 janvier 2022
1
merci
0