Rien n'est ajouté à la base de donnée
Résolu
leadgn
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
-
Hugo69009 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Hugo69009 Messages postés 13 Date d'inscription Statut Membre Dernière intervention -
Bonjour,
Je suis en train de créer un plugin wordpress, afin d'ajouter automatiquement un scooter à la base de donnée.
Pour se faire, j'utilise PhpMyAdmin, PHP.
J'ai donc créé un dossier "gallerie" dans mon dossier wp-content/plugins, dans lequel est répertorié le fichier gallerie.php.
gallerie.php est un formulaire :
Comme vous pouvez le voir, mon fichier appel cible.php, qui est programmé pour rentrer les données du formulaire dans la base de donnée. Ce fichier est placé dans le dossier /wp-admin
Voici son contenu :
Le souci est que lorsque je rentre mes données dans le formulaire et que je valide, rien n'est ajouté à la base de données.
Sur mon navigateur est affiché une page blanche, dont l'URL est http://localhost/wordpress/wp-admin/cible.php
et aucune erreur n'est affichée.
Cela fait 2 heures que j'essaie de trouver une solution, sans aucun résultat.
Merci d'avance de votre aide.
Je suis en train de créer un plugin wordpress, afin d'ajouter automatiquement un scooter à la base de donnée.
Pour se faire, j'utilise PhpMyAdmin, PHP.
J'ai donc créé un dossier "gallerie" dans mon dossier wp-content/plugins, dans lequel est répertorié le fichier gallerie.php.
gallerie.php est un formulaire :
<?php try { $bdd = new PDO('mysql:host=localhost;dbname=scooter', 'root', ''); } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } #Création du formulaire ?> <form method="post" action="/wordpress/wp-admin/cible.php"> <p> Marque : <input type="text" name="marque" /> Modele : <input type="text" name="modele" /> Option : <textarea name="option" rows="8" cols="45"></textarea> Garantie : <input type="text" name="garantie" /> Prix : <input type="text" name="prix" /> <input type="submit" value="Valider" /> </p> </form> ?>
Comme vous pouvez le voir, mon fichier appel cible.php, qui est programmé pour rentrer les données du formulaire dans la base de donnée. Ce fichier est placé dans le dossier /wp-admin
Voici son contenu :
<?php ini_set('display_errors', true); error_reporting(E_ALL); $marque = $_POST['marque']; $modele = $_POST['modele']; $option = $_POST['option']; $garantie = $_POST['garantie']; $prix = $_POST['prix']; $utilisateur='root'; $mdp=''; try { // Connexion à la base de donnée scooter $bdd = new PDO("mysql:host=localhost; dbname=scooter", $utilisateur, $mdp); // Requête SQL } catch (Exception $e) { die('Erreur : ' . $e->getMessage()); } $req = "INSERT INTO 'vehiculesneufs' ('marque', 'modele', 'options', 'garantie', 'prix') VALUES (:marque, :modele, :option, :garantie, :prix)"; $base = $bdd->prepare($req); $base->bindValue(':marque', $marque, PDO::PARAM_STR); $base->bindValue(':modele', $modele, PDO::PARAM_STR); $base->bindValue(':option', $option, PDO::PARAM_STR); $base->bindValue(':garantie', $garantie, PDO::PARAM_STR); $base->bindValue(':prix', $prix, PDO::PARAM_INT); $base->execute(); $base->closeCursor(); ?>
Le souci est que lorsque je rentre mes données dans le formulaire et que je valide, rien n'est ajouté à la base de données.
Sur mon navigateur est affiché une page blanche, dont l'URL est http://localhost/wordpress/wp-admin/cible.php
et aucune erreur n'est affichée.
Cela fait 2 heures que j'essaie de trouver une solution, sans aucun résultat.
Merci d'avance de votre aide.
A voir également:
- Rien n'est ajouté à la base de donnée
- Base de registre - Guide
- La zone de données passée à un appel système est insuffisante - Windows 11
- Exemple base de données access à télécharger gratuit ✓ - Forum Logiciels
- Formules mathématiques de base - Télécharger - Études & Formations
- Nouveau tag ajouté - Forum Téléphones & tablettes Android
13 réponses
Bonjour
Tu as mis $marque à la place de $prix. Ça ne doit pas convenir comme PARAM_INT. Je ne sais pas si ça suffit à expliquer ton problème.
$base->bindValue(':prix', $marque, PDO::PARAM_INT);
Tu as mis $marque à la place de $prix. Ça ne doit pas convenir comme PARAM_INT. Je ne sais pas si ça suffit à expliquer ton problème.
leadgn
Messages postés
13
Date d'inscription
Statut
Membre
Dernière intervention
Merci de m'avoir fait remarqué cette erreur de ma part. Mais ça n'a pas résolu mon problème ...
Pour voir s'il y a une autre erreur, laisse tous tes appels à PDO à l'intérieur de 'try'.
Ajoute aussi un echo 'coucou'; juste avant ou après ton $base->execute(); pour être sûr que cette partie du code est bien exécutée.
Ajoute aussi un echo 'coucou'; juste avant ou après ton $base->execute(); pour être sûr que cette partie du code est bien exécutée.
Oui ..
try { // Connexion à la base de donnée scooter $bdd = new PDO("mysql:host=localhost; dbname=scooter", $utilisateur, $mdp); $req = "INSERT INTO 'vehiculesneufs' ('marque', 'modele', 'options', 'garantie', 'prix') VALUES (:marque, :modele, :option, :garantie, :prix)"; $base = $bdd->prepare($req); $base->bindValue(':marque', $marque, PDO::PARAM_STR); $base->bindValue(':modele', $modele, PDO::PARAM_STR); $base->bindValue(':option', $option, PDO::PARAM_STR); $base->bindValue(':garantie', $garantie, PDO::PARAM_STR); $base->bindValue(':prix', $prix, PDO::PARAM_INT); $base->execute(); echo 'coucou'; $base->closeCursor(); }
J'ai lancé le fichier cible.php directement dans mon navigateur, http://localhost/wordpress/wp-admin/cible.php
et me voilà des erreurs !
Je pense qu'aucune erreur ne s'affichait auparavant, étant donné que gallerie.php est juste. Je vais maintenant essayer de résoudre ces erreurs.
(!) Notice Undefined index: marque
(!) Notice Undefined index: modele
etc. pour les 3 variables suivantes.
et me voilà des erreurs !
Je pense qu'aucune erreur ne s'affichait auparavant, étant donné que gallerie.php est juste. Je vais maintenant essayer de résoudre ces erreurs.
(!) Notice Undefined index: marque
(!) Notice Undefined index: modele
etc. pour les 3 variables suivantes.
Vous n’avez pas trouvé la réponse que vous recherchez ?
Posez votre question
Si tu lances directement ta page cible.php, le formulaire n'est pas rempli, et il est donc parfaitement normal que les indices 'marque' et 'modele' ne soient pas définis. Il n'y a rien à corriger, au contraire ça prouve que ton formulaire est bien pris en compte.
Comme la requête semble bien s'exécuter, et qu'il n'y a aucun message d'erreur, je te propose à titre d'essai de provoquer une erreur pour voir qu'elle est bien détectée. Par exemple en mettant en commentaire le 'bind' d'une de tes variables.
S'il n'y a pas d'erreur, c'est que les erreurs ne sont pas détectées pour une raison qu'il faudra déterminer.
S'il y en a une, comme il n'y avait pas de message d'erreur jusqu'ici, c'est que la donnée est bien insérée, mais qu'il y a quelque chose qui ne va pas dans ta manière de vérifier si l'insertion a eu lieu.
Comme la requête semble bien s'exécuter, et qu'il n'y a aucun message d'erreur, je te propose à titre d'essai de provoquer une erreur pour voir qu'elle est bien détectée. Par exemple en mettant en commentaire le 'bind' d'une de tes variables.
S'il n'y a pas d'erreur, c'est que les erreurs ne sont pas détectées pour une raison qu'il faudra déterminer.
S'il y en a une, comme il n'y avait pas de message d'erreur jusqu'ici, c'est que la donnée est bien insérée, mais qu'il y a quelque chose qui ne va pas dans ta manière de vérifier si l'insertion a eu lieu.
Donc les erreurs sont bien détectées quand il y en a.
Donc il n'y a pas d'erreur. (Enfin, il n'y en aura plus quand tu auras retirée la mise en commentaire)
Donc l'insertion a bien lieu.
Alors les données ne sont peut-être pas celles que tu crois, ou tu ne les vérifie pas au bon endroit.
On va commencer par vérifier les données avec un echo $marque,' ',$modele; pour être sûr qu'il y a bien des données.
Ensuite, tu diras comment tu fais pour vérifier que les données ne sont pas insérées. Es-tu sûr de regarder dans la bonne base, la bonne table ? La table est-elle complètement vide, ou y a-t-il déjà des données dedans ?
Donc il n'y a pas d'erreur. (Enfin, il n'y en aura plus quand tu auras retirée la mise en commentaire)
Donc l'insertion a bien lieu.
Alors les données ne sont peut-être pas celles que tu crois, ou tu ne les vérifie pas au bon endroit.
On va commencer par vérifier les données avec un echo $marque,' ',$modele; pour être sûr qu'il y a bien des données.
Ensuite, tu diras comment tu fais pour vérifier que les données ne sont pas insérées. Es-tu sûr de regarder dans la bonne base, la bonne table ? La table est-elle complètement vide, ou y a-t-il déjà des données dedans ?
Lorsque je fais un echo $marque; la marque est bien affiché.
Pour vérifier mes données, je vais sur http://localhost/phpmyadmin/
Je vais dans ma BDD 'scooter', puis sur la table 'vehiculesneufs'.
La table contient déjà un tuple, que j'avais rentré directement sur phpmyadmin et pas par le formulaire.
Pour vérifier mes données, je vais sur http://localhost/phpmyadmin/
Je vais dans ma BDD 'scooter', puis sur la table 'vehiculesneufs'.
La table contient déjà un tuple, que j'avais rentré directement sur phpmyadmin et pas par le formulaire.
Pas possible.
Peux-tu ajouter dans ton script une requête SELECT pour afficher le contenu de ta table ? Juste pour voir si tu affiches le tuple que tu vois avec PHPmyadmin, ou ceux que tu aurais dû insérer ?
Peux-tu ajouter dans ton script une requête SELECT pour afficher le contenu de ta table ? Juste pour voir si tu affiches le tuple que tu vois avec PHPmyadmin, ou ceux que tu aurais dû insérer ?
Le champ cylindree n'est pas rempli. Ne serait-il pas défini en non null et sans valeur par défaut ? Essaye de lui donner une valeur dans ton INSERT (même fixe, juste pour voir)
Si jamais c'est ça, restera à comprendre pourquoi ça ne provoquait pas d'erreur.
Si jamais c'est ça, restera à comprendre pourquoi ça ne provoquait pas d'erreur.
Bon, j'ai résolu une partie du soucis.
Le soucis vient de la requête.
Lorsque je remplace les :marque, :modele etc.. par de vraies valeur, le tuple s'ajoute à la table.
Actuellement, rien ne s'ajoute à la base de données étant donné que PHPmyadmin attend des '' autour des valeur à ajouter.
Il faut donc que je trouve une solution pour permettre à PHPMyAdmin de lire mes variables !
Le soucis vient de la requête.
Lorsque je remplace les :marque, :modele etc.. par de vraies valeur, le tuple s'ajoute à la table.
Actuellement, rien ne s'ajoute à la base de données étant donné que PHPmyadmin attend des '' autour des valeur à ajouter.
Il faut donc que je trouve une solution pour permettre à PHPMyAdmin de lire mes variables !
C'est bon, problème résolu !
J'ai revu mon code, j'ai enlevé tous les bindValue, et suis revenue vers un code beaucoup plus soft !
C'était majoritairement des problèmes de guillemets qui ne permettait pas à phpmyadmin de lire ma requête !
Merci à vous de m'avoir aidé, d'avoir pris de votre temps pour résoudre mon gros soucis, qui était en faite minuscule !
Encore merci !
J'ai revu mon code, j'ai enlevé tous les bindValue, et suis revenue vers un code beaucoup plus soft !
$req = "INSERT INTO 'vehiculesneufs' ('marque', 'modele', 'cylindree', 'options', 'garantie', 'prix') VALUES ('$marque', '$modele', '$cylindree', '$option', '$garantie', '$prix')"; $bdd->exec($req);
C'était majoritairement des problèmes de guillemets qui ne permettait pas à phpmyadmin de lire ma requête !
Merci à vous de m'avoir aidé, d'avoir pris de votre temps pour résoudre mon gros soucis, qui était en faite minuscule !
Encore merci !
Attention aux injections sql.
Si tu construits toi même ta requête, utilise la méthode quote de pdo pour ajouter les guillemets et protéger ta requête contre les injections sql :
Les requêtes préparées fonctionnent de la même façon : la méthode bindValue ajoute des guillemets autour de la valeur et protège la donnée contre les injections sql. Ton code avec la requête préparée était donc correct et aurait du donner le même résultat...
Si tu construits toi même ta requête, utilise la méthode quote de pdo pour ajouter les guillemets et protéger ta requête contre les injections sql :
$req = "INSERT INTO 'vehiculesneufs' ('marque', 'modele', 'cylindree', 'options', 'garantie', 'prix') VALUES (" . $bdd->quote($marque) . ", " . $bdd->quote($modele) . ", " . $bdd->quote($cylindree) . ", " . $bdd->quote($option) . ", " . $bdd->quote($garantie) . ", " . $bdd->quote($prix) . ")";
Les requêtes préparées fonctionnent de la même façon : la méthode bindValue ajoute des guillemets autour de la valeur et protège la donnée contre les injections sql. Ton code avec la requête préparée était donc correct et aurait du donner le même résultat...
Pas d'accord du tout.
Nous n'avons pas trouvé pourquoi ça ne marchait pas tel que tu le faisais avant. Normalement, ça aurait dû être bon.
Avec ton nouveau code 'qui marche', ça va planter dès que tu mettras des apostrophes dans tes marques, modèles, option...
Il n'y avait aucun problème de guillemets, en tous cas je ne vois pas où et phpmyadmin n'a rien à voir là dedans, je suppose que tu le confonds avec mysql.
Nous n'avons pas trouvé pourquoi ça ne marchait pas tel que tu le faisais avant. Normalement, ça aurait dû être bon.
Avec ton nouveau code 'qui marche', ça va planter dès que tu mettras des apostrophes dans tes marques, modèles, option...
Il n'y avait aucun problème de guillemets, en tous cas je ne vois pas où et phpmyadmin n'a rien à voir là dedans, je suppose que tu le confonds avec mysql.
Je sais c'est tout bête tu utilise PDO pour te connecter à ta bdd donc au lieu de mettre :
VALUES (:marque, :modele, :option, :garantie, :prix)";
il faut mettre VALUES (?, ?, ?, ?, ?);
^^
VALUES (:marque, :modele, :option, :garantie, :prix)";
il faut mettre VALUES (?, ?, ?, ?, ?);
^^