Probleme date -PHP-Mysql

Résolu
BlackYoup -  
@karamel Messages postés 6 Date d'inscription   Statut Modérateur Dernière intervention   -
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

  1. Apatik Messages postés 6040 Statut Contributeur 789
     
    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
  2. BlackYoup
     
    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
  3. Apatik Messages postés 6040 Statut Contributeur 789
     
    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
  4. BlackYoup
     
    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
    1. Apatik Messages postés 6040 Statut Contributeur 789
       
      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
  5. Vous n’avez pas trouvé la réponse que vous recherchez ?

    Posez votre question
  6. bissdebrazza Messages postés 2886 Statut Contributeur 712
     
    Bonjour,
    ce lien peut t'aider.
    Cdt
    0
  7. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
     
    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
  8. BlackYoup
     
    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
    1. avion-f16 Messages postés 19182 Date d'inscription   Statut Contributeur Dernière intervention   4 511
       
      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
    2. BlackYoup
       
      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
    3. BlackYoup
       
      Génial !! je ne m'en souvenais plus !!

      merci beacoup, ca marche niquel ;)

      merci a tous !!
      0
  9. @karamel Messages postés 6 Date d'inscription   Statut Modérateur Dernière intervention   1
     
    merci
    0