Le problème c'est que justement j'ai écrit ce code d'initialisation à ma bdd:
try {
GLOBAL $bdd;
$bdd = new PDO('');
$bdd->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_WARNING);
} catch(PDOException $e) {
echo $e;
}
Et pareil si je fais un try catch sur mon code d'ajout en base de données, je n'ai pas de report d'erreur ou d'avertissements
Si ça peut aider, voici un var_dump de toutes mes variables récuperée en $_POST:
array(3) { ["ADD"]=> string(5) "React" ["CATEGORIE"]=> string(5) "Front" ["ACTIVE"]=> string(3) "Non" }
voici un var_dump de ma variable $active qui est assigné selon la condition avec le $_POST["ACTIVE"]:
string(5) "FALSE"
OH et si ça peut aider, j'ai créer deux autre formulaire de " débuggage" pour voir si j'arrive à modifier une ligne déjà existante et oui j'y arrive mais je ne comprend pas pourquoi la requete update marche mais pas celle d'insertion

je met ici le code des update ( Un pour passer ma colonne active à 0 ( donc en false ) et l'autre pour la passer à 1 (true) :
if(isset($_POST['ON'])) {
$q = $bdd->prepare('UPDATE Matieres SET Active = TRUE WHERE Nom = ?');
$q->execute(array($_POST['ON']));
$feedback = "Compétence mise à jour !";
}
if(isset($_POST['OFF'])) {
$q = $bdd->prepare('UPDATE Matieres SET Active = FALSE WHERE Nom = ?');
$q->execute(array($_POST['OFF']));
$feedback = "Compétence mise à jour !";
}
Et directement sur ma bdd si je rentre cette requete d'insertion et bien ça fonctionne aussi:
INSERT INTO Matieres(Nom, Categorie, Active) VALUES('Test', 'CategorieDeTest', TRUE);
Le probleme vient bien de ma façon d'écrire la requete d'insertion sur PDO en PHP mais je ne vois pas du tout pourquoi ça fonctionne pas... Je nage et je ne trouve définitivement pas la soluce
EDIT: Je suis un gros boulet qui relie mal son code !!
Le problème vient en fait tout simplement de la fermeture de mes parenthese values qui est tout simplement
manquante ... Je me desespere parfois...
Ah et aussi, au lieu d'assigner TRUE ou FALSE à ma variable $active, il fallait que je lui assigne l'integer 1 pour TRUE ou l'integer 0 pour FALSE.
Sinon lui assigner directement TRUE ou FALSE fera que la requête SQL ajoutera toujours automatiquement TRUE à ce champs lors de l'insertion ( donc le bit 1 )
Le code fonctionnel final est donc:
if(isset($_POST['ADD'])) {
$nom = htmlspecialchars($_POST['ADD']);
$categorie = htmlspecialchars($_POST['CATEGORIE']);
$q = $bdd->prepare('INSERT INTO Matieres(Nom, Categorie, Active) VALUES(:nom, :categorie, :active)');
$q->bindParam(':nom', $nom, PDO::PARAM_STR);
$q->bindParam(':categorie', $categorie, PDO::PARAM_STR);
if($_POST['ACTIVE'] == 'Oui') {
$active = 1;
} else {
$active = 0;
}
$q->bindParam(':active', $active, PDO::PARAM_BOOL);
$q->execute();
$feedback = "Compétence ajoutée !";
}