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 :

Tableau associatif vous avez dit facile ?


Sujet :

Langage PHP

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Tableau associatif vous avez dit facile ?
    Décidément, je ne suis pas copain (encore) avec les tableaux associatifs....
    Il y a peut être un doc sur le site mais si j'en ai trouvés et déchargés bcp, celui-là, je le cherche toujours et comme il n'y a pas de moteur de recherche [Tiens une bonne suggestion....Ha quelle est bonne celle-là !]
    Je souhaite me faire une routine de validation de champs de formulaire - en même temps j'apprends un peu + PHP......
    Au départ dans la forme HTML il y a un peu de PHP avec le définition des champs et de leurs validations ainsi que le catch de l'évent "Submit"

    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
     
    $fields = array  ( 	"prenom" , array(MUST ,  3, 30, A€,  	"Prénom incorrect"										) ,
    						'nom'    , array(MUST ,  3, 30, A€,  	"Nom incorrect"											) , 
    						"email"  , array(MUST ,  5, 25, EMAIL,	"Email incorrect [www.]xxx@zzz.ext" 					) ,
    						"phone"  , array(MUST , 10, 10, PHONE, 	"N° téléphone incorrect, 10 posistions"					) ,
    						"pass"   , array(MUST ,  6,  8, PASW,  	"Le mot de passe est composé de 6 à 8 caractères Anum"	) ,
    						"cpass"  , array(MUST ,  6,  8, PASW,  	"Le mot de passe est composé de 6 à 8 caractères Anum"	) ,
    						"text"   , array(MUST , 20,500, ANUM€, 	"Le test est Anumérique + ponctualtion" 				)
    					) ;
     
        if (isset($_POST['chkform']))
    		{	$cf = new checkform($fields);
     
        		if ($cf->FormValid())
    				{	# Formulaire valide
        				# Instruction ...
        			}
    J'arrive maintenant dans ma classe de validation ou je dois prendre chacun des éléménts de ce tableau en compte.
    Et c'est là que je me dispute.....

    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
    <?php
    	define("MUST"  , "must" ) ;	define("must"  , "must" ) ;
    	define("OPT"   , "opt"  ) ;	define("opt"   , "opt"  ) ;
    	define("ALPHA" , "alpha") ;	define("alpha" , "alpha") ;
    	define("ANUM"  , "anum" ) ;	define("anum"  , "anum"	) ;
    	define("ANUM€" , "anum€") ;	define("anum€" , "anum€") ;
    	define("A€"    , "a€"   ) ;	define("a€"    , "a€"   ) ;
    	define("NUM"   , "num"  ) ;	define("num"   , "num"  ) ;
    	define("EMAIL" , "email") ;	define("email" , "email") ;
    	define("PHONE" , "phone") ;	define("phone" , "phone") ;
    	define("PASW"  , "pasw" ) ;	define("Ppas"  , "pasw"	) ;
    	define("MINL"  , "minl" ) ;	define("minl"  , "minl"	) ;
    	define("MAXL"  , "maxl" ) ;	define("maxl"  , "minl"	) ;
    	define("FLDT"  , "type" ) ;	define("fldt"  , "type"	) ;
    	define("MESG"  , "mesg" ) ;	define("mesg"  , "mesg"	) ;
    	
        	class checkform
    		{	private $form, $countfields, $valid ;
    			private $field_name ;
    		
    			function __construct($form)
    			{	$this->form  = $form ;
    				$this->valid = false ;
    			
    				$this->validate() ;
    			}
    			
    			function __destruct()
    			{}
    
    			function validate()
    			{	
    				foreach ($this->form as $v1) 
    				{	$this->field_name[] = $v1 ;
    					foreach ($v1 as $v2) 
    					{	$this->field_name[][MUST] = $v2 ;
    						$this->field_name[][MINL] = $v2 ;
    						$this->field_name[][MAXL] = $v2 ;
    						$this->field_name[][FLDT] = $v2 ;
    						$this->field_name[][MESG] = $v2 ;
    						echo "<br/>n";
        				}
    				}
    				print_r($this->field_name) ;
    			}
    Et principalement dans la méthode Validate ou je souhaiterais mettre dans le tableau "field_name" tous les éléments pour chaque champ afin de dispatcher + tard vers des validations ponctuelles où là, je pense pouvoir m'en sortir.
    Mais ici, j'imprime mes variables de contrôle et j'ai 2 écrans qui ne ressemblent à rien !

    Pour info complémentaire, si j'ai choisi un tableau à 2 dimensions, c'est parce que pour un même champ je pourrais avoir dans la 2ième dimensions, toutes les validations à effectuer avec des msgs d'erreur différents, comme ceci:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    $fields = array  ( 	"prenom" , array(  MUST ,  "le champ est obligatoire',
                                                    MINL , 3,"la long minimale est de X" ,
                                                    MAXL , 30, etc.....
                                                    TYPE  , A€,  etc......
                                                 "Prénom incorrect"		????????
    					    ) ,
    Je penche + pour cette option, mais je ne suis pas obligé de transformer le tableau, peut simplement me mouvoir à l'intérieur et balayer le tout serait déjà bcp !

    Qui pourrait me remettre sur le droit chemin, merci à lui....

  2. #2
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Architecture et tableau PHP
    Pour l'instant, je balbutie mais je penche pour ce modèle de donnée:

    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
     
    $fields = array  ( 	"prenom" , array( array(	MUST ,    		"Ce champ est obligatoire"       						) ,
    	                                        array(	MINL , 3    ,   "Respectez la longueur miniale"  						) ,
    						array(	MAXL , 30   ,   "Respectez la longueur maximale" 						) ,
    						array(	TYPE , A€   ,  	"Type incorrect"                 						) ,
    						array( 	LVEL , WARN										 						) 
    										) ,
     
    			'nom'    , array( array( 	MUST ,      	"Ce champ est obligatoire"       						) ,
    					      array( 	MINL , 3,    	"Respectez la longueur miniale"  						) ,
                                                  array( 	MAXL, 30, 		"Respectez la longueur maximale" 						) ,
    					      array( 	TYPE, A€,  		"Type incorrect"                 						) ,
    					      array( 	LVEL , WARN						                 						)				
     
    ===== etc .....										) ,
    Donc une architecture de donnée représentée par un tableau à 3 dimensions... il y a peut être plus simple mais c'est ce que j'ai pour l'instant....

    J'exploite ce tableau avec le code suivant en Associatif:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    foreach ($this->form as $key => $value) 
    {	print("le champ [$key] contient la valeur $value <br/>\n") ;
     
    	foreach ($value as $key1 => $value1)
    	{	print("le champ [[$key1]] contient la valeur $value1 <br/>\n") ;
     
    		foreach ($value1 as $key2 => $value2) 
    		{	print("le champ [[[$key2]]] contient la valeur $value2 <br/>\n") ;
        		}
    	}
    }
    ou en tableau traditionnel:

    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
    				
    $cnt = count($this->form) ;
    for ($i = 0 ; $i < $cnt ; $i++)
    {	print("[".$i."] => " . $this->form[$i] . "<br>\n")  ;
    				
            $cnt1 = count($this->form[$i]) ;
    	for ($j = 0 ; $j < $cnt1 ; $j++)
    	{  // print("[{".$i."]]  <br>\n")  ;
    				
    	   $cnt2 = count($this->form[$i][$j]) ;
    	   for ($k = 0 ; $k < $cnt2 ; $k++)
    	   {  printf("%s%s", $this->form[$i][$j][$k] , "<br>\n")  ;   <== 62
    	   }
    	}
    }
    Mais avec ce code, qui me semble identique, PHP me donne l'erreur suivante en ligne 62:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    21:48:10] PHP Fatal error:  Cannot use string offset as an array in F:\WebSites\test\checkform.php on line 62
    Voilà, où j'en suis, peut être y a t'il quelqu'un qui pourrait me conseiller une autre architecture de données (un peu compliqué je le concède) !

    Merci à tous ceux qui se pencheront sur ce problème

  3. #3
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Bonsoir,

    question bete mais pourquoi ne pas créer des objets dont les propriétés seraient ls valeurs de tes tableaux ?

    Code php : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $prenom = new ClassPerso(MUST, MINL, MAXL, TYPE, LVEL);

    et le constructeur instancies tes propriétés. Ensuite facile pour accéder aux valeurs et surtout plus lisible

  4. #4
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Architecture données et tableau
    C'est en effet une très bonne idée mais alors me reste le souci de grouper les champs d'un même écran....

    Et tu vois cela comment ?

    Merci et bon WE

  5. #5
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Tableau associatif et architecture de donnée
    A 1ère vue, je dégrossis le boulot et vais de pb en question...
    J'ai pour le moment:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    $fields = array  ( 	$prenom new Prénon( array(	MUST ,    		"Ce champ est obligatoire"       						) ,
    	                                              array(	MINL , 3    ,   "Respectez la longueur miniale"  						) ,
    						      array(	MAXL , 30   ,   "Respectez la longueur maximale" 						) ,
    						      array(	TYPE , A€   ,  	"Type incorrect"                 						) ,
    						     array( 	LVEL , WARN										 						) 
    										  ) ,
     
    			 $nom    new Nom ( array(  	MUST ,      	"Ce champ est obligatoire"       						) ,
    						   array( 	MINL , 3,    	"Respectez la longueur miniale"  						) ,
    						   array( 	MAXL, 30, 		"Respectez la longueur maximale" 						) ,
    						   array( 	TYPE, A€,  		"Type incorrect"                 						) ,
    						   array( 	LVEL , WARN						                 						)				
    ) ,
    J'imagine avoir une classe Screen qui contiendrait plusieurs Fields mais chaque field peut avoir un nombre différent de validation...
    La classe Field (comme en C++ si j'ai bonne mémoire) pourrait contenir un nombres différents de règles de validation en fonction du type.... (mais je me trompe peut être pour le C++).... @creuser....
    Voilà mes petits soucis... une suggestion ?

  6. #6
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Architecture de donnée et tableau
    Ou alors je fais une classe différente par type de contrôle.....

    @suivre

  7. #7
    Membre Expert Avatar de Madfrix
    Profil pro
    Inscrit en
    Juin 2007
    Messages
    2 326
    Détails du profil
    Informations personnelles :
    Localisation : France, Gironde (Aquitaine)

    Informations forums :
    Inscription : Juin 2007
    Messages : 2 326
    Par défaut
    Citation Envoyé par ETVigan Voir le message
    reste le souci de grouper les champs d'un même écran....
    Bonjour,

    qu'entends tu par là ?

    Sinon un tableau d'objets non ?

  8. #8
    Membre éclairé Avatar de ETVigan
    Homme Profil pro
    Conseil - Consultant en systèmes d'information
    Inscrit en
    Avril 2010
    Messages
    660
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Conseil - Consultant en systèmes d'information
    Secteur : Finance

    Informations forums :
    Inscription : Avril 2010
    Messages : 660
    Par défaut Architecture données et tableau
    Oui, pour le moment je m'oriente vers un tableau d'object, 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
     
    $form = new Form(	$prenom 	= new Text   	( 	"prenom"	,  	MUST, 	TEXT , 	WARN 	, 3, 30   	) ,
     
    						$nom    	= new Text 		( 	"nom"		,   MUST, 	A€, 	WARN 	, 3, 30 	) ,
     
    						$email  	= new Email 	(	"email"		, 	MUST , 			WARN 	, 3, 30 	) ,
     
    						$phone 		= new Phone  	(   "phone"		, 	MUST , 			WARN	, 10, 10 	) ,   
     
    						$pass 		= new Password  (	"pass" 		, 	MUST , 	ANUM , 	WARN 	, 6 , 8 	) ,    	
     
    						$cpass 		= new Password  (   "cpass" 	, 	MUST , 	ANUM , 	WARN 	,   6 , 8 	) ,
     
    						$type 	    = new DontSel   (   "type"  	,  	MUST , 	 	 	WARN 	,   $type 	) ,
     
    						$area  		= new Textarea  (   "area" 		,	MUST , ANUM€ , 	WARN 	, 10, 500 	) ,
     
    						$little		= new Little   	(   "little" 	,	MUST ,      	WARN 	, 10    	) ,
     
     						$great  	= new Greater 	(   "greater"	, 	MUST ,   	 	WARN 	, 500 		) ,
     
    						$reg		= new RegExp 	(   "regexp" 	,	MUST ,   	 	WARN 	, "" 		) ,
     
    						$dont   	= new DontSel 	(   "dontsel" 	,	MUST ,   	 	WARN 	, 0 		) ,
     
    						$samepass  = new EqualPass  (   "equalpass" ,	MUST ,   	 	WARN 	, $pass  , $cpass 		) ,
     
    						$samemail  = new EqualMail  (   "equalmail" ,	MUST ,   	 	WARN 	, $email , $cemail 		)
    ) ;

    C'est déjà plus clair et sans doute + OOP, je préfère... je dois apprendre !
    Je pense qu'il y a une classe SPL pour se mouvoir dans un tableau...
    @vérifier....

    Merci

Discussions similaires

  1. Réécriture d'adresse, vous avez dit "simple" ?
    Par Olivier Regnier dans le forum OVH
    Réponses: 10
    Dernier message: 31/12/2007, 07h31
  2. [ORA-00947]Vous avez dit bizarre ?
    Par 0xYg3n3 dans le forum Oracle
    Réponses: 0
    Dernier message: 29/09/2007, 17h21
  3. Intel vous avez dit Intel
    Par venomelektro dans le forum OpenGL
    Réponses: 7
    Dernier message: 14/10/2004, 20h25

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