[RESOLU] 'INSERT INTO VALUE' Ne semble pas fonctionner.

Petit nouveau ! | 9 Messages

01 juin 2021, 11:35

Bonjour,
Je suis une formation sur HTML,CSS et le PHP depuis 2 mois donc je suis assez nouveau.
J'essaye d'insérer un commentaire d'un utilisateur depuis un formulaire en l'insérant dans une BDD 'posts' avec les ID de mon acteur via $_COOKIES. J'ai tester les valeurs avec Vardump() pour vérifier si ils récupère bien toutes info (qui est le cas) mais les données ne veulent pas s'enregistrer, Jai regarder sur différents forums et cela fait déjà 2 jours que je cherche sans repis.

Si vous avez une idée ou même juste me diriger sans la bonne direction je serais très reconnaissant.

<?php
  include_once('session.php');
  // Insert new comment:
  if (isset($_COOKIE['acteur_id'])) {
     echo "value is :" . $_COOKIE['acteur_id'];
    try {
      if ($_POST['author'] == '' || $_POST['date'] == '' || $_POST['comment'] == '')  {
        throw new Exception("veuillez remplir tous les champs avant d'envoyer");
      } else {
        include_once('config.php');

        $req = $connection-> prepare("INSERT INTO 'posts (bank_id, date_created, comment, user_id) VALUES (?, NOW(), ?, ?)");
        $data = $req->execute([$_COOKIE['acteur_id'], $_POST['comment'], $_POST['author']]);
        header('Location: acteur.php?acteur='. $_COOKIE['acteur_id'] .'');
        exit();
      }
    } catch (Exception $e) {
      $_SESSION['error'] = $e->getMessage();
      header('Location: acteur.php?acteur='. $_COOKIE['acteur_id'] .'');
      exit();
    }
  }
?>
La BDD ressemble a ceci :



1 bank_id int(11) Non Aucun(e)
2 date_created date Non Aucun(e)
3 comment varchar(255) latin1_swedish_ci Non Aucun(e)
4 user_id int(11) Non Aucun(e)

Je vous remercie.

Avatar du membre
Eléphant du PHP | 70 Messages

01 juin 2021, 11:46

Salut Karl_R,

Je peux me tromper étant assez nouveau également, mais il me semble que votre champs "date_created" est au format date. Or, vous essayez de lui passer la fonction now(), qui retourne un timestamp (Date + heure:minutes:secondes) et non une date. Si vous essayé de rentré ce genre de donnée manuellement, Mysql vous retournerais une erreur.

Pour passer correctement une date, passer plutôt par la fonction Date : date("Y-m-d")

EDIT :
Le format date de Mysql stocke une date au format AAAA-MM-JJ (Année-Mois-Jour)
Si vous ne spécifiez pas de timezone, cela prendra automatiquement celui de l'utilisateur. Si vous voulez forcer la timezone, procédez comme ceci :
date_default_timezone_set('Europe/Paris');
$date = date('Y-m-d');
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Petit nouveau ! | 9 Messages

01 juin 2021, 12:00

Salut Shadowwera,

Merci pour ta réponse, j'ai tester de remplacer du coup mon NOW() avec date("Y-m-d") mais cela ne marche pas non plus.

j'ai essayer d'enlever totalement du coup la date juste pour voire si l'insert marche, mais du coup toujours pas. j'ai retester de voire si les acteur_id, comment et author marche biens avec Vardump et ils retourne positif du coup je me demande si c'est pas un soucis avec ma BDD.

Avatar du membre
Eléphant du PHP | 70 Messages

01 juin 2021, 12:03

Que met tu à la place de la date du coup dans ta requête ? Car ton champs est NOT NULL donc si tu ne le précise pas la requête aura une erreur et rien se sera ajouté en BDD

En faisant une requete simple, sans variable, l'INSERT fonctionne t'il ?
" La révolution informatique fait gagner un temps fou aux Hommes, mais ils le passent avec leur ordinateur ! " by Khalil Assala

Petit nouveau ! | 9 Messages

01 juin 2021, 12:11

Alors avec une requête toute simple comme :

$req = $connection-> prepare("INSERT INTO 'posts' (bank_id) VALUES (?)");
$data = $req->execute([$_COOKIE['acteur_id']]);

Ou mon $_COOKIE['acteur_id'] est égale a 1

Ne marche pas non plus. J'ai peut être survole quelque chose d'important mais je ne vois pas quoi.

Edit: J'avais oublier un petit apostrophe a la fin de 'posts'
Edit : Ne pas mettre d'apostrophe après INTO.

Petit nouveau ! | 9 Messages

01 juin 2021, 12:44

Je te remercie pour ton aide Shadowwera j'ai trouver la solution a mon soucis!

C'etais idiot de ma part. dans ma tete mon user_id = int mais avec le code que j'ai ecrit il a pris le pseudonyme, du coup j'ai changer le int a Varchar et tout fonctionne, j'ai meme changer nom NOW() a date qui est plus logique en soit.

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 9782 Messages

01 juin 2021, 16:27

Hello,
Un conseil, active la gestion des erreurs de PDO sur PDO::ERRMODE_WARNING quand tu développes, ça te permettra d'avoir des messages d'erreur visibles quand il y a un problème dans tes requêtes ou lors de la connexion :D
https://www.php.net/manual/fr/pdo.error-handling.php
Quand tout le reste a échoué, lisez le mode d'emploi...

Petit nouveau ! | 9 Messages

02 juin 2021, 16:13

Salut @rthur,

Ah je doit avouer que c'est un super bon conseille je te remercie :)