6 réponses
jiantox
- Messages postés
- 1081
- Date d'inscription
- mardi 30 septembre 2008
- Statut
- Membre
- Dernière intervention
- 26 janvier 2019
salut,
je passe au hasard ici et :
('.$anais'.'$civil'. <- y'a pas un blem dans les points ?
je passe au hasard ici et :
('.$anais'.'$civil'. <- y'a pas un blem dans les points ?
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
Bonsoir jiantox,
Merci de ta réponse rapide... même si elle est due au hasard ...!
Problème de points, ici, je ne pense pas... encore que mais ça va permettre à un autre internaute de confirmer ou non : j'ai revu le tuto sur lequel j'ai travaillé et ça me paraissait conforme !
Malgré tout, tu as sans doute raison car il y a aussi des virgules...
Je réétudies et refais un essai !
En tout cas, merci de ce tuyau car, entre les zones numériques, celles que je traite ou non en $pdo->quote je m'y perd si je n'ai pas une concentration maximum.
Bonne fin de soirée RJL1717
Merci de ta réponse rapide... même si elle est due au hasard ...!
Problème de points, ici, je ne pense pas... encore que mais ça va permettre à un autre internaute de confirmer ou non : j'ai revu le tuto sur lequel j'ai travaillé et ça me paraissait conforme !
Malgré tout, tu as sans doute raison car il y a aussi des virgules...
Je réétudies et refais un essai !
En tout cas, merci de ce tuyau car, entre les zones numériques, celles que je traite ou non en $pdo->quote je m'y perd si je n'ai pas une concentration maximum.
Bonne fin de soirée RJL1717
jiantox
- Messages postés
- 1081
- Date d'inscription
- mardi 30 septembre 2008
- Statut
- Membre
- Dernière intervention
- 26 janvier 2019
pas de quoi, au passage ta PDO est bisard
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=tonsql;dbname=tabase', 'ton id', 'ton mdp', $pdo_options);
ensuite pour les requetes je fais comme suit :
$machin = 'ce que tu veux chercher par exemple';
$requette = $bdd->prepare("SELECT * FROM base WHERE machin = ? ......... ");
$requette->execute(array($machin));
$result = $requette->fetch();
du coup $result ressort ce que je veut ( idem pour les update,insert,delete ... ) =)
EDIT : plus d'infos: https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914508-ecrivez-des-donnees
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
$bdd = new PDO('mysql:host=tonsql;dbname=tabase', 'ton id', 'ton mdp', $pdo_options);
ensuite pour les requetes je fais comme suit :
$machin = 'ce que tu veux chercher par exemple';
$requette = $bdd->prepare("SELECT * FROM base WHERE machin = ? ......... ");
$requette->execute(array($machin));
$result = $requette->fetch();
du coup $result ressort ce que je veut ( idem pour les update,insert,delete ... ) =)
EDIT : plus d'infos: https://openclassrooms.com/fr/courses/918836-concevez-votre-site-web-avec-php-et-mysql/914508-ecrivez-des-donnees
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
Bonsoir à tous,
Avec l'appui de jiantox, que je remercie au passage pour ses dernières informations, j'ai progressé et bute maintenant sur le coeur du problème PDO :
Fatal error: Call to a member function exec() on a non-object in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 97
laquelle contient :
$pdo->exec('INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ)
VALUES ('.$anais.','.$civil.','.$pdo->quote($nomadh).','.$pdo->quote($prenom).','.$pdo->quote($ad1).','.$pdo->quote($ad2).','.$cpost.','.$pdo->quote($ville).','.$pdo->quote($tfixe).','.$pdo->quote($tmob).','.$pdo->quote($admail).','.CURDATE().')');
Pour moi, je crois être conforme au tuto de Guillaume "pdo-comprendre-et-corriger-les-erreurs-les-plus-frequentes" où je trouve :
$pdo->exec('INSERT INTO livre_or(pseudo, message, date_post) VALUES('. $pdo->quote($_POST['pseudo']) .', '. $pdo->quote($_POST['message']) .', NOW())');
Dans l'immédiat, il ne s'agit que d'une requête de création à partir d'éléments venant d'un formilaire.
Merci de vos indications pour corriger cette instruction
@bientôt RJL2717
Avec l'appui de jiantox, que je remercie au passage pour ses dernières informations, j'ai progressé et bute maintenant sur le coeur du problème PDO :
Fatal error: Call to a member function exec() on a non-object in /web/utlsudgoelo/www/pgUTL/traitformul.php on line 97
laquelle contient :
$pdo->exec('INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ)
VALUES ('.$anais.','.$civil.','.$pdo->quote($nomadh).','.$pdo->quote($prenom).','.$pdo->quote($ad1).','.$pdo->quote($ad2).','.$cpost.','.$pdo->quote($ville).','.$pdo->quote($tfixe).','.$pdo->quote($tmob).','.$pdo->quote($admail).','.CURDATE().')');
Pour moi, je crois être conforme au tuto de Guillaume "pdo-comprendre-et-corriger-les-erreurs-les-plus-frequentes" où je trouve :
$pdo->exec('INSERT INTO livre_or(pseudo, message, date_post) VALUES('. $pdo->quote($_POST['pseudo']) .', '. $pdo->quote($_POST['message']) .', NOW())');
Dans l'immédiat, il ne s'agit que d'une requête de création à partir d'éléments venant d'un formilaire.
Merci de vos indications pour corriger cette instruction
@bientôt RJL2717
Utilisateur anonyme
Bonjour
Si tu as l'erreur Call to a member function exec() on a non-object sur l'instruction $pdo->exec('INSERT INTO... cela signifie que $pdo n'est pas un objet.
Si j'en crois ton premier script, ton instance PDO ne s'appelle pas $pdo, mais $connexion.Si tu as suivi l'exemple de jiantox, elle s'appelle $bdd.
Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo, alors c'est que la connexion a échoué.
D'autre part, si un tuto t'a conseillé d'utiliser $pdo->quote, efface vite le lien et oublie-le. Le manuel de référence PHP déconseille très fortement l'utilisation de $pdo->quote, qui fait perdre tout l'intérêt du PDO. Il FAUT utiliser des requêtes préparées , avec des ? ou des paramètres nommés dans la requête, et passer un array pour l'exécution comme dans l'exemple de jianto. Pour reprendre ton exemple ci-dessus :
Enfin, tous tes mysql_real_escape_string n'ont RIEN DU TOUT à faire dans un script où tu utilises PDO. C'est même étrange que ça ne te provoque pas d'erreur.
Si tu as l'erreur Call to a member function exec() on a non-object sur l'instruction $pdo->exec('INSERT INTO... cela signifie que $pdo n'est pas un objet.
Si j'en crois ton premier script, ton instance PDO ne s'appelle pas $pdo, mais $connexion.Si tu as suivi l'exemple de jiantox, elle s'appelle $bdd.
Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo, alors c'est que la connexion a échoué.
D'autre part, si un tuto t'a conseillé d'utiliser $pdo->quote, efface vite le lien et oublie-le. Le manuel de référence PHP déconseille très fortement l'utilisation de $pdo->quote, qui fait perdre tout l'intérêt du PDO. Il FAUT utiliser des requêtes préparées , avec des ? ou des paramètres nommés dans la requête, et passer un array pour l'exécution comme dans l'exemple de jianto. Pour reprendre ton exemple ci-dessus :
$stmt = $pdo->prepare('INSERT INTO adh (anais, civil, nomadh, prenom, ad1, ad2, cpost, ville, tfixe, tmob, admail, MaJ) VALUES (?,?,?,?,?,?,?,?,?,?,?,CURDATE()); $stmt->execute(array($anais, $civil, $nomadh, $prenom, $ad1, $ad2, $cpost, $ville, $tfixe, $tmob, $admail));
Enfin, tous tes mysql_real_escape_string n'ont RIEN DU TOUT à faire dans un script où tu utilises PDO. C'est même étrange que ça ne te provoque pas d'erreur.
Autumn`Tears
- Messages postés
- 1054
- Date d'inscription
- samedi 14 mars 2009
- Statut
- Membre
- Dernière intervention
- 23 octobre 2013
Je ne vois pas pourquoi ça provoquerait une erreur, mais les fonctions mysql étant dépréciées...
De plus, il serait mieux d'éviter les "?" à la mode mysqli et donner des noms plus explicites aux données afin de garder une certaine lisibilité du code
De plus, il serait mieux d'éviter les "?" à la mode mysqli et donner des noms plus explicites aux données afin de garder une certaine lisibilité du code
Utilisateur anonyme
Ça ne devrait pas marcher car mysql_real_escape_string est lié à une connexion par les fonctions de la famille mysql_. Je viens de refaire l'essai à l'instant pour m'en assurer, bien que cela semble logique : malgré une connexion PDO qui fonctionne très bien, l'appel à mysql_real_escape_string provoque une erreur :
mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in ....php on line 345
Et indépendamment de cette erreur à l'appel, cela dénaturerait les informations enregistrées car les caractères spéciaux seraient échappés deux fois.
Par contre, tout à fait d'accord pour l'utilisation de noms plus explicites au données, j'en parlais dans ma réponse, mais j'ai mis des ? par pure fainéantise :o
mysql_real_escape_string() [function.mysql-real-escape-string]: Access denied for user 'ODBC'@'localhost' (using password: NO) in ....php on line 345
Et indépendamment de cette erreur à l'appel, cela dénaturerait les informations enregistrées car les caractères spéciaux seraient échappés deux fois.
Par contre, tout à fait d'accord pour l'utilisation de noms plus explicites au données, j'en parlais dans ma réponse, mais j'ai mis des ? par pure fainéantise :o
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
J'ai pensé que les ? participaient à une meilleure sécurité que le nom des variables car, sinon, je suis moi-même plus favorable à nommer les zones !
Dans l'immédiat, j'essaie de transformer les enseignements que j'ai reçu pour une nouvelle requête préparée, cette fois en sélection.
@+ RJL2719
Dans l'immédiat, j'essaie de transformer les enseignements que j'ai reçu pour une nouvelle requête préparée, cette fois en sélection.
@+ RJL2719
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
Bonsoir à tous les 3 (Autumn'Tears, jiantox et bien sûr le père) qui avez participé à ces échanges.
Un grand coup de chapeau pour les conseils et propositions que vous m'avez prodigués car, malgré des erreurs multiples, les enregistrements sont contrôlés et s'enregistrent correctement, sachant qu'à chaque stade, j'essaie d'améliorer en respectant les conseils communiqués. A propos des remarque j'ai bien aimé celle ci : "Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo" et, c'est vrai, je faisais mal le lien d'autant que PDO est souvent employé en préfixe de divers termes (mea culpa... comme d'habitude !).
Un détail toutefois, dans cette même page, les messages sortent parfois en illisible (pb d'encodage) et, à mes yeux se rétablissent seuls !!
Ainsi j'obtiens "Enregistrement réussi" ou des caractères non udf8
Donc, un vrai merci ... et sans doute @ bientôt pour d'autres pages que peu à peu (très très doucement) je trouve moins angoissantes à aborder !
RJL1718
Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo,
Un grand coup de chapeau pour les conseils et propositions que vous m'avez prodigués car, malgré des erreurs multiples, les enregistrements sont contrôlés et s'enregistrent correctement, sachant qu'à chaque stade, j'essaie d'améliorer en respectant les conseils communiqués. A propos des remarque j'ai bien aimé celle ci : "Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo" et, c'est vrai, je faisais mal le lien d'autant que PDO est souvent employé en préfixe de divers termes (mea culpa... comme d'habitude !).
Un détail toutefois, dans cette même page, les messages sortent parfois en illisible (pb d'encodage) et, à mes yeux se rétablissent seuls !!
Ainsi j'obtiens "Enregistrement réussi" ou des caractères non udf8
Donc, un vrai merci ... et sans doute @ bientôt pour d'autres pages que peu à peu (très très doucement) je trouve moins angoissantes à aborder !
RJL1718
Si tu es sûr (mais es-tu sûr ?) que tu l'as appelé $pdo,
Autumn`Tears
- Messages postés
- 1054
- Date d'inscription
- samedi 14 mars 2009
- Statut
- Membre
- Dernière intervention
- 23 octobre 2013
En parlant d'encodage, tes champs en base de données devraient être en utf8_unicode_bin.
Et lorsque tu instancies PDO :
$pdo = new PDO($connection, $user, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
Avec ça, tu te connectes à la base en UTF-8.
Et pour l'affichage sur tes pages :
en HTML : <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
en PHP : header('Content-type: text/html; charset=UTF-8');
Ça devrait résoudre tes problèmes.
Et lorsque tu instancies PDO :
$pdo = new PDO($connection, $user, $pwd, array(PDO::MYSQL_ATTR_INIT_COMMAND => "SET NAMES utf8"));
Avec ça, tu te connectes à la base en UTF-8.
Et pour l'affichage sur tes pages :
en HTML : <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
en PHP : header('Content-type: text/html; charset=UTF-8');
Ça devrait résoudre tes problèmes.
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
Merci des détails,
J'avais des interrogations car j'avais lu (peut-être mal) que utf8 était sur 3 octets et UTF-8 sur 4 mais en tout cas une différence entre utf8 et UTF-8 !
En HTML, j'ai systématiquement <meta charset="utf8">
Je me suis rendu compte que pour les modules strictement en PHP, je n'avais pas nécessairement d'include de HTML et de ce fait traitait mal le problème ; ceci n'expliquait pas que ces derniers soirs, j'ai parfois eu debonnes éditions puis à un autre moment le même problème et message (à mes yeux) avec des caractères en encodage incorrect !
Je vais reprendre le problème posément demain à travers les différents modules d'autant qu'il faut que je creuse "header('Content-type: text/html; charset=UTF-8'); " instruction que je ne connaissait pas.
@demain RJL2720
J'avais des interrogations car j'avais lu (peut-être mal) que utf8 était sur 3 octets et UTF-8 sur 4 mais en tout cas une différence entre utf8 et UTF-8 !
En HTML, j'ai systématiquement <meta charset="utf8">
Je me suis rendu compte que pour les modules strictement en PHP, je n'avais pas nécessairement d'include de HTML et de ce fait traitait mal le problème ; ceci n'expliquait pas que ces derniers soirs, j'ai parfois eu debonnes éditions puis à un autre moment le même problème et message (à mes yeux) avec des caractères en encodage incorrect !
Je vais reprendre le problème posément demain à travers les différents modules d'autant qu'il faut que je creuse "header('Content-type: text/html; charset=UTF-8'); " instruction que je ne connaissait pas.
@demain RJL2720
rjl
- Messages postés
- 543
- Date d'inscription
- mardi 16 mars 2004
- Statut
- Membre
- Dernière intervention
- 25 mai 2019
Merci de cette indication ce n'aurait été qu'une histoire de majuscule ou minuscule, j'y aurai attaché moins d'importance mais le tiret me gênait plus car je trouvais utf8 ou UTF-8 !
Merci de l'indication. RJL2720
Merci de l'indication. RJL2720