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 :

Definir les parametre d'un objet en dehors de l'objet ainsi que le setter


Sujet :

PHP & Base de données

  1. #1
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Par défaut Definir les parametre d'un objet en dehors de l'objet ainsi que le setter
    Bonjour,
    Bon le titre ne parle pas de lui meme mais c'est mon probleme :
    J'ai une base de donnee SQL serveur, le "client" y a acces et peut changer les alias de ma vue, je doit travailler sur la vue mais je suis habituer a avoir une class qui gere la conexxion et une class manager, par exemple :
    pour la connection :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    <?php
    class Manager
    {
    	private $_user="###";
    	private $_password="###";
     
        public function dbConnect()
        {
            $db = new PDO('sqlsrv:Server=mon_serveur;Database=ma_base_de_donne', $this->_user, $this->_password , array(PDO::ATTR_ERRMODE => PDO::ERRMODE_WARNING));
    		$db->setAttribute(PDO::SQLSRV_ATTR_ENCODING, PDO::SQLSRV_ENCODING_UTF8);
            return $db;
        }
    }
    et pour le 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
    35
    36
    37
    38
    39
    40
    <?php
    require_once("Class/Manager.php");
    class IngredientsManager extends Manager
    {
    	 public function getList($order = 'Name')
    	{
    		$db = parent::dbConnect();
    		$ingredient = [];
    		$q = $db->query("SELECT Code, Name FROM Products ORDER BY $order");
    		while ($data = $q->fetch(PDO::FETCH_ASSOC))
    		{
    		  $ingredient[] = new Ingredient($data);
    		}
    		return $ingredient;
    	}
    	public function update(Ingredient $ingredient)
    	{
    		$db = parent::dbConnect();
    		$q = $db->prepare('UPDATE Products SET Name = :name WHERE Code = :code');
    		$q->bindValue(':name', $ingredient->name());
    		$q->bindValue(':code', $ingredient->code(), PDO::PARAM_INT);
    		$q->execute();
    	}
    	 public function add(Ingredient $ingredient)
     
    	{
    		$db = parent::dbConnect();
    		$q = $db->prepare('INSERT INTO Products(name) VALUES(:name)');
    		$q->bindValue(':nom', $ingredient->name());
    		$q->execute();
    	}
    	public function deleted(Ingredient $ingredient)
    	{
    		$db = $this->dbConnect();
    		$q=$db->prepare('DELETE FROM Products WHERE Code = :code ');
    		$q->bindValue(':code', $ingredient->code());
    		$q->execute();
    	}
     
    }
    et c'est la que commence mon probleme avec mon objet ingredient :
    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
    <?php
    class Ingredient
    {
    	Private $_code;
    	private $_name;
    	public function code(){ return $this->_code;}
    	public function name(){return $this->_name;}
     
    	public function __construct(array $data)
    	{
        $this->hydrate($data);
    	}
     
    	public function hydrate(array $data)
    	{
    		foreach ($data as $key => $value)
    		{
    			$method = 'set'.ucfirst($key);
    			if (method_exists($this, $method))
    			{
    				$this->$method($value);
    			}		
    		}
    	}
    	public function setCode($code)
    	{
    		if (is_string($code))
    		{
    			$this->_code = $code;
    		}
    	}
    	public function setName($name)
    	{
    		if (is_string($name))
    			{
    			$this->_name = $name;
    			}
    	}
    }
    ma fonction hydrate prend les data depuis mon manager et set ses parametre en fonction du fait des alias dans SQL Serveur, hors vu que le client peut changer les alias (et au passage y mettre des espaces) ca ne marche plus, je suis un peu perdu je ne sais plus comment m'y prendre, ou alors sans faire d'objet ? y a t'il une solution en restant en POO ?

  2. #2
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Bonjour,
    En utilisant les méthodes magiques de PHP

    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
     
    <?php 
     
    class Ingredient
    {
     
        public function __construct(array $data)
        {
            $this->hydrate($data);
        }
     
        public function hydrate(array $data)
        {
            foreach ($data as $key => $value)
            {
                /**
                *Supression des espcaces éventuelle
                */
                $column = preg_replace('/\s/', '', $key);
                $this->$column($value);
     
            }
        }
     
        public function __call($name,$value){
     
            $this->$name = $value;
     
        }
     
     
    }
     
     
    $ingrediant = new Ingredient([
     
        'test1' => 3,
        'champs espace' => 'toto'
     
    ]);
     
     
    var_dump($ingrediant);

  3. #3
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Par défaut
    Merci beaucoup
    Je vais tester ca de suite, desole sur cette question mais du coup vu que les pqrqmetre change comment refaire mon afficahge de maniere pseudo equivalente a l'ancien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    <form method="post" >
    	<div id=<?='row'.$ingredient->code()?> class="grid">
    		<span><input type="text" id=<?='code'.$ingredient->code()?> class="cellCode" name="code" value=<?=$ingredient->code()?> readonly></span>
    		<span><input type="text" id=<?='name'.$ingredient->code()?> class="cellName" name="name" value=<?=$ingredient->name()?>></span>
    		<span class='centeredElement' ><button id=<?=$ingredient->code()?> class="ButtonEdit" type="button" ></button></span>
    		<span class='centeredElement' ><button class="ButtonDelete" type="button" value=<?=$ingredient->code()?>></button></span>
    	</div>
    </form>
    car du coup les parametre de l'objet sont variables, non ?

  4. #4
    Modérateur

    Avatar de MaitrePylos
    Homme Profil pro
    DBA
    Inscrit en
    Juin 2005
    Messages
    5 505
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 52
    Localisation : Belgique

    Informations professionnelles :
    Activité : DBA
    Secteur : Service public

    Informations forums :
    Inscription : Juin 2005
    Messages : 5 505
    Par défaut
    Ben dans ce cas là faut travailler avec des clients qui ne change pas le code à la volée.

    Si c'est du MySQL, tu pourrais explorer la table pour récupérer les nom des colonnes et ensuite travailler dessus.
    Mais le souci est plutôt ton hydrate qui sert pas à grand chose, si tu fais une simple requête en PDO tu récupère le tout et tu boucles.

  5. #5
    Membre averti

    Homme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2019
    Messages
    19
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 30
    Localisation : France, Pyrénées Orientales (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Industrie

    Informations forums :
    Inscription : Janvier 2019
    Messages : 19
    Par défaut
    Citation Envoyé par MaitrePylos Voir le message
    Ben dans ce cas là faut travailler avec des clients qui ne change pas le code à la volée.

    Si c'est du MySQL, tu pourrais explorer la table pour récupérer les nom des colonnes et ensuite travailler dessus.
    Mais le souci est plutôt ton hydrate qui sert pas à grand chose, si tu fais une simple requête en PDO tu récupère le tout et tu boucles.
    J'aimerais bien pouvoir faire avec MySQL car je suis plus habitue et il y a une grosse comunaute derriere, mais malheureusement je doit le faire avec SQL Server.
    J'ai pense a faire un foreach avec les meta puis apres je me suis rendu compte que le meme probleme se posais plus loin.
    Du coup j'ai fait un truc comme ca au final :

    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
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    <?php
    class Ingredient
    {
    	Private $_code;
    	Private $_codealias;
    	private $_name;
    	private $_namealias;
    	private $_supplier;
    	private $_supplieralias;
    	private $_editdate;
    	private $_editdatealias;
    	public function code(){ return $this->_code;}
    	public function codealias(){ return $this->_codealias;}
    	public function name(){return $this->_name;}
    	public function namealias(){return $this->_namealias;}
    	public function supplier(){return $this->_supplier;}
    	public function supplieralias(){return $this->_supplieralias;}
    	public function editdate(){return $this->_editdate;}
    	public function editdatealias(){return $this->_editdatealias;}
     
    	public function __construct(array $data)
    	{
        $this->hydrate($data);
    	}
     
    	public function hydrate(array $data)
    	{
    		$keys = array_keys($data);
    		if (array_key_exists(0, $keys)) {
    			$this->setCode($data[$keys[0]]);
    			$this->setCodealias($keys[0]);
    		}
    		if (array_key_exists(1, $keys)) {
    			$this->setName($data[$keys[1]]);
    			$this->setNamealias($keys[1]);
    		}
    		if (array_key_exists(2, $keys)) {
    		$this->setSupplier($data[$keys[2]]);
    		$this->setSupplieralias($keys[2]);
    		}
    		if (array_key_exists(2, $keys)) {
    		$this->setEditdate($data[$keys[3]]);
    		$this->setEditdatealias($keys[3]);
    		}
    	}
    	public function setCode($code)
    	{
    		if (is_string($code))
    		{
    			$this->_code = $code;
    		}
    	}
    	public function setCodealias($codealias)
    	{
    		if (is_string($codealias))
    		{
    			$this->_codealias = $codealias;
    		}
    	}
    	public function setName($name)
    	{
    		if (is_string($name))
    			{
    			$this->_name = $name;
    			}
    	}
    	public function setNamealias($namealias)
    	{
    		if (is_string($namealias))
    			{
    			$this->_namealias = $namealias;
    			}
    	}
    	public function setSupplier($supplier)
    	{
    		if (is_string($supplier))
    			{
    			$this->_supplier = $supplier;
    			}
    	}
    	public function setSupplieralias($supplieralias)
    	{
    		if (is_string($supplieralias))
    			{
    			$this->_supplieralias = $supplieralias;
    			}
    	}
    	public function setEditdate($editdate)
    	{
    		if (is_string($editdate))
    			{
    			$this->_editdate = $editdate;
    			}
    	}
    	public function setEditdatealias($editdatealias)
    	{
    		if (is_string($editdatealias))
    			{
    			$this->_editdatealias = $editdatealias;
    			}
    	}
    }
    C'est pas ouf c'est sur mais ca fait le taf au final (le client ne touchant pas au nombre de colonne)
    ma connexion est en PDO mais toujours sur MS SQL Server du coup pour recuperer mes alias j'ai trouver le fait de recuperer les clefs.
    Au final j'ai aussi reutilise [ ] pour les espace pour les garder dans mes vue. Mais bon je ne me sent pas fier du tout de cette solution ...

Discussions similaires

  1. [POO] passage nom objet dsn les parametres d'une fonction
    Par melou dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 21/10/2005, 17h26
  2. Mettre a jour les Parametres dans une requete SQL
    Par Tartar Ukid dans le forum C++Builder
    Réponses: 7
    Dernier message: 31/03/2004, 13h51
  3. [LG]J'ai honte : question de cours sur les paramètres
    Par letibdesneiges dans le forum Langage
    Réponses: 14
    Dernier message: 17/01/2004, 13h57
  4. Rafraichissement de la fiche ainsi que de tous les objets
    Par portu dans le forum Composants VCL
    Réponses: 7
    Dernier message: 06/01/2004, 00h25
  5. [VB6] [ADO] Procedure stockée : spécifier les paramètres
    Par adepdoom dans le forum VB 6 et antérieur
    Réponses: 2
    Dernier message: 16/10/2002, 10h45

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