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

Langage PHP Discussion :

Objet PHP et Nombre attribut variable


Sujet :

Langage PHP

  1. #1
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut Objet PHP et Nombre attribut variable
    Bonjour,

    Je butte sur un problème en php orienté objet, je vous explique:

    Mon objet => fiche, a comme attribue :


    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
    function fiche($Obj_FI='', $Des_FI='', $Duree_FI='', $Local_FI='', $Cont_FI='', $Situa_FI='', $Act_FI='', $Res_Q1_FI='', $Res_Q2_FI='', $Valid_FI='', $Lieu_FI='', $Saisie_FI='', $ID_COMP='', $ID_PRO='', $ID_PROC='',$Lib_PROC='',$Co_PROC='',$ID_DO ='',$Lib_DO='',$Co_DO ='',$ID_ACT='',$Lib_ACT='',$Co_ACT='',$ID_COMP='',$Lib_COMP='',$Co_COMP='',$ID_PRO='',$Lib_PRO='',$Des_PRO='')
        {
            $this->Obj_FI = $Obj_FI;
            $this->Des_FI = $Des_FI;
            $this->Duree_FI = $Duree_FI;
            $this->Local_FI = $Local_FI;
            $this->Cont_FI = $Cont_FI;
            $this->Situa_FI = $Situa_FI;
            $this->Act_FI = $Act_FI;
            $this->Res_Q1_FI = $Res_Q1_FI;
            $this->Res_Q2_FI = $Res_Q2_FI;
            $this->Valid_FI = $Valid_FI;
            $this->Lieu_FI = $Lieu_FI;
            $this->Saisie_FI = $Saisie_FI;
            $this->ID_PROC = $ID_PROC;
            $this->Lib_PROC = $Lib_PROC;
            $this->Co_PROC = $Co_PROC;
            $this->ID_DO = $ID_DO;
            $this->Lib_DO = $Lib_DO;
            $this->Co_DO = $Co_DO;
            $this->ID_ACT = $ID_ACT;
            $this->Lib_ACT = $Lib_ACT;
            $this->Co_ACT = $Co_ACT;
            $this->ID_COMP = $ID_COMP;
            $this->Lib_COMP = $Lib_COMP;
            $this->Co_COMP = $Co_COMP;
            $this->ID_PRO = $ID_PRO;
            $this->Lib_PRO = $Lib_PRO;
            $this->Des_PRO = $Des_PRO;
    }
    Mais une fiche peut avoir un ou plusieurs supports (5 max) (composé d'un ID, d'un libéllé, d'une nature et d'un origine).

    de ce fait, Dois-je créer les 5 supports directement dans l'objet fiche ? (Donc 20 attributs en plus)

    Comme ceci :

    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
    function fiche($Obj_FI='', $Des_FI='', $Duree_FI='', $Local_FI='', $Cont_FI='', $Situa_FI='', $Act_FI='', $Res_Q1_FI='', $Res_Q2_FI='', $Valid_FI='', $Lieu_FI='', $Saisie_FI='', $ID_COMP='', $ID_PRO='', $ID_PROC='',$Lib_PROC='',$Co_PROC='',$ID_DO ='',$Lib_DO='',$Co_DO ='',$ID_ACT='',$Lib_ACT='',$Co_ACT='',$ID_COMP='',$Lib_COMP='',$Co_COMP='',$ID_PRO='',$Lib_PRO='',$Des_PRO='')
    {
        $this->Obj_FI = $Obj_FI;
        $this->Des_FI = $Des_FI;
        $this->Duree_FI = $Duree_FI;
        $this->Local_FI = $Local_FI;
        $this->Cont_FI = $Cont_FI;
        $this->Situa_FI = $Situa_FI;
        $this->Act_FI = $Act_FI;
        $this->Res_Q1_FI = $Res_Q1_FI;
        $this->Res_Q2_FI = $Res_Q2_FI;
        $this->Valid_FI = $Valid_FI;
        $this->Lieu_FI = $Lieu_FI;
        $this->Saisie_FI = $Saisie_FI;
        $this->ID_PROC = $ID_PROC;
        $this->Lib_PROC = $Lib_PROC;
        $this->Co_PROC = $Co_PROC;
        $this->ID_DO = $ID_DO;
        $this->Lib_DO = $Lib_DO;
        $this->Co_DO = $Co_DO;
        $this->ID_ACT = $ID_ACT;
        $this->Lib_ACT = $Lib_ACT;
        $this->Co_ACT = $Co_ACT;
        $this->ID_COMP = $ID_COMP;
        $this->Lib_COMP = $Lib_COMP;
        $this->Co_COMP = $Co_COMP;
        $this->ID_PRO = $ID_PRO;
        $this->Lib_PRO = $Lib_PRO;
        $this->Des_PRO = $Des_PRO;
        $this->ID_SUPP_0 = $ID_SUPP_0;
        $this->Nom_SUPP_0= $Nom_SUPP_0;
        $this->Org_SUPP_0= $Org_SUPP_0;
        $this->Nat_SUPP_0= $Nat_SUPP_0;
        $this->ID_SUPP_1 = $ID_SUPP_1;
        $this->Nom_SUPP_1= $Nom_SUPP_1;
        $this->Org_SUPP_1= $Org_SUPP_1;
        $this->Nat_SUPP_1= $Nat_SUPP_1;
        $this->ID_SUPP_2 = $ID_SUPP_2;
        $this->Nom_SUPP_2= $Nom_SUPP_2;
        $this->Org_SUPP_2= $Org_SUPP_2;
        $this->Nat_SUPP_2= $Nat_SUPP_2;
        $this->ID_SUPP_3 = $ID_SUPP_3;
        $this->Nom_SUPP_3= $Nom_SUPP_3;
        $this->Org_SUPP_3= $Org_SUPP_3;
        $this->Nat_SUPP_3= $Nat_SUPP_3;
        $this->ID_SUPP_4 = $ID_SUPP_4;
        $this->Nom_SUPP_4= $Nom_SUPP_4;
        $this->Org_SUPP_4= $Org_SUPP_4;
        $this->Nat_SUPP_4= $Nat_SUPP_4;
    }
    Ou faire une requête sql et compter le nombre de support pour la fiche en question ?

    Il faut savoir aussi que cette objet me permet de modifier ma fiche donc de pouvoir enregistrer 1 à 5 support.

    Je sais pas trop comment ou quoi faire.

    Merci d'avance de votre aide.

    (N'hésiter pas a me demandé des partie de code.)

  2. #2
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Salut,

    A la vue de ton code, cela serait bien si tu pouvais poster le code complet de ta classe Fiche

  3. #3
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    Voila
    Fichiers attachés Fichiers attachés

  4. #4
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Houlà, c'est space...

    Allez rapidement :
    • Toutes les propriétés de ta classe sont public : quelle que soit l"instance on peut tout modifier sans aucun contrôle ^^
    • Qu'un constructeur porte le nom de la classe dans laquelle il est défini peut s'avérer très problématique : regarde ici
    • Avoir toutes les propriétés public et se taper un prototype de constructeur avec la liste des 30 variables, c'est inutile
    • Quand tu as autant de variables, tu y gagne à utiliser un tableau en guise de paramètre
    • Tout étant public, on peut même s'amuser à changer les types de données en base : $pog_attribute_type
    • Généralement, on n'a pas à "dé-échapper" les données de la base à la lecture...
    • T'es sûr d'avoir besoin d'utiliser utf8_encode() ? Si t'es homogène sur toute la ligne, tu n'as pas à te préoccuper des encodages
    • Tu devrais nommer plus explicitement tes variables, parce que quand tu y reviendras dans 10 mois, tu te maudiras

    J'arrête là,

    Euh, c'est étrange :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    $thisObjectName = get_class($this);
    $fiche = new $thisObjectName();
    Tu peux remplacer par : Donc pour répondre à ta question, je te dirais qu'il faut passer par un tableau de gestion des supports.
    Mais bon, faudrait d'abord reprendre entièrement ce code.

  5. #5
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    La base de se code vient de POG (Php object generator) où j'ai modifier quelque petite chose.

    je relis un cours de php objet et je modifie tous ça,

    pour le (utf8_encode), s'il y en a pas, les 4 libellés sont Null.

  6. #6
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    Je suis arrivé à ça :

    class.fiche.php

    Cela me retourne le même résultat qu'avant mais avec 2 fois moins de ligne , Mais si je les met en 'private' cela ne marche plus !
    et je ne vois pas pourquoi

  7. #7
    Expert confirmé
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 49
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Billets dans le blog
    12
    Par défaut
    Je suis allé voir à tout hasard ce projet open source POG.

    Je ne te cache pas que j'ai chopé une hémorragie oculaire !

    Échapper des valeurs en base avec base64_encode(), c'est de l'art moderne ou je ne m'y connais pas !!

    Utiliser encore mysql_real_escape_string() qui est obsolète, c'est ballot.
    Et faire des stripcslashes() alors qu'il n'y a nulle part son pendant : addcslashes(), c'est comment dire : complètement inutile.

    Un conseil, laisse tomber cette librairie POG, c'est du grand n'importe quoi.
    Comme 99% des générateurs de code, le résultat est pourri.

    Prends toi par la main, siphonne les tutos sur DVP, mène tes recherches, pose des questions mais par pitié, jette moi de ce torchon.

  8. #8
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    Ok bah je vais faire ça alors

    Merci du conseil

  9. #9
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    Après avoir lu plusieurs tuto, et fais pas mal de recherche j'ai réussis (du moins je pense ^^)

    j'ai un doute avec :


    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    $req ="SELECT ID_SUPP FROM supp_fi WHERE ficheid= ".$ficheId;
    $data = Database::Requete($req);
    while ($row = Database::Lecture($data))
    {
    	$this->Supp[]= new Support($row->ID_SUPP);
    }

    Entre les crochet de Supp, je n'ai pas à incrémenter ?

    Il y a aussi le faite que si dans les info que je reçois il y a des accents, je dois mettre utf8_encode, il y t'il un moyen d'éviter cela ?


    PS :
    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    public function Lecture($cursor)
    {
    	return mysql_fetch_object($cursor);
    }
    public function Requete($query)
    {
    	$query = mysql_query($query);
    	return $query;
    }

  10. #10
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Entre les crochet de Supp, je n'ai pas à incrémenter ?
    Non pas besoin d'incrémenter, les crochets signifient "ajout à la fin du tableau"

    Il y a aussi le faite que si dans les info que je reçois il y a des accents, je dois mettre utf8_encode, il y t'il un moyen d'éviter cela ?
    Normalement, si tu es carré sur ton encodage du début à la fin, tu n'as pas besoin d'utiliser des fonctions comme celle-ci. Je t'invite à regarder ce tuto, tu ne devrais plus avoir de problème après l'avoir lu (et compris )

  11. #11
    Membre averti
    Homme Profil pro
    Développeur Web
    Inscrit en
    Février 2014
    Messages
    18
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Développeur Web

    Informations forums :
    Inscription : Février 2014
    Messages : 18
    Par défaut
    Merci de ta réponse,

    Je vais lire ce tuto

    Par contre j'ai un problème pour initialiser mes attributs je voulais mettre un paramètre optionnel :

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    public function __construct($ficheId = '0' ){
    	if ($ficheId == '0') {
    		$this->Obj_FI='';
    		$this->Des_FI='';
    }
    	else{
    		$req = "select * from `fiche` where `ficheid`=".$ficheId."LIMIT 1";
    		$data = Database::Requete($req);
    ....
    }

    Mais cela ne marche pas

  12. #12
    Membre Expert

    Homme Profil pro
    Développeur Web
    Inscrit en
    Mai 2011
    Messages
    1 723
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Mai 2011
    Messages : 1 723
    Par défaut
    Qu'est ce qui ne marche pas ? Message d'erreur ou tu rentres toujours dans le "else" ?

    Ton code devrait marcher si tu fait juste un :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $fiche= new Fiche(); //Pas de paramètre
    Au passage, privilégie la valeur NULL à '0' (qui peut-être tendancieuse) et test avec isset() pour voir si ta variable est définie ou non.

Discussions similaires

  1. nombre des attributs variable
    Par fmed1900 dans le forum Langage
    Réponses: 4
    Dernier message: 04/05/2012, 11h06
  2. [PHP-JS] Problème de variable PHP dans un script JS
    Par soad029 dans le forum Général JavaScript
    Réponses: 2
    Dernier message: 08/08/2005, 22h17
  3. [PHP-JS] passage de variable php a javascript
    Par limpins dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 05/07/2005, 11h54
  4. [MFC] Portée d'attributs/variables ?
    Par BaBeuH dans le forum MFC
    Réponses: 4
    Dernier message: 14/06/2005, 10h31
  5. [PHP-JS] Envoi de variable sans passer par un submit
    Par adilou1981 dans le forum Langage
    Réponses: 4
    Dernier message: 15/11/2004, 19h21

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