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 :

Code parcouru 2 fois au lieu d'une.


Sujet :

Langage PHP

  1. #1
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut Code parcouru 2 fois au lieu d'une.
    Bonjour,
    La portion de code suivante fait partie d'un contrôleur destiné à préremplir un formulaire multiple, c'est à dire qu'il contient un nombre variable de sous-formulaires identiques.
    Le sous-formulaire contient une liste d'options. Les listes sont construites à partir d'une classe largement éprouvée et maintes fois testée. Je dois avoir un problème dans mes boucles foreach car les options sont répétées selon la séquence suivante: 1,1,2,2,2,4 au lieu de 1,2,4. Où est problème?
    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
    		$inData = getUsersOfSubscriber($nSubscriberId);
    		if (!empty($inData)){
    			foreach($inData as $key=>$aSingle){
    				$post[$key] = $aSingle;
    				// Buttons for each childform
    				$echo[$key]['btn']['savElem']	= getDBText($language,72);
    				$echo[$key]['btn']['delElem']	= getDBText($language,73);
    				$echo[$key]['btn']['password']	= getDBText($language,140);
    				// Common buttons
    				$echo['btn']['newElem']	= getDBText($language,121);
    				// Labels
    				$echo['labels']['id']			= getDBText($language,131);
    				$echo['labels']['login']		= getDBText($language,132);
    				$echo['labels']['lastname']		= getDBText($language,133);
    				$echo['labels']['firstname']	= getDBText($language,134);
    				$echo['labels']['email']		= getDBText($language,135);
    				$echo['labels']['rightlevel']	= getDBText($language,136);
    				$echo['labels']['banned']		= getDBText($language,137);
    				// Title attributes for too long input values
    				$echo['titles'] = [];
    				foreach($aSingle as $k=>$value){
    					$echo['titles'][$k] = setTitle($value,27); // voir la valeur
    				}
    				unset($k,$value);
    				// Rightlevel list
    				$lstRightlevel= new OptListSelect($key.'[rightlevel]');
    				$lstRightlevel->addOption(new OptListOption('', '', ['label'=>getDBText($language,16)]));
    				if (!empty($inData)){
    					foreach($inData as $aUser){
    						var_dump($aUser['rightlevel']);
    						$sToSelect = ($aUser['rightlevel'] == $aSingle['rightlevel']) ? true: false;
    						$options = ($sToSelect) ? ['selected'=>'selected']: [];
    						$lstRightlevel->addOption(new OptListOption($aUser['rightlevel'], getDBText($language,124+$aUser['rightlevel']), $options));
    					}
    				}
    				// Fieldvalues
    				$echo[$key]['fields'][1] = "<input type='text' name='{$key}[id]' value='{$aSingle['id']}' readonly>";
    				$echo[$key]['fields'][2] = "<input type='text' name='{$key}[login]' value='{$aSingle['login']}'>";
    				$echo[$key]['fields'][3] = "<input type='text' name='{$key}[lastname]' value='{$aSingle['lastname']}'>";
    				$echo[$key]['fields'][4] = "<input type='text' name='{$key}[firstname]' value='{$aSingle['firstname']}'>";
    				$echo[$key]['fields'][5] = "<input type='text' name='{$key}[email]' value='{$aSingle['email']}'>";
    				$echo[$key]['fields'][6] = (string) $lstRightlevel;
    				$banned = (!empty($aSingle['banned'])) ? ' checked': '';
    				$echo[$key]['fields'][7] = "<input type='checkbox' name='{$key}[banned]' value='1'$banned>";
    				unset($aUser,$rightlevel);
     
    				// Include viewform
    				require("views/$language/setUser.php");
    			}
    			unset($key,$aSingle);
    		}
    Avec le rendu suivant:
    Code html : 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
    <form method="post" class="settings" action="frontend/settings.php">
    	<input type="hidden" id="id0" name="0[id]" value="2">
    	<input type="hidden" id="order0" name="0[order]">
     
    	<label><span>Clef</span><input type='text' name='0[id]' value='2' readonly></label><br>
    	<label><span>Identifiant</span><input type='text' name='0[login]' value='HerveC'></label><br>
    	<label><span>Nom</span><input type='text' name='0[lastname]' value='de la Caze'></label><br>
    	<label><span>Prénom</span><input type='text' name='0[firstname]' value='Hervé'></label><br>
    	<label><span>Courriel</span><input type='text' name='0[email]' value='herve.delacase@sirep.xx'></label><br>
    	<label><span>Niveau d'accès</span><select name='0[rightlevel]'><option value='' label='&lt; ---- &gt;'></option><option value='1' selected='selected'>Invité</option><option value='1' selected='selected'>Invité</option><option value='2'>Utilisateur</option><option value='2'>Utilisateur</option><option value='2'>Utilisateur</option><option value='4'>Webmestre</option></select></label><br>
    	<label><span>Banni</span><input type='checkbox' name='0[banned]' value='1' checked></label><br>
    	<p>
    		<input type="submit" name="save" value="Enregistrer">
    		<input type="submit" name="del" value="Supprimer">
    		<input type="submit" name="reset" value="Initialiser mot de passe">
    	</p>
    </form>
    <hr><form method="post" class="settings" action="frontend/settings.php">
    	<input type="hidden" id="id1" name="1[id]" value="6">
    	<input type="hidden" id="order1" name="1[order]">
     
    	<label><span>Clef</span><input type='text' name='1[id]' value='6' readonly></label><br>
    	<label><span>Identifiant</span><input type='text' name='1[login]' value='sirep'></label><br>
    	<label><span>Nom</span><input type='text' name='1[lastname]' value='Guest'></label><br>
    	<label><span>Prénom</span><input type='text' name='1[firstname]' value='Guest'></label><br>
    	<label><span>Courriel</span><input type='text' name='1[email]' value='guest.guest@sirep.xx'></label><br>
    	<label><span>Niveau d'accès</span><select name='1[rightlevel]'><option value='' label='&lt; ---- &gt;'></option><option value='1' selected='selected'>Invité</option><option value='1' selected='selected'>Invité</option><option value='2'>Utilisateur</option><option value='2'>Utilisateur</option><option value='2'>Utilisateur</option><option value='4'>Webmestre</option></select></label><br>
    	<label><span>Banni</span><input type='checkbox' name='1[banned]' value='1'></label><br>
    	<p>
    		<input type="submit" name="save" value="Enregistrer">
    		<input type="submit" name="del" value="Supprimer">
    		<input type="submit" name="reset" value="Initialiser mot de passe">
    	</p>
    </form>
    <hr><form method="post" class="settings" action="frontend/settings.php">
    	<input type="hidden" id="id2" name="2[id]" value="3">
    	<input type="hidden" id="order2" name="2[order]">
     
    	<label><span>Clef</span><input type='text' name='2[id]' value='3' readonly></label><br>
    	<label><span>Identifiant</span><input type='text' name='2[login]' value='GomezE'></label><br>
    	<label><span>Nom</span><input type='text' name='2[lastname]' value='Gomez'></label><br>
    	<label><span>Prénom</span><input type='text' name='2[firstname]' value='Enrico'></label><br>
    	<label><span>Courriel</span><input type='text' name='2[email]' value='enrico.gomez@sirep.xx'></label><br>
    	<label><span>Niveau d'accès</span><select name='2[rightlevel]'><option value='' label='&lt; ---- &gt;'></option><option value='1'>Invité</option><option value='1'>Invité</option><option value='2' selected='selected'>Utilisateur</option><option value='2' selected='selected'>Utilisateur</option><option value='2' selected='selected'>Utilisateur</option><option value='4'>Webmestre</option></select></label><br>
    	<label><span>Banni</span><input type='checkbox' name='2[banned]' value='1'></label><br>
    	<p>
    		<input type="submit" name="save" value="Enregistrer">
    		<input type="submit" name="del" value="Supprimer">
    		<input type="submit" name="reset" value="Initialiser mot de passe">
    	</p>
    </form>

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 101
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 101
    Points : 8 211
    Points
    8 211
    Billets dans le blog
    17
    Par défaut
    Tu boucles 2 fois sur $inData :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    foreach($inData as $key=>$aSingle){
    	...
    	foreach($inData as $aUser){
    		...
    Dans ton 2nd foreach() tu auras autant de <option> qu'il y a d'éléments dans $inData.

    Si dans ta 2e boucles tu ne veux récupérer que des niveaux d'accès alors il faudra dédoublonner $inData à ce niveau.

    Ou bien mieux, faire une requête spécifique qui récupère tous les niveaux d'accès possibles.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre éclairé
    Homme Profil pro
    Ingénieur en électrotechnique retraité
    Inscrit en
    Décembre 2008
    Messages
    1 579
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 72
    Localisation : France, Bas Rhin (Alsace)

    Informations professionnelles :
    Activité : Ingénieur en électrotechnique retraité

    Informations forums :
    Inscription : Décembre 2008
    Messages : 1 579
    Points : 804
    Points
    804
    Par défaut
    Merci. En fait ma boucle intérieure n'était pas bonne du tout.
    J'ai remplacé les lignes 28 à 35 par ceci:
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    				for ($i=1;$i<5;$i++){
    					$sToSelect	= ($i == $aSingle['rightlevel']) ? true: false;
    					$options	= ($sToSelect) ? ['selected'=>'selected']: [];
    					$lstRightlevel->addOption(new OptListOption($i, getDBText($language, 124+$i), $options));
    				}
    Tout fonctionne.

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

Discussions similaires

  1. fonction qui se lance deux fois au lieu d'une
    Par nagyp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 09/08/2020, 10h38
  2. [Toutes versions] Bouton ActiveX qui demandent à être cliqués deux fois au lieu d'une
    Par DarkGriffin dans le forum Macros et VBA Excel
    Réponses: 3
    Dernier message: 28/05/2020, 19h37
  3. [MySQL] Requête INSERT qui s'exécute 3 fois au lieu d'une
    Par Marc22 dans le forum PHP & Base de données
    Réponses: 4
    Dernier message: 11/03/2011, 00h05
  4. Réponses: 0
    Dernier message: 04/03/2011, 14h26

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