Envoyer des donneés en BDD provenant d'un array via formulaire

Bonjour ,
je sollicite vos connaissances en programmation car je n’arrive pas à envoyer la données d’un formulaire dans une base de donnée mariadb. ( formulaire est de type post et la donnée est de type préparée je fais une requete SQL pour l’envoyer en BDD) .

le formulaire de test comporte 1 input ( batiment ).

je la reçois bien dans ma variable $_POST['batiment'] sous cette forme :

exemple pour le valeur bat27 ["batiment"]=> "bat27"

  • voici mon petit bout de code php qui ne fonctionne pas :
$query="INSERT INTO localisation (Bât) VALUES  (:bât)";
$pdostmt=$pdo->prepare($query);
$pdostmt->execute(["bât" => $_POST["batiment"]]);
  • Pour tester le fonctionnement je fais ça et ça marche bien :

$query="INSERT INTO localisation (Bât) VALUES  ('bat27')";
$pdostmt=$pdo->prepare($query);
$pdostmt->execute();

je suis preneur de suggestions et d’aide

je joint la valeur du var_dump($pdostmt)

object(PDOStatement)#2 (1) { ["queryString"]=> string(47) "INSERT INTO localisation (Bât) VALUES (:bât)" }

et var_dump($pdostmt) avant execute

array(1) { ["bât"]=> string(10) "bat27" }

merci d’avance pour vos retour

ps je suis en php 8.2.7

@bientôt

Salut,

Il ne faut jamais envoyer des données directement d’un formulaire vers la db. C’est une faille de sécurité, cela permet de faire de l’injection sql.

Expliques plutôt ton besoin réel (et pas le problème que tu rencontres avec la solution que tu as imaginé)

Merci pour ta réponse Mips,
Mon besoin est de venir écrire une table dans une base de donné. (actuellement je suis hors context Jeedom c’est à dire sur un serveur php mysql perso).
Donc pour faire ceci depuis unepage , j’ai créer un bouton ajouter un équipement, qui ouvre un formulaire, ce formulaire il y a un champ bâtiment à remplir.
Ensuite la valeur est envoyer via le php en bdd.
J’ai vu sur plusieurs sites, que pour éviter l’éjection sql il faut nomer les paramètres alors c’est ce que j’ai fait avec le :bât .

Sinon quelle serait la bonne méthode pour faire cette requête sql de façon sécurisée ?

En fait je ne comprends pas ce que tu reçois dans ton paramètre post; c’est littéralement la string que tu mets en exemple?
C’est ca qui m’a induit en erreur précédemment, en lisant rapidement j’ai cru que tu construisais ta requête sql dynamiquement avec ce que tu recevais du post.

l’ exemple est le résultat du var_dump de $_POST['batiment'] seul élément de mon formulaire .
j’ai l’impression que le : bat ne prend pas le paramètre au moment de l’exécution, mais je n’en suis pas sure car pas de message d’erreur , j’ai bien relu la doc php 8 et aussi vu qu’il n’était plus nécessaire d’utiliser binValue et qu’il fallait passer le paramètre dans la requete exécution sous forme d’array

Bonjour,

Tu n’a quand même pas mis des accents circonflexe dans les noms de colonnes et de variables! ça m’étonne que tu n’aie pas un vrai message d’erreur, le dump semble accepter ces caractères ésotériques, mais ça m’étonnerait pas que ton problème soit juste ça, commence par renommer bât => bat :slight_smile:
Tu n’a aucun message d’erreur, juste que rien n’est modifié ?

1 « J'aime »

Effectivement le problème venait bien de là :sweat_smile: Merci pifou
Pour répondre à ta question , alors ce qu’il se passait c’est que mon code php devait générer une erreur d’éxécution car mon formulaire n’apparaissait plus , quand je commentait le execute le formulaire revenait .
Par contre dans la console Firefox rien d’affiché .
Ou devrais-je trouver ce type de problème d’afficher ?

Dans firefox tu a sans doute une erreur 500… Dans ce cas le log est à chercher côté serveur dans les logs apache s’il n’y a rien d’autre.
En php tu peux aussi faire un try () catch () pour attraper l’erreur et mettre un log personnalisé dans un fichier à toi.

1 « J'aime »

Ce sujet a été automatiquement fermé après 24 heures suivant le dernier commentaire. Aucune réponse n’est permise dorénavant.