Annonce

Lorsque vous exposez un problème que vous rencontrez sur votre site, n’omettez pas de bien préciser l’adresse de la page (URL) concernée.

Ouvrez un nouveau sujet de discussion pour poser une question, n'utilisez pas une discussion déjà ouverte si votre problème est différent.
Lorsque votre sujet est résolu, indiquez-le en cliquant sur le lien "Passer le sujet en résolu".

Pour les possesseurs de sites Minecraft : Tous les ports TCP/UDP en sortie sont ouverts.
Pour en savoir plus : https://www.franceserv.fr/wiki/minecraft

#1 26/09/2020 13:40:03

philippe40
Membre
Inscription : 21/10/2012
Messages : 26

[Résolu] Requête préparées

Bonjour,

J'ai créé une requête préparée insert qui ne fonctionne pas :
   try {          
                 $connexion = new PDO('mysql:host='.$host.';dbname='.$base, $user, $pass);
                 $connexion->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
                                
                 $prepared = $connexion->prepare
                 (
                 "INSERT INTO wp3_achats (id,code_article, product_name,createdon,qt,pa,latitude,longitude,id_magasin,utilisateur )           
                    VALUES
                  (
                     :id ,
                     :codearticle ,               
                     :created ,
                     :qt  ,
                     :pa ,
                     :latitude ,
                     :longitude ,
                     :idmagasin ,
                     :utilisateur
                    )"
                 );
                       
                $prepared->bindParam(':id'         , $_GET['id']);       
            $prepared->bindParam(':codearticle', $_GET['code_article']);
                $prepared->bindParam(':created',     $_GET['createdon']);       
                $prepared->bindParam(':qt',          $_GET['qt']);       
                $prepared->bindParam(':pa',          $_GET['pa']);       
                $prepared->bindParam(':latitude',    $_GET['latitude']);       
                $prepared->bindParam(':longitude',   $_GET['longitude']);
                $prepared->bindParam(':idmagasin',   $_GET['id_magasin']);
                $prepared->bindParam(':utilisateur', $_GET['utilisateur']);                      
                                       
                $prepared->execute();
                                                                              
         }
               
  catch(PDOException $x) { die("Secured"); }

        $prepared   = null;
        $connection = null;

Malgré tous mes essais, elle ne fonctionne pas.

J'ai une requête équivalente en injection directe qui fonctionne 

   try {          
                 $dbh = new PDO('mysql:host='.$host.';dbname='.$base, $user, $pass);
                                 
                 $sql = "INSERT INTO wp3_achats (id,code_article,createdon,qt,pa,latitude,longitude,id_magasin,utilisateur)
                         VALUES
                         (
                         '$_POST[id]'           ,
                         '$_POST[code_article]' ,                       
                         '$_POST[createdon]'    ,
                             '$_POST[qt]'           ,
                         '$_POST[pa]'           ,
                         '$_POST[latitude]'     ,
                         '$_POST[longitude]'    ,                        
                         '$_POST[id_magasin]'   ,
                         '$_POST[utilisateur]'   
                         )";
                        
                   if ($dbh->query($sql) === TRUE) {  echo "New record created successfully";}
                  
                   else
                  {
                      echo "Error: " . $sql . "<br>" . $dbh->error;                                       
                  }                
                }
            catch (PDOException $error) {die("Erreur de connexion : " . $error->getMessage() );}           

            $dbh->close();

Pouvez-vous m'aider ?

Cordialement
Philippe

Hors ligne

#2 26/09/2020 14:43:21

elodie
Responsable/CEO FranceServ Hébergement
Lieu : Jura
Inscription : 02/04/2010
Messages : 7 700
Site Web

Re : [Résolu] Requête préparées

Bonjour,

Dans la première requête, vous avez 9 éléments préparés alors que vous avez 10 propriétés, il vous manque "product_name" qui n'est pas préparé ni associé (bindé).

Dans le catch de l'erreur, au lieu d'afficher le mot "Secured", vous pouvez afficher le message d'erreur comme dans votre requête non préparée. Vous auriez eu un message d'erreur vous indiquant une incohérence entre le nombre de propriétés et les valeurs préparées :

catch(Exception $x)
    {
    die("Erreur MySQL n° ".$x->getCode()." : ".$x->getMessage());
    }

P8OdseCN.gifVous avez une question ?

Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, utilisez alors dans ce cas le formulaire de contact ou alors le téléphone.

Hors ligne

#3 26/09/2020 16:06:14

philippe40
Membre
Inscription : 21/10/2012
Messages : 26

Re : [Résolu] Requête préparées

Encore une fois merci.
Je ne voyais pas ce détail et je tournais en rond.
J'avais aussi utilisé $_GET au lieu de $_POST
Cordialement

Hors ligne

#4 26/09/2020 17:16:17

elodie
Responsable/CEO FranceServ Hébergement
Lieu : Jura
Inscription : 02/04/2010
Messages : 7 700
Site Web

Re : [Résolu] Requête préparées

Je vous en prie, passez un bon samedi soir.

philippe40 a écrit :

Encore une fois merci.
Je ne voyais pas ce détail et je tournais en rond.
J'avais aussi utilisé $_GET au lieu de $_POSTt


P8OdseCN.gifVous avez une question ?

Posez-la de préférence sur le forum et si ça demande un contact plus instantané, n'hésitez pas à vous rendre sur le t'chat IRC. Si votre question est personnelle, utilisez alors dans ce cas le formulaire de contact ou alors le téléphone.

Hors ligne

Pied de page des forums

[ Générées en 0.059 secondes, 9 requêtes exécutées - Utilisation de la mémoire : 1.45 Mio (pic d'utilisation : 1.55 Mio) ]