IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

Ma requete ajoute la même valeur à tous les champs


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut Ma requete ajoute la même valeur à tous les champs
    Bonjour,
    Tout d'abord soyez indulgent sur la manière dont je traite les données postées par mon formulaire car ce n'est qu'une version de test et je suis conscient que mes données ne sont pas sécurisées.
    Je suis également en apprentissage de POO donc mes classes ne sont probablement pas idéales mais je cherche juste à trouver une erreur d'insertion.

    Comme l'explique le titre j'ai un problème de requête qui ajoute la même valeur à tous les champs de ma table.

    J'ai un formulaire dont les champs sont prenom, nom, pseudo, pass, confirmation, email
    Lors du post de ce formulaire, j'instancie une classe de cette manière:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    if (isset($_POST['envoyer'])) {
        $user=New \APP\models\inscription\Inscription();
        $user->register($_POST['prenom'],$_POST['nom'],$_POST['pseudo'],$_POST['pass'],$_POST['confirmation'],$_POST['email']);
    }
    cette classe est extends de ma classe modèle.
    Voici le résumé de la classe Inscription:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
    41
    42
    43
    44
    45
    46
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
     
    namespace APP\models\inscription;
    use APP\database\Database;
    use APP\database\Model;
    use \PDO;
     
    class Inscription extends Model
    {
        private $_error;
        protected $prenom;
        protected $nom;
        protected $pseudo;
        protected $pass;
        protected $email;
        public function __construct()
        {
            $this->table = "users";
            $this->pdo=Database::getPdo();
        }
    private function securite($value) {
            return htmlentities(addslashes($value));
        }
        public function register($prenom,$nom,$pseudo,$pass,$confirmation,$email) {
            $accept=true;
            $this->prenom=$this->securite(ucfirst(strtolower($prenom)));
            if ($this->verifier('pseudo',$this->pseudo)>0) {
                $accept=false;
            }
            $this->nom=$this->securite(strtoupper($nom));
            $this->pseudo=$this->securite($pseudo);
            $this->email=$this->securite($email);
            if($pass===$confirmation) {
                $this->pass=password_hash($this->securite($pass),PASSWORD_DEFAULT);
            } else {
                $accept = false;
            }
            if ($accept===true) {
                $dateNow=date("Y-m-d H:i:s");
                $this->insert
                (
                    [
                        "nom",
                        "prenom",
                        "pseudo",
                        "pass",
                        "email",
                        "registerDate"
                    ],
                    [
                        $this->nom,
                        $this->prenom,
                        $this->pseudo,
                        $this->pass,
                        $this->email,
                        $dateNow
                    ]
                );
                return true;
            }
            return false;
        }
    les propriétés et La méthode $this->insert de la classe Models sont les suivantes:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
    34
    35
    36
    37
    38
    39
    40
     
        protected $pdo;
        protected $table;
        protected $query;
        protected $params=[];
        protected $result=null;
        protected $count=0;
        protected $error=false;
        public function __construct()
        {
           $this->pdo=Database::getPdo();
        }
        protected function insert($fieldsName=[],$values=[]) {
            unset($this->params);
            $this->query="INSERT INTO ".$this->table." (";
            foreach($fieldsName as $k => $v) {
                if($v==end($fieldsName)) {
                    $this->query.="`".$v."`) VALUES (";
                } else {
                    $this->query.="`".$v."`,";
                }
            }
            foreach ($values as $k => $v) {
                $this->params[]=$v;
                if($v==end($values)) {
                    $this->query.="?)";
                } else {
                    $this->query.="?, ";
                }
            }
            $stmnt=$this->pdo->prepare($this->query);
            $i=1;
            foreach($this->params as $k => $v) {
                echo $i." ".$k." ".$v."<br>";
                $stmnt->bindParam($i,$v);
                $i++;
            }
            echo $this->query;
            $stmnt->execute();
        }
    Quand j'essaye de soumettre le formulaire, l'insertion s'execute sauf que la valeur de tous les champs est la meme à savoir $dateNow
    Je ne vois pas d'ou vient l'erreur étant donné que un var_dump de $this->params me renvoie bien les données attendues:
    DUPONT
    Jean
    JEANDUPONT
    $2y$10$EuGC0sgkrHIfanGKAFMq7.kTb/UlWPoQuJZpicFyiyVudHe0H6NC2
    jeandupont@banane.Fr
    2020-05-06 22:25:50
    un echo de $this->query me renvoie
    Code sql : Sélectionner tout - Visualiser dans une fenêtre à part
    INSERT INTO users (`nom`,`prenom`,`pseudo`,`pass`,`email`,`registerDate`) VALUES (?, ?, ?, ?, ?, ?)

    Je ne comprends vraiment pas pourquoi la variable dateNow est ajouté à chaque champs de ma table users...
    Voyez vous mon erreur SVP ?
    D'avance merci

  2. #2
    Invité
    Invité(e)
    Par défaut
    Bonjour,

    remplace :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                $stmnt->bindParam($i,$v);
    par
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
                $stmnt->bindValue($i,$v);
    Cela dit, on peut aussi avantageusement remplacer :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
            foreach($this->params as $k => $v) {
     //           echo $i." ".$k." ".$v."<br>";
                $stmnt->bindValue($i,$v);
                $i++;
            }
     //       echo $this->query;
            $stmnt->execute()
    par :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
            $stmnt->execute( $this->params );

  3. #3
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Bonsoir et merci pour cette réponse rapide.
    j'ai fait les remplacement indiqués mais les champs de ma table restent alimentés par la variable $dateNow
    Nom : Capture.PNG
Affichages : 107
Taille : 9,2 Ko

  4. #4
    Invité
    Invité(e)
    Par défaut
    Sauf erreur, ta fonction se résume à :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
        protected function insert($fieldsName=[],$values=[])
    	{
     
            $this->query = "INSERT INTO ".$this->table." ";
     
            $this->query .= " (`".implode("`,`",$fieldsName)."`) VALUES ";
     
            $this->query .= " (".str_repeat("?,", count($values)-1)."?) ";
     
            $stmnt = $this->pdo->prepare($this->query);
     
            $stmnt->execute( $values );
        }

  5. #5
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Cela me semble en effet plus court et plus propre que mon charabia.
    je teste mais je ne comprends tout de même pas pourquoi ca a inséré les memes valeurs partout.

  6. #6
    Membre confirmé
    Profil pro
    Inscrit en
    Septembre 2008
    Messages
    200
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Septembre 2008
    Messages : 200
    Par défaut
    Et bien merci cela fonctionne et c'est beaucoup plus clair.
    je ne pige pour autant pas d'ou venait mon erreur même si le code était crado.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 5
    Dernier message: 22/12/2015, 12h01
  2. Réponses: 4
    Dernier message: 31/10/2009, 14h03
  3. Mettre une même valeur à tous les champs d'un formulaire.
    Par nodogeid dans le forum VBA Access
    Réponses: 3
    Dernier message: 08/06/2007, 15h43
  4. requete ajout caractere sur tous les champs d'une table
    Par lorenzo74 dans le forum Requêtes et SQL.
    Réponses: 4
    Dernier message: 24/06/2006, 13h34
  5. une requete effectuant une recherche sur tous les champs
    Par raynor911 dans le forum Langage SQL
    Réponses: 3
    Dernier message: 13/02/2006, 15h06

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo