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 :

Séparer Classe du reste du php (?)


Sujet :

PHP & Base de données

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Nouveau candidat au Club
    Homme Profil pro
    Étudiant
    Inscrit en
    Octobre 2019
    Messages
    1
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Belgique

    Informations professionnelles :
    Activité : Étudiant

    Informations forums :
    Inscription : Octobre 2019
    Messages : 1
    Par défaut Séparer Classe du reste du php (?)
    J'ai un code, register.php dont la fonction sera d'insérer des infos dans une DB (via des POST qui ne figurent pas encore dans le code, c'est normal). Voici les instruction de mon maître de stage (que j'ai moyennement comprises) :

    "" Ajouter les vérifications et les retours.
    Je m'explique:
    Il me faudrait une page à part en php qui recevrait les infos email, nom et prénom.
    En gros, reprendre le contenu mis en dehors de la classe et le mettre à part
    Ce fichier appellerait la classe d'enregistrement et la fonction d'enregistrement, donc on lui passe les infos en paramètres dans la fonction.

    étape 1 : séparer la classe et le reste du php en 2 fichiers
    étape 2 : mettre les retours d'erreur avec la classe Report ""

    C'est un peu vague pour moi (très débutant).
    Quelqu’un d'autre peut-être, comprendrais mieux la demande et pourrait m'aider à la comprendre? et des pistes a creuser pour l'accomplir?

    Voici le code d'origine:


    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
    <?php
    class Registration
    {
    public $variable = "test";
    function RegisterUser($email, $name, $firstName )
    {
    echo($score);
     
    $config = array(
    "db" => "mysql:host=127.0.0.1;dbname=db_datasystem",
    "username" => "root",
    "password" => ""
    );
     
    $db = new PDO($config["db"], $config["username"], $config["password"]);
     
    $sql = "INSERT INTO t_users ( u_email, u_name, u_firstname) VALUES(:useremail, :username, :userfirstname)";
     
    $q = $db->prepare($sql);
    $q->bindParam("useremail", $email, PDO::PARAM_STR);
    $q->bindParam("username", $name, PDO::PARAM_STR);
    $q->bindParam("userfirstname", $firstName, PDO::PARAM_STR);
     
    if($q->execute())
    {
    echo("ok");
    }
    else
    {
    echo("not ok");
    }
    $q->closeCursor();
    }
    }
     
    $registration = new Registration();
     
    $myEmail = "xxx@yyy.be";
    $myName = "Th";
    $myFirstName = "Fr";
     
    $registration->RegisterUser($myEmail, $myName, $myFirstName);
    $registration->RegisterUser("xxx@yyy.be", $myName, $myFirstName);
     
    $myEmail = "xxx@yyy.com";
     
    ?>

  2. #2
    Membre Expert

    Homme Profil pro
    développeur
    Inscrit en
    Octobre 2013
    Messages
    1 586
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Oise (Picardie)

    Informations professionnelles :
    Activité : développeur

    Informations forums :
    Inscription : Octobre 2013
    Messages : 1 586
    Par défaut
    Salut,

    Utilise le constructeur plutôt que
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function RegisterUser($email, $name, $firstName )
    fait
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    function __construct($email, $name, $firstName )
    comme ça avec un new Register(...) tu peux instancier.
    ton
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $db = new PDO($config["db"], $config["username"], $config["password"]);
    devrait être dans un fichier que tu inclus, et dans un try catch en cas de problème.
    Un exemple https://github.com/panique/php-login-minimal
    Les retour d'erreurs tu dois utiliser des exceptions et try catch https://www.php.net/manual/fr/language.exceptions.php tu peux utiliser une classe Report dans le catch selon ton envie.

  3. #3
    Modératrice
    Avatar de Celira
    Femme Profil pro
    Développeuse PHP/Java
    Inscrit en
    Avril 2007
    Messages
    8 633
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Âge : 40
    Localisation : France

    Informations professionnelles :
    Activité : Développeuse PHP/Java
    Secteur : Industrie

    Informations forums :
    Inscription : Avril 2007
    Messages : 8 633
    Par défaut
    1ere partie : séparer. Simple : tu prends tout le code de définition de la classe que tu mets dans un autre fichier, que tu appelles par exemple registration.class.php et tu l'inclus dans ton script principal en utilisantrequire (ou require_​once si tu crains de te louper dans les inclusions)

    Comme l'a indiqué Kevin, il faudrait séparer aussi la connexion à la base dans un autre fichier, et passer la connexion en paramètre à ton objet Ref. Tu peux regarder le script de connexion dans le tuto PDO une soupe et au lit ! pour avoir une idée.

    Par contre, je ne suis pas d'accord sur le constructeur de Registration, conseillé par Kevin. Si tu les infos en paramètre, ton Registration ne pourra manipuler QUE des User et uniquement avec les données précisées.
    Contre-proposition : mettre la connexion à la bdd au niveau du constructeur et conserver la signature actuelle :
    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
    class Registration {
     
        private $_pdo;
     
        /**
         * Constructeur : on renseigne la connexion à la base
         */
        public __construct($pdo) {
            $this->_pdo = $pdo;
        }
     
        public function registerUser($email, $name, $firstName) {
            $sql = "INSERT INTO t_users ( u_email, u_name, u_firstname) VALUES(:useremail, :username, :userfirstname)";
     
            // ici on utilise la connexion resneignée dans le constructeur
            $q = $this->_pdo->prepare($sql);
            $q->bindParam("useremail", $email, PDO::PARAM_STR);
            $q->bindParam("username", $name, PDO::PARAM_STR);
            $q->bindParam("userfirstname", $firstName, PDO::PARAM_STR);
     
            $res = $q->execute();
            $q->closeCursor();
     
            // on retourne le retour de l'exécution pour l'utiliser dans l'appelant
            return $res;
        }
    }
    Modératrice PHP
    Aucun navigateur ne propose d'extension boule-de-cristal : postez votre code et vos messages d'erreurs. (Rappel : "ça ne marche pas" n'est pas un message d'erreur)
    Cherchez un peu avant poser votre question : Cours et Tutoriels PHP - FAQ PHP - PDO une soupe et au lit !.

    Affichez votre code en couleurs : [CODE=php][/CODE] (bouton # de l'éditeur) et [C=php][/C]

Discussions similaires

  1. restful server php
    Par altair8080 dans le forum Langage
    Réponses: 1
    Dernier message: 09/12/2009, 09h23
  2. [MySQL] Je cherche une class sécurisée Mysql en php
    Par 123quatre dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 01/11/2009, 17h43
  3. Pourquoi nom de la classe = nom du fichier PHP?
    Par aiss57 dans le forum Flex
    Réponses: 2
    Dernier message: 30/06/2009, 10h13
  4. insérer classe javascript dans fonction php
    Par noname_971 dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 13/03/2008, 11h28
  5. [POO] [DEV] Classe de debug pour PHP
    Par -COil- dans le forum Langage
    Réponses: 11
    Dernier message: 09/06/2007, 19h53

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