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 :

boucle FOR ou FOREACH [PHP 5.3]


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 boucle FOR ou FOREACH
    Souci de ré-écriture d'un script et remplacement d'une boucle FOR par un FOREACH où j'ai un souci...
    Voici le message PHP
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    [04-Aug-2012 10:15:30] PHP   2. user_error() F:\WebSites\t1\index.php:218
    
    [04-Aug-2012 10:15:30] PHP Catchable fatal error:  Object of class String could not be converted to string in F:\WebSites\t1\index.php on line 75
    
    [04-Aug-2012 10:15:30] PHP Stack trace:
    Et le coding ou la partie A est remplacée par B
    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
    				print("Form Validate[".$i."/".count($this->form)."]" . CRLF) ;
    				print_r($this->form) ;
    PARTIE B
    				foreach($this->form as $key => $value)
    75 ==>				{	    echo "Key: $key; Value: $value<br />\n";
    //						print("Form Validate[".$key."/".$value."]" . CRLF) ;
    //					$this->form[$i]->validateField() ;
    				}
    /*1 PARTIE A
    				for($i = 0 ; $i < $this->cnt ; $i++) 
    				{	print("Form Validate[".$i."/".$this->cnt."]" . CRLF) ;
    					$this->form[$i]->validateField() ;
    				}		
    */
    Le print_r donne ceci!
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    Form Validate[0/2]
    Array ( [0] => String Object ( [fldName:String:private] => prenom [fldMust:String:private] => MUST [fldType:String:private] => [fldError:String:private] => [fldMinl:String:private] => [fldMaxl:String:private] => ) [1] => String Object ( [fldName:String:private] => nom [fldMust:String:private] => MUST [fldType:String:private] => [fldError:String:private] => [fldMinl:String:private] => [fldMaxl:String:private] => ) )
    Ce qui signifie pour moi que les 2 objets sont bien là (Form Validate[0/2] mais que leurs propriétés sont PRIVATES
    Est ce mon problème ?

    J'ai remplacé le PRIVATE par PROTECTED dans le constucteur de la class STRING mais cela ne change rien...
    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
    		class String //1 implements MethodList
    		{	protected $fldName, $fldMust, $fldType, $fldError, $fldMinl, $fldMaxl ;
    
    			function __construct($fldName, $fldMust, $fldType, $fldError, $fldMinl, $fldMaxl)
    			{	$this->fldName  = $fldName  ;
    				$this->fldMust  = $fldMust  ;
    				$this->fldName  = $fldName  ;
    				$this->fldName  = $fldName  ;
    				$this->fldName  = $fldName  ;
    				$this->fldName  = $fldName  ;
    
    				print("String[__construct][$fldName]" . CRLF ) ;
    			}
    				
    /**
    * 	STRING: initField
    *
    */			function initField()
    			{   print("String[initField]" . CRLF) ;
    			}
    			
    /**
    * 	FORM: validateField
    *
    */			
    			function validateField()
    			{   $val = true ;
    			
    				print("String[validateField]" . CRLF) ;
    				return($val) ;
    			}
    				
    /**
    * 	STRING: isFilled
    *
    */
    			function isFilled()
    			{ 	$fi = (isset( $_POST["$this->fldName"] ) AND ($_POST["$this->fldName"] != NULL) );
    				print("String[isFilled][$fi]" . CRLF) ;
    				return( $fi ) ; 
    			}
    		}
    Merci de m'éclairer....
    Bon WE

    J'ai effectué un changement qui m'interpelle car me confond...
    La boucle fonctionne mais plus le PRINT_T

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
     
    				print_r($this->form . CRLF) ;
    				foreach($this->form as $key => $value)
    				{	  echo "Key: $key<br />\n";
    //						print("Form Validate[".$key."/".$value."]" . CRLF) ;
    //					$this->form[$i]->validateField() ;
    				}
    Ce qui donne pour les prints:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    Form Validate[0/2]
    Array    <== PLUS RIEN ICI
    Key: 0
    Key: 1
    FORM OK

  2. #2
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Peu être comme ca ?

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
    foreach($this->form  as $id ){	
    foreach($id as $key => $value){	
        echo "Key: $key; Value: $value<br />\n;
    }
    }

  3. #3
    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 Autre question
    Merci de ta réponse,
    Je suis entrain de tester le foreach que tu proposes... un peu comme un tableau à 2 dimensions ce qui n'est pas totalement faux...
    La 1ère colonne est le n° de l'objet
    La 2ieme l'objet lui même

    Pour le moment, cela donne ce que je souhaite - après tâtonnement comme ceci
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
     
    print("Form[validateForm]" . CRLF) ;
    print_r($this->form . CRLF) ;
    foreach($this->form as $key => $value)
    {	print("Form Validate[".$i++."/".count($this->form)."]" . CRLF) ;
    	echo "Key: $key<br />\n";
    	$value->validateField() ;
    }
    MAIS JE N'AI TJS RIEN AU NIVEAU DU PRINT_T

    Merci encore

  4. #4
    Membre émérite

    Profil pro
    Inscrit en
    Juin 2007
    Messages
    748
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2007
    Messages : 748
    Par défaut
    Je n'ai pas vu ou tu fais apparaitre la variable $i; mais si comme tu le propose elle existe , il suffit de faire
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    print_r($this->form[$i]);
    foreach($this->form[$i] as $key => $value)

    Note : à non, tu fais $i++, donc ca marchera pas, mais tu peu imbriquer le for, et le foreach, ou utiliser les deux foreach... ) pour avoir foreach($this->form[$i] as $key => $value)


    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    for($i = 0 ; $i <count($this->form) ; $i++) {
    foreach($this->form[$i] as $key => $value){}
    }

  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 variable $I
    $i était utilisé dans l'ancienne écriture

    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
    			function validateForm()
    			{   $i = 0 ;
    				
    				print("Form[validateForm]" . CRLF) ;
    				print_r($this->form . CRLF) ;
    				foreach($this->form as $key => $value)
    				{	    print("Form Validate[".$i++."/".count($this->form)."]" . CRLF) ;
    						echo "Key: $key<br />\n";
    						$value->validateField() ;
    				}
    /*1   ANCIEN
    				for($i = 0 ; $i < $this->cnt ; $i++) 
    				{	print("Form Validate[".$i."/".$this->cnt."]" . CRLF) ;
    					$this->form[$i]->validateField() ;
    				}		
    */
    				return($this->isFormValid()) ;
    			}
    Elle n’apparaît que dans la nouvelle que pour raison de traçage...

    Merci

  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 Autre question
    Juste une question, dans la fonction initField, je souhaiterai remettre la value d'un champ à NULL et non l'instance de ce champ.

    Je ne vois que la solution de remettre le $_POST[du champ en question] à null

    Je pense que cette pratique n'est pas orthodoxe mais n'en voit pas une autre...

    Voici mon coding:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    */			function initField()
    			{   if ($this->getDebug())
    					print("String[initField]" . CRLF) ;
    				
    				print_r($_POST . CRLF) ;
    				echo  "Before ===>" . $this->fldName . $_POST[".$this->fldName."] . CRLF ;
    				$_POST["$this->fldName"] = NULL ;
    				echo  "After  ===>" . $this->fldName . $_POST["$this->fldName"] . CRLF ;
    			}
    Remarque; le print_r du $_post ne donne rien pourtant je passe par là puisque String[initField] est affiché...

    Merci

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. [Objective-C] boucle for (foreach)
    Par moshehayun dans le forum Objective-C
    Réponses: 3
    Dernier message: 12/05/2011, 10h49
  2. [PHP 5.0] boucle for dans foreach
    Par stomerfull dans le forum Langage
    Réponses: 6
    Dernier message: 15/01/2010, 11h57
  3. Réponses: 18
    Dernier message: 25/07/2007, 12h34
  4. [Swing][boucles] for, do, if .....comment faire simple?
    Par chastel dans le forum AWT/Swing
    Réponses: 7
    Dernier message: 02/05/2004, 22h49
  5. [langage] boucle "for" modification du pas
    Par K-ZimiR dans le forum Langage
    Réponses: 4
    Dernier message: 29/04/2004, 11h54

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