enregistrement d'un topic dans la BDD- tuto création d'un forum video3

luffy78

luffy78 Le 21 juin 2019 à 22:27 (Édité le 21 juin 2019 à 22:36)

Bonjour, je suis actuellement bloquer dans la partie 3 création d'un forum pour enregistrer un topic dans la BDD. Le topic que j'ai crée ne s'affiche pas dans la BDD. Je suis bien connecté quand je fais la manipulation. 
J'ai parcouru toutes les discussions du forum pour résoudre mon problème mais sans succès. Si vous pouvez m'aider ça serait top.
Voici mon code :
<?php
 /* Contient la connexion à la $bdd */
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=forum', 'root', '');
/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['id'])) {
   if(isset($_POST['tsubmit'])) {
      if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
         $sujet = htmlspecialchars($_POST['tsujet']);
         $contenu = htmlspecialchars($_POST['tcontenu']);
         if(!empty($sujet) AND !empty($contenu)) {
            if(strlen($sujet) <= 70) {
               if(isset($_POST['tmail'])) {
                  $notif_mail = 1;
               } else {
                  $notif_mail = 0;
               }
               $ins = $bdd->prepare('INSERT INTO f_topics (id_createur,sujet,contenu,notif_createur,date_heure_creation) VALUES(?,?,?,?,NOW())');
               $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
            } else {
               $terror = "Votre sujet ne peut pas dépasser 70 caractères";
            }
         } else {
            $terror = "Veuillez compléter tous les champs";
         }
      }
   }
} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
require('views/new_topic.view.php'); /* Appel du fichier "vue" de notre page */
?>
Voici l'image de ma BDD :


Bon weekend
Merci
Balatharas

Balatharas Le 22 juin 2019 à 01:07

Salut, essaie d'ajouter ceci
var_dump($_POST, $sujet, $ins);
Juste après la ligne $ins->execute (ligne 19 sur ton post).
Donne nous une capture d'écran de la structure de ta table f_topics aussi stp (ses colonnes)
De plus tu devrais penser à mieux sécuriser tes variables. Personnellement j'ajoute en chaque début de pages ceci:
foreach ($_POST as $key => $value) {
   $post[$key] = trim(strip_tags($value));
}

foreach ($_GET as $key => $value) {
   $get[$key] = trim(strip_tags($value));
}
Cela permet d'appliquer la sécurisation sur toutes les variables $_POST et $_GET
Ensuite au lieu d'utiliser $_POST['tsujet'] par exemple, tu utilises $post['tsujet'] en faisant gaffe à ne pas avoir de doublons de variable.
😁
luffy78

luffy78 Le 26 juin 2019 à 22:29

Merci pour ton aide Balatharas !

Voici la capture écran avec le var_dump :

Voici la capture écran avec la table f_topics :



ok c'est noté pour sécuriser mes variables.
Bonne soirée


Balatharas

Balatharas Le 26 juin 2019 à 22:41

Dans ta requête d’insertion je vois que soit tu as mis un « ? » en trop soit tu as oublié de mettre « id_createur » avant « sujet »
luffy78

luffy78 Le 27 juin 2019 à 02:24 (Édité le 27 juin 2019 à 02:25)

oui j'avais oublié de mettre id_createur dans la requête. Avec cette modification le topic ne s'enregistre toujours pas dans la BDD.
Mon code modifié :

 
<?php
 /* Contient la connexion à la $bdd */
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=forum', 'root', '');
/* Traitement du formulaire de création de Topic */
if(isset($_SESSION['id'])) {
   if(isset($_POST['tsubmit'])) {
      if(isset($_POST['tsujet'],$_POST['tcontenu'])) {
         $sujet = htmlspecialchars($_POST['tsujet']);
         $contenu = htmlspecialchars($_POST['tcontenu']);
         if(!empty($sujet) AND !empty($contenu)) {
            if(strlen($sujet) <= 70) {
               if(isset($_POST['tmail'])) {
                  $notif_mail = 1;
               } else {
                  $notif_mail = 0;
               }
               $ins = $bdd->prepare('INSERT INTO f_topics (id_createur,sujet, contenu,date_heure_creation,notif_createur) VALUES(?,?,?,?,NOW())');
               $ins->execute(array($_SESSION['id'],$sujet,$contenu,$notif_mail));
               var_dump($_POST, $sujet, $ins);
            } else {
               $terror = "Votre sujet ne peut pas dépasser 70 caractères";
            }
         } else {
            $terror = "Veuillez compléter tous les champs";
         }
      }
   }
} else {
   $terror = "Veuillez vous connecter pour poster un nouveau topic";
}
require('views/new_topic.view.php'); /* Appel du fichier "vue" de notre page */
?>

La capture d'écran avec var_dump:
Balatharas

Balatharas Le 27 juin 2019 à 02:52

Ah ! Essaye cette requête:
$ins = $bdd->prepare('INSERT INTO f_topics (id_createur, sujet, contenu, notif_createur, resolu, date_heure_creation) VALUES(?, ?, ?, ?, 0, NOW())');

luffy78

luffy78 Le 27 juin 2019 à 23:01

thanks ! ça fonctionne avec cette requête. Par contre je comprends pas pourquoi ça fonctionnerait cete fois ci avec "resolu" et "0" en plus dans la requête ? 
Balatharas

Balatharas Le 27 juin 2019 à 23:09

C’est parce que ta colonne resolu n’a pas de valeur par défaut donc elle ne peut pas etre vide, du coup j’ai ajoute resolu dans la requete et je lui ai mis la valeur 0 car je ne pense pas que tes topics soient resolus des leur creation 😀
luffy78

luffy78 Le 28 juin 2019 à 21:14

ok merci je comprends mieux maintenant
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte