Pourquoi j'arrive pas à exécuter mon code

Suivre ce topic
Ce topic est suivi par : Personne...
SkinDePewDiePie_

SkinDePewDiePie_ Le 23 décembre 2017 à 15:12 (Édité le 25 janvier 2019 à 17:54)

Bonjour,
J'ai suivi les deux tutoriels de comment créer un forum j'arrive à l’épisode 3 et j'arrive pas a exécuter ce code : 
$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));
si seulement quelqu’un peut m'aider
Cdlt 
Balatharas

Balatharas Le 23 décembre 2017 à 21:33

Salut,
  • utilise les balises [CODE]
  • tu vois quelle erreur ?
  • ne poste pas deux fois le même sujet
SkinDePewDiePie_

SkinDePewDiePie_ Le 24 décembre 2017 à 07:04

$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)); 


je ne vois aucune erreur pourant
Cdlt
Balatharas

Balatharas Le 24 décembre 2017 à 17:48

Essaye ça (les ->bindValue permettent de spécifier le type de donnée insérée):
<?php
$ins = $bdd->prepare('INSERT INTO f_topics(id_createur, sujet, contenu, notif_createur, date_heure_creation) VALUES(:idc, :s, :c, :nc, :dhc');
$ins->bindValue(':idc', $_SESSION['id'], PDO::PARAM_INT);
$ins->bindValue(':s', $sujet, PDO::PARAM_STR);
$ins->bindValue(':c', $contenu, PDO::PARAM_STR);
$ins->bindValue(':nc', $notif_mail, PDO::PARAM_STR);
// $ins->bindValue(':nc', $notif_mail, PDO::PARAM_BOOL); Si ta variable $notif_mail est un booléen (true/false | 0/1) alors met cette ligne plutôt que celle du dessus
$ins->bindValue(':dhc', date('Y-m-d H:i:s'), PDO::PARAM_STR);
if($ins->execute()) {
     echo 'Exécution réussie';
} else {
     echo 'Problème rencontré';
}
?>   
SkinDePewDiePie_

SkinDePewDiePie_ Le 25 décembre 2017 à 14:06

Ça marche pas ça m'affiche 
 Warning: PDOStatement::execute(): SQLSTATE[HY093]: Invalid parameter number: number of bound variables does not match number of tokens in C:\wamp64\www\PVPArenaMatteo Site\nouveau_topic.php on line 24
Balatharas

Balatharas Le 25 décembre 2017 à 15:08

Montre le code que tu a exécuté c’est bizarre
SkinDePewDiePie_

SkinDePewDiePie_ Le 25 décembre 2017 à 15:39

<?php
session_start();
$bdd = new PDO('mysql:host=127.0.0.1;dbname=espace_du_site', 'root', '');
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));
               $ins->bindValue(':idc', $_SESSION['id'], PDO::PARAM_INT);
            $ins->bindValue(':s', $sujet, PDO::PARAM_STR);
            $ins->bindValue(':c', $contenu, PDO::PARAM_STR);
            $ins->bindValue(':nc', $notif_mail, PDO::PARAM_BOOL);
            $ins->bindValue(':dhc', date('Y-m-d H:i:s'), PDO::PARAM_STR);
            if($ins->execute()) {
                 echo "Exécution réussie";
            } else {
                 echo "Problème rencontré";
            }
            } 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/nouveau_topic.view.php');
?>
Balatharas

Balatharas Le 25 décembre 2017 à 20:08

Essaie de remplacer:
if(isset($_POST['tmail'])) {
     $notif_mail = 1;
} else {
     $notif_mail = 0;
}
par:
if(isset($_POST['tmail'])) {
     $notif_mail = true;
} else {
     $notif_mail = false;
}
Puis de mettre ta colonne notif_createur dans ta bdd en type BOOLEAN
SkinDePewDiePie_

SkinDePewDiePie_ Le 26 décembre 2017 à 08:39

Balatharas j'arrive pas a mettre notif_createur en type BOOLEAN ça me le met en type tinyint(1)
Balatharas

Balatharas Le 26 décembre 2017 à 17:52

Oui c’est pareil pour sql car 1 = true et 0 = false
tu as essaye du coup ?
Vous devez être connecté pour poster une réponse. Se connecter ou Créer un compte