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 :

Exploration tabeau avec foreach limitée à deux éléments [PHP 7]


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut Exploration tabeau avec foreach limitée à deux éléments
    Bonjour
    En désespoir de recherche, je fais appel à vos connaissances. Merci à ceux qui voudront bien répondre.

    Voilà la partie de mon code incriminé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
    16
    17
    $frais = Lecture_DonneesFrais($stripe, $datedeb, $datefin, $stripeaccount ='');
    print_r ($frais);
    foreach ($frais as $key => $Mtt) {
    print '<p>foreach - key :'.$key.'----Mtt:'.$Mtt;
    	// Mois des frais 
    	$mois = $key - ((int)($key/100))*100;
    	$annee = ((int)($key/100));	
    	$label ='Frais Stripe '.$MoisFR[(int)$mois].' '.$annee;
     
    	// recherche écriture frais
    	$amount = 0;		$rowid = 0;		$LibErrVir = '';
    	$ret =  ExisteFrDol($label , $amount, $rowid, $LibErrVir);
     
    	print '<tr class="oddeven">';	
    	AfficherLigneFrais ($label,  $Mtt, $amount, $rowid, $libErrVir);
    	print "</tr>\n";
    } //Foreach
    Voilà le résultat

    Nom : image.jpg
Affichages : 173
Taille : 80,5 Ko
    Pourquoi le tableau $frais ayant 4 éléments (affiché avant le foreach) , le foreach n'en trouve que deux?
    Et c'est vrai, qu'il y a 3,4 lignes ou plus.

    Ai-je été claire?
    Claude

  2. #2
    Expert éminent sénior
    Avatar de mathieu
    Profil pro
    Inscrit en
    Juin 2003
    Messages
    10 235
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Juin 2003
    Messages : 10 235
    Points : 15 532
    Points
    15 532
    Par défaut
    ce sont peut-être les appels au fonctions "ExisteFrDol" ou "AfficherLigneFrais" qui arrêtent le script.
    faites des affichages avant ces appels pour voir où ça s'arrête.
    et regardez aussi le code html généré au lieu du résultat de l'affichage.

  3. #3
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut
    @Mathieu, merci pour la réponse.
    Je joins le code des deux fonctions.

    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 ExisteFrDol( $label, &$amount, &$rowid, &$libFrDol )
    {
    	global $conf, $db, $langs;
     
    		$sql = "SELECT b.rowid, amount ";
    		$sql .="bank as b ";
    		$sql .= "WHERE b.label like '%" .$label ."%'";
    		$sql .= " AND fk_account = 7";
     
    		$libFrDol = '' ; $amount = 0.00; 	$rowid='';
            $resql=$db->query($sql);
    	if ($resql)
            {
                 $num = $db->num_rows($resql);
                if ($num == 1)
                {	
                    $obj = $db->fetch_object($resql);		
    				$amount = $obj->amount;	
    				$rowid = $obj->rowid;
    			}
    			elseif ($num > 1) 		{	
    				$libFrDol = $num.' ecritures de frais';
    			}
    		}
    		else {
    			dol_syslog(":sql=".$sql, LOG_ERR);
    			return -2;
    		}
    		return 1;		
    } //ExisteFraisDol
    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
    function	AfficherLigneFrais ($label,  $montantStp, $montantFr, $rowidFr, $libErrFr)
    {	
    	global $langs, $db;
     
    	print '<td>'.$label.'</td>';
    print '<p> 	AfficherLigneFrais - label:'.$label;
    	// Amount
    	print '<td class="right">';
    	print price($montantStp , 0, '', 1, -1, -1, '€');
    	print "</td>";
     
    	// Ecritude 
    	print '<td class="right">';
    	if (!empty($rowidFr)) 		 {
    		if ($montantStp <> $montantFr ) $color="style='color:Red'";
    		else $color='';
    			$url = '/bankline.php?rowid='.$rowidFr.'&save_lastsearch_values=1';;
    			if (!empty($LibErrFr)) $text = "title=Il existe ".$LibErrFr;
    			else $text = '';
    			print "<a href='".$url." ".$text."'fas fa-receipt infobox-bank_account' style=''>";
    			print " <span title='Montant:".price($montantFr , 0, '', 1, -1, -1, '€')." ".$color.">".$rowidFr." </span>".img_picto('','account')." ";
     			print "</a>\n";
    	}
    	print "</td>";
     
    	// CheckBox pour choix ecriture à créer
    	print "<td>";
    	if (empty($rowidFr))	print '<input class="flat checkselection_" title = "'.$titre.'"name="tabcheck['.$mois.']" type="checkbox" '.$checked.' value="'.$mois.'" size="1" >';
     
    	print '</td>'; 
    } // Afficher
    Et j'ai une question : comment est-il possible d'arrêter une boucle foreach, à partir d'une fonction appelée à l'intérieur, dans laquelle on ne connait pas le tableau?

  4. #4
    Membre éclairé Avatar de ypcman
    Homme Profil pro
    Retraité codeur !
    Inscrit en
    Janvier 2011
    Messages
    597
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Maine et Loire (Pays de la Loire)

    Informations professionnelles :
    Activité : Retraité codeur !
    Secteur : Aéronautique - Marine - Espace - Armement

    Informations forums :
    Inscription : Janvier 2011
    Messages : 597
    Points : 886
    Points
    886
    Par défaut
    Bonjour.
    Le programme s'arrête t'il après la boucle foreach ? Il faudrait faire afficher un commentaire après la ligne 17 pour vérifier que le code continu après le foreach ou fournir l'erreur générée
    Participez vous aussi !
    Message utile
    Discussion résolue

  5. #5
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut
    @ypcman
    Merci pour le tuyau. Effectivement, je n'avais pas vu que le programme n'affichait plus le dernier bouton en fin de page, preuve que c'est un plantage.
    Je vais chercher.
    Je mettrai le top résolu quand j'aurai trouvé et indiqué ici, le problème et sa solution. A moins que je revienne avec une question !!!
    Encore Merci,
    Claude

  6. #6
    Membre régulier
    Femme Profil pro
    Développeur informatique
    Inscrit en
    Janvier 2014
    Messages
    89
    Détails du profil
    Informations personnelles :
    Sexe : Femme
    Localisation : France, Gard (Languedoc Roussillon)

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Tourisme - Loisirs

    Informations forums :
    Inscription : Janvier 2014
    Messages : 89
    Points : 83
    Points
    83
    Par défaut
    Salut
    Effectivement, il y avait une erreur dans la fonction AfficherLigneFrais qui faisait planter le HTML, sans avertissement :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    print "<a href='".$url." ".$text."'fas fa-receipt infobox-bank_account' style=''>";
    			print " <span title='Montant:".price($montantFr , 0, '', 1, -1, -1, '€')." ".$color.">".$rowidFr." </span>".img_picto('','account')." ";
     			print "</a>
    Aller title attribut d'un span, qui l'a fait? C'est elle!! Cela n'avait rien à voir avec foreach

    Voilà la correction
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    		print "<a href='".$url." ".$text."'fas fa-receipt infobox-bank_account' ";
    		$textTitre = 'Montant:'.price($montantFr , 0, '', 1, -1, -1, '€');
    		print "  title='".$textTitre ."' ".$color.">";
    		print $rowidFr;
    		print " ".img_picto('','account')." ";
    		print "</a>\n";
    Merci à tous
    Claude

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

Discussions similaires

  1. Condition à deux éléments avec un opération logique ||
    Par ciolvic dans le forum Général JavaScript
    Réponses: 4
    Dernier message: 07/05/2019, 16h39
  2. Liste avec une limite d'éléments sélectionnés
    Par lmplmp dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 04/08/2016, 15h56
  3. foreach limité avec compteur?
    Par Invité(e) dans le forum Langage
    Réponses: 2
    Dernier message: 07/01/2011, 14h47
  4. Deux listbox liée avec ajout/suppression d'élément
    Par slideveloppeur2006 dans le forum ASP.NET
    Réponses: 4
    Dernier message: 10/10/2008, 16h35
  5. Faire une liste avec deux éléments par ligne
    Par pc.bertineau dans le forum Mise en page CSS
    Réponses: 18
    Dernier message: 12/04/2007, 14h47

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