Point 1

Envoyé par
K.reen
J'ai bien fait un copier/coller pour m'assurer qu'il ne s'agit pas d'un problème de syntaxe. C'est seulement à la 2ème tentative que j'ai enlevé les guillemets au nom de la table pour voir si c'était le problème.
DOnc cette requête
$requete = $wpdb->prepare("INSERT INTO `constitution` (`IDClient`,`DateTest`) values ($IDClient, $today)" );
ne fonctionne pas plus.
J'ai bien dit valeur, celle que tu vas insérer dans la base.
INSERT INTO `constitution` (`IDClient`,`DateTest`) values (12, '2018-10-19 00:00:00')
Point 2

Envoyé par
K.reen
Il ne me semble pas avoir fermé les guillemets de la requête
Pour avoir la requête SQL que j'ai donnée, tu auras la tentation d'écrire
$requete = $wpdb->prepare("INSERT INTO `constitution` (`IDClient`,`DateTest`) values ('$IDClient', '$today')" );
Ça fonctionne pour un type date, sauf que si la colonne n'est pas une date mais un varchar, et que la valeur contient un guillemet simple (exemple "L'élève" ), tu auras une requête générée:
INSERT INTO `constitution` (`IDClient`,`DateTest`) values (12, 'L'élève')
tu vois bien que la chaîne est tronqué.
Point 3

Envoyé par
K.reen
C'est pas ce qu'est censée éviter le $wpdb->prepare() ?
Si tu l'utilises bien. Imagine si pour la vérification d'un utilisateur et mot de passe avec ta façon de faire:
$requete = $wpdb->prepare("select * from utilisateur where pseudo='$pseudo' and passwd='$passwd'");
L'utilisateur entre comme pseudo = ps' or 1=1 limit 1 /* et passwd = */--, tu auras une requête générée
select * from utilisateur where pseudo='ps' or 1=1 limit 1/*' and passwd='*/-- '
Ça va retourner un utilisateur trouvé dans la base sans qu'il connaisse un pseudo et mot de passe, l'utilisateur peut se loguer sur ton appli. C'est pour éviter ce genre de chose qu'il ne faut pas concaténer les valeurs dans une requête. Pire si l'utilisateur tente de supprimer une table (pseudo = ps' or 1=1 limit 1; drop table utilisateur; /*). Ça va faire mal 
La bonne façon d'utiliser une requête préparée c'est de ne pas concaténer des variables directement dans la requête:
1 2
| $requete = $wpdb->prepare("INSERT INTO `constitution` (`IDClient`,`DateTest`) values (?, ?)" );
$wpdb->execute(array($IDClient,$today)); |
Ça devrait résoudre ton problème.
Pour l'erreur WP, vérifie ce qui se trouve dans wp-content/debug.log, ou affiche sur la page les erreurs define( 'WP_DEBUG_DISPLAY', true);A+.
Partager