Optimisation

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Optimisation

Re: Optimisation

par liens_geeks » 16 déc. 2011, 18:49

Dans la logique de ton script, c'est ta requête SQL qui va t'indiquer la validité des valeurs saisies par l'utilisateur, en fonction de son plantage ou non.
Logiquement, tu exécutes ta requête uniquement si un minimum de tests sons OK. Le minimum syndical serait au moins de contrôler les colonnes à updater : si je modifie dans firebug le nom d'un champ, il va essayer d'updater dans la colonne correspondante (je transforme le name="nom" en name="toto" et donc il va essayer d'updater dans la colonne toto)

Si aimes automatiser, une méthode rapide :
- Mettre le nom de tes champs de formulaire dans un array => $sMesChamps = ('nom', 'prenom','age');
- Si formulaire posté, tu parcours ton array et pour chaque entrée, tu récupères la valeur du $_POST correspondant, que tu mets dans une variable.
- Ta requête est donc écrite en 'dur' => $stmt = SPDO::getInstance()->prepare('UPDATE matable ( nom, prenom, age ) VALUES ($sNom, $sPrenom, $sAge) ;

Tu vois?

PS : j'ai pris nom, prenom et age pour illustrer

Re: Optimisation

par labyelo » 16 déc. 2011, 18:13

Comme tu dis, ce n'est vraiment pas sécurisé comme manière de faire...
Et dans un cas pareil comment ferais-tu ?

Re: Optimisation

par liens_geeks » 16 déc. 2011, 17:38

Comme tu dis, ce n'est vraiment pas sécurisé comme manière de faire...

Re: Optimisation

par xTG » 15 déc. 2011, 20:37

Il faut faire un cas spécial, une clé avec un marqueur qui te permettra de savoir que c'est à mettre dans la clause WHERE.
Du genre si tu nommes un champ hidden "where_id" en cherchant where_ dans chaque clé de ton tableau $_POST tu pourras filtrer et opérer les changements adéquats.

Optimisation

par labyelo » 15 déc. 2011, 19:46

Bonsoir,

J'ai une table avec -/+ 15 champs et j'ai plusieurs formulaires sur mon application qui alimente, mette à jour, etc...
Alors comme je suis fainéant :) j'ai coder ceci.
foreach($_POST AS $key => $val)
   {
     /*
     Recup le nom des champs.
     */
     $champ  .= $key;
     $champ  .= ",";

     /*
     Recup les valeurs.
     */
     $insert[]  = $val;

     /*
     Création des ?,? dans VALUES.
     */
     $valeur .= '?,';
   }

   /*
   Supprime la dernière , des données.
   */
   $ch   = substr( $champ, 0, -1 );
   /*
   Supprime la dernière , des données.
   */
   $post = substr( $valeur, 0, -1 );

  try
  {

   	$stmt = SPDO::getInstance()->prepare('UPDATE  matable  ( '.$ch.' ) VALUES ( '.$post.' )') ;

    //$stmt->debugDumpParams();

   	$stmt->execute($insert);
  }
  catch(Exception $e)
 {
    die('Erreur : '.$e->getMessage());
 } 
Précision le nom des champs de mes formulaires correspond aux noms de mes champs dans la table.
Ça fonctionne nickel, mais je ne suis pas certain que cela soit très sécuriser bien que PDO protège normalement mes champs.

Mais mon plus grand soucis est pour un UPDATE je ne voie pas comment lui passer l'identifiant de l'article à mettre à jour. :oops:

Votre avis ?

D'avance merci