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:
cette classe est extends de ma classe modèle.
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']); }
Voici le résumé de la classe Inscription:
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
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; }
Quand j'essaye de soumettre le formulaire, l'insertion s'execute sauf que la valeur de tous les champs est la meme à savoir $dateNow
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(); }
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:
un echo de $this->query me renvoieDUPONT
Jean
JEANDUPONT
$2y$10$EuGC0sgkrHIfanGKAFMq7.kTb/UlWPoQuJZpicFyiyVudHe0H6NC2
jeandupont@banane.Fr
2020-05-06 22:25:50
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
Partager