Bonjour,

Je me permets de poster sur ce forum pour la première fois, et étant en plein apprentissage du PHP j'ai l'habitude de venir ici chercher des solutions à mes problèmes via les posts existants, où je trouve presque toujours une solution grâce à vous !

Mais cette fois-ci je n'arrive pas à le résoudre par moi même, le problème me dépasse probablement...
J'ai souvent lu sur différents forums et même ici, que ce problème provient souvent d'un problème dans la requête SQL, j'ai déjà tenté de modifier cette requête plusieurs fois, vérifié si les intitulés étaient bons mais je continue a avoir cette erreur.

(Note : Je suis conscient que niveau optimisation ou sécurité c'est pas vraiment ça, mais j'essaye d'améliorer le code bout par bout, en essayant de réparer les erreurs à chaque étape...)

Je vous remercie beaucoup pour votre temps, et votre aide !


Contexte : inscription utilisateur, projet construit en POO / MVC => tentative de mise en place des méthodes d'entités/manager


Voici mes bouts de code utilisés dans mon cas présent :

Routeur :
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
 
case 'inscription':
                    $this->ctrlInscription = new ControleurEspaceAdmin();
                    $nomUtilisateur = $this->getParametre($_POST, 'nomUtilisateur');
                    $motDePasse = $this->getParametre($_POST, 'motDePasse');
                    $this->ctrlInscription->inscription($nomUtilisateur, $motDePasse);
                    break;
 
private function getParametre($tableau, $nom)
    {
        if (isset($tableau[$nom])) {
            return $tableau[$nom];
        } else
            throw new Exception("Paramètre '$nom' absent");
    }

ControleurEspace Admin :
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
 
class ControleurEspaceAdmin {
 
//private $identifiant;
private $manager;
 
public function __construct() {
    $this->manager = new UtilisateurManager();
}
 
public function inscription() {
        if (isset($_POST['inscription']) && ($_POST['nomUtilisateur']) && ($_POST['motDePasse'])) {
            $util = new Utilisateur([
                'nomUtilisateur' => $_POST['nomUtilisateur'],
                'motDePasse' => $_POST['motDePasse']
            ]);
            $this->manager->add($util);
        }
        header('Location: http://localhost:8888/Projet3OC/index.php');

Utilisateur (entité) :
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
62
63
64
65
66
67
68
 
<?php
 
require_once 'Modele/Modele.php';
 
class Utilisateur extends Modele {
 
    private $id_utilisateur;
    private $nom_utilisateur;
    private $mot_de_passe;
 
 
    public function hydrate(array $donnees) {
        foreach ($donnees as $cle => $valeur) {
            // On récupère le nom du setter correspondant à l'attribut
            $method = 'set'.ucfirst($cle);
            if (method_exists($this, $method)) {
                // On appelle le setter
                $this->$method($valeur);
            }
        }
    }
 
    // Liste des getters
    public function id() {
        return $this->id_utilisateur;
    }
 
    public function nomUtilisateur() {
        return $this->nom_utilisateur;
    }
 
    public function motDePasse() {
        return $this->mot_de_passe;
    }
 
 
    // Liste des setters
    public function setId($id) {
        // Les valeurs possibles de l'identifiant sont tous les nombres entiers strictement positifs
        // On convertir l'argument en nombre entier
        // Si c'en était déjà un rien ne changera
        // Sinon, la conversion donnera le nombre 0 (à quelques exceptions près) 
        $id = (int) $id;
 
        // On vérifie ensuite si ce nobmre est bien strictement positif
        if ($id > 0) {
            // Si c'est le cas, c'est parfait, on assigne la valeur à l'attribut correspondant
            $this->id_utilisateur = $id;
        }
    }
 
    public function setNomUtilisateur($nomUtilisateur) {
        // Les valeurs possibles de l'utilisateur sont toutes les chaînes de caractères
        // On vérifie qu'il s'agit bien d'une chaîne de caractères
        if (is_string($nomUtilisateur)) {
            $this->nom_utilisateur = $nomUtilisateur;
        }
    }
 
    public function setMotDePasse($motDePasse) {
        // Les valeurs possibles du mot de passe sont toutes les chaînes de caractères
        // Toujours de la même manière on vérifie qu'il s'agit bien d'une chaîne de caractères
        if (is_string($motDePasse)) {
            $this->mot_de_passe = $motDePasse;
        }
    }
}
UtilisateurManager (manager) :
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
 
<?php
 
require_once 'Modele/Modele.php';
 
// Quelles seront les caractéristiques de mes objets ?
// Quelles seront les fonctionnalités de mes objets ?
 
// De quoi à besoin un manager pour fonctionner = une connexion à la BDD pour pouvoir exécuter des requêtes. En utilisant PDO, la connexion à la BDD est representée par un objet
 
// Un manager doit pouvoir :
// enregistrer une nouvelle entité; (C)
// sélectionner une entité; (R)
// modifier une entité; (U)
// supprimer une entité; (D)
 
class UtilisateurManager extends Modele {
 
    private $_bdd; // Instance de PDO
 
 
    public function __construct() {
        $this->getBdd();
    }
 
    public function add(Utilisateur $util) {
        // Préparation de la requête d'insertion
        $bdd = $this->getBdd();
 
        $add = $bdd->prepare('insert INTO utilisateurs(id_utilisateur, nom_utilisateur, mot_de_passe) VALUES(null, :nom_utilisateur, :mot_de_passe)');
        $add->bindValue($_POST['nomUtilisateur'], $util->nomUtilisateur());
        $add->bindValue($_POST['motDePasse'], $util->motDePasse());
        Debug::printr($_POST);
        $add->execute();
Modele :
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
 
<?php
 
abstract class Modele
{
 
    // Objet PDO pour accèder à la BDD
    private $bdd;
 
    // Execute une requête SQL éventuellement paramètrée
    protected function executerRequete($sql, $params = null) {
        if ($params == null) {
            $resultat = $this->getBdd()->query($sql); // exécution directe
        } else {
            $resultat = $this->getBdd()->prepare($sql); // requête préparée
            Debug::printr($resultat);
            $resultat->execute($params);
        }
        return $resultat;
    }
 
    // Connexion BDD
    // Instancie et renvoi l'objet PDO associé
    protected function getBdd()
    {
        $bdd = new PDO('mysql:host=localhost;dbname=Projet3OC;charset=utf8', 'root', 'root', array(
            PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION
        ));
        return $bdd;
    }
}