Problème d'écriture dans une base de données

Suivre ce topic
Ce topic est suivi par : Goyom
Ce topic a été résolu
Goyom

Goyom Le 14 juin 2016 à 19:27 (Édité le 25 janvier 2019 à 17:51)

Bonjour 😀

J'ai suivi les tutos de PrimFX sur le PHP et SQL pour essayer de créer un chat et j'ai un problème : je n'arrive pas à insérer une entrée dans ma base de données. Pourtant, quand j'essaye de lire ce qui est déjà écrit dans ma base de données, le script affiche bien tout.

Voilà le code :
<!DOCTYPE html PUBLIC "-//W3C//DTD HTML 4.01//EN"
"http://www.w3.org/TR/html4/strict.dtd">
<html lang="fr">
<head>
   <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" >
   <title>Test</title>
   <link rel="stylesheet" href="style.css">
   <script src="script.js" type="text/javascript" ></script>
   <link rel="icon" type="image/png" href="favicon.png" />
</head>
<body>
   <?php include("header.php"); ?>
   
   <?php
   $bdd = new PDO("mysql:host=127.0.0.1;dbname=pfc;charset=utf8","root","");
   $requete = $bdd->exec("INSERT INTO chat(pseudo, message) VALUES ('Goyom','Bonjour !')");
   
   $reponse = $bdd->query('SELECT pseudo, message FROM chat ORDER BY id ASC LIMIT 0, 10');
   while ($donnees = $reponse->fetch())
      {
         echo '<br><strong>' . htmlspecialchars($donnees['pseudo']) . ' : </strong>' . htmlspecialchars($donnees['message']);
      }
   ?>
</body>
</html>
En espérant que vous pourrez m'aider.
Merci d'avance !

Goyom


PS : Je ne sais pas si ça peut être utile, mais voilà ma table, avec deux lignes entrées manuellement :
TheOldNoob

TheOldNoob Le 15 juin 2016 à 11:35 (Édité le 15 juin 2016 à 11:36)

Salut Goyom,
j'aurais fait deux ou trois truc differement.
ta colonne date, j'aurais fait un date_add et je l'aurais mis en datetime dans la table afin d'avoir l'heure de l'ajout.
Ainsi dans ton code, tu pourrais chercher l'ordre
'SELECT pseudo, message FROM chat ORDER BY date_add ASC LIMIT 10'
Pour le retour des données,
while ($donnees = $reponse->fetch())
J'aurais fait : (sachant que 'chat' est le nom de ta table)
$reponse = bdd->query(SELECT * FROM chat ORDER BY date_add DESC LIMIT 10');
$reponse->execute();

$view_chat = $reponse->fetchAll(PDO::FETCH_ASSOC); 
foreach($view_chat as $view){ ?>
<div><strong><?=$view['pseudo']?> :</strong> <?=$view['message'] ?>; </div><br>
<?php } ?>
ça doit te faire une boucle limité au 10 dernier message de tout ce qui se trouve dans ta table 'chat' classer par date et heure d'ajout.  Après a toi d'ajouter les champs que tu souhaite faire apparaitre ou bon te semble sur ta page (tu peu ajouter la date et l'heure du massage... etc...
Florian

Florian Le 15 juin 2016 à 14:41

Tu oublies date, donc tu as juste a faire modifier comme ça
   $bdd = new PDO("mysql:host=127.0.0.1;dbname=pfc;charset=utf8","root","");   $requete = $bdd->exec("INSERT INTO chat(pseudo, date, message) VALUES ('Goyom', time(), 'Bonjour !')");
ça va te retourner en secondes depuis le 1janvier 1970 tu peux trier tes messages comme ça aussi 
TheOldNoob

TheOldNoob Le 15 juin 2016 à 15:11

Bonne remarque Florian,
Par contre, j'utiliserais NOW() a la place de time() histoire de simplifier. vu que ça reprend la date au moment de l'insertion

La fonction NOW() ainsi que ses innombrables synonymes comme CURRENT_TIMESTAMP() retournent la date complète au format "AAAA-MM-JJ HH:MM:SS
Goyom

Goyom Le 15 juin 2016 à 21:40 (Édité le 15 juin 2016 à 21:40)

Merci à vous Florian et TheHoldNoob pour vos réponses, ça m'a beaucoup aidé !
J'ai pu bien corriger et améliorer mon chat, en rajoutant aussi "port=3306;" dans le "$bdd = new PDO" (ça a l'air d'être mieux avec plutôt que sans).  :)
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte