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 :

[Système] problème d'exécution d'une boucle


Sujet :

Langage PHP

  1. #1
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 69
    Points
    69
    Par défaut [Système] problème d'exécution d'une boucle
    Bonsoir à tous,

    J'ai un problème avec une boucle toute simple, je n'arrive pas a comprendre pourquoi elle est infinie :
    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
     
    while($j!=$dernierjour)
    		{
    			$chaine .= '<tr><td></td>';
    			while($k<7)
    			{
    				if($j==0) {
    					for($i=0;$i<($numjour-1);$i++) {
    						$chaine .= '<td></td>';
    						$k = ($numjour-2);
    					}
    				}
    				echo $k;
    				$chaine .= '<td>'.$j.'</td>';
    				$k++;
    			}
    			$j++;
    			$chaine .= '</tr>';
    		}
    $dernierjour est égal a 30.
    J'ai l'impression qu'il n'aieme pas trop le $k = ($numjour-2);
    pouvez vous m'aider ???
    merciiiiiiiiiiiii

  2. #2
    Membre chevronné
    Avatar de ska_root
    Homme Profil pro
    Développeur informatique
    Inscrit en
    Août 2005
    Messages
    1 203
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 55
    Localisation : France

    Informations professionnelles :
    Activité : Développeur informatique
    Secteur : Service public

    Informations forums :
    Inscription : Août 2005
    Messages : 1 203
    Points : 1 839
    Points
    1 839
    Par défaut
    Salut,

    ou tu ne nous donnes pas toutes les variables ou tu oublies de les initialiser...

    a quoi correspond $numjour ? ou est initialisé $k ?

    le problème c'est que $k est inconnu donc il ne peut pas faire le bloc du while...

    de plus, ton tableau html va être incohérent, car sur la première ligne ($j==0) tu vas mettre plus de cellules que dans les autres...
    ou alors il aurait fallut mettre un colspan sur les lignes suivantes du tableau d'une valeur du nombre de cellule ajoutées dans cette première ligne.

    quant au $k = $numjour -2, difficile de te dire quelque chose tant que l'on ne sait pas quelle valeur à $numjour.
    imaginons que $numjour vaut 7 et que $k vaut 0, la boucle devrait faire 6 tours,
    au dernier tour $k vaut 5 (comme aux précédents d'ailleurs ), puis tu l'incremente de 1 donc 6,
    vu qu'il doit aller jusqu'a 6 il fera faire encore un tour a while, $j vaut encore 0 a ce moment, donc $k va toujours être à 5 puis 6
    d'où la rebelote à l'infini...

    bref, donnes plus d'infos pour qu'on puisse t'aider.


  3. #3
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Salut

    Mêmes remarques, nous n'avons aucune des valeurs de départ de tes variables. Difficile de t'aider :/
    Cependant, je vais te donner mes remarques :
    • Tu sais dans quel sens $j doit varier donc je te recommande de faire la comparaison de cette manière :
      Code : Sélectionner tout - Visualiser dans une fenêtre à part
      while($j < $dernierjour)
      Ainsi, c'est beaucoup plus clair dans ton code et, surtout, c'est beaucoup moins sujet au problème de la boucle infinie.
    • Tu imbriques bizarrement tes variables... Voici ce que tu as :
      [list:dcdf54bde3]
    • $j
      [list:dcdf54bde3]
    • $k
      [list:dcdf54bde3]
    • $i
    [/list:u:dcdf54bde3][/list:u:dcdf54bde3]
    Habituellement, un programmeur prend les lettres dans l'ordre :
    • $i
      [list:dcdf54bde3]
    • $j
      [list:dcdf54bde3]
    • $k
    [/list:u:dcdf54bde3][/list:u:dcdf54bde3][*]Pour terminer, le cas de $k...
    Tu boucles tant qu'il est inférieur à 7. Ok mais tu ne le décrémentes pas si $j vaut zéro (tu lui assignes une valeur précise, en ce cas).
    Par ailleurs, un coup tu décrémentes $k et un coup tu le modifies arbitrairement : ce n'est pas propre du tout, tu ne sais pas exactement comment varie $k et je suppose que ta boucle infinie est due à cela.
    Pour autant que je sache, a priori, l'affectation $k = ($numjour-2) n'augmente pas forcément la valeur de $k. De plus, dans ta boucle for, tu affectes un certain nombre de fois la même valeur à $k (c'est-à-dire $numjour-2), ce qui ne sert à rien.[/list:u:dcdf54bde3]

    En gros, c'est tant mieux si personne ne comprend ce que j'ai écrit : cela voudra dire que ton code est trop fouilli, qu'il est trop difficile de s'y repérer et qu'il faut absolument le modifier.

  4. #4
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 69
    Points
    69
    Par défaut
    Autant pour moi, c'est vrai que j'étais naze sur ce coup car je ne vous ai rien décri pour que vous puissiez m'aider. Je vais essayer de vous décrir un peu plus le but de cette boucle :
    elle est contenue dans une fonction destinée à afficher un calendrier, donc un tableau avec 7 colonnes et autant de lignes que nécessaire. Donc j'utilise des fonctions que j'ai prédéfinies pour récupérer le dernier jour et le nom du premier jour du mois et de l'année passés en paramètres.
    Je vais vous donner l'intégralité de la fonction, afin que vous puissiez me dire si l'initialisation de mes variables est correctes etc ...
    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
    // fonction qui crée le tableau du calendrier
    	function afficheCalendrier($lemois,$lannee, $lesNomsMois, $lesjours)
    	{
    		// on mémorise le premier et le dernier jour du mois
    		$premierjour = '01'; // le premier jour du mois
    		$dernierjour = getJourDernierDuMois($lemois, $lannee); // fonction qui retourne le dernier jour du mois (28,29,30 ou 31)
    		// on récupère le numéro du premier jour dans la semaine (1 à 7)
    		$numjour = $lesjours[getNomPremierDuMois($lemois, $lannee)];
    		// on enregistre l'entête du tableau
    		$chaine = '<table border="1" class="calendrier"><tr><td colspan="8" >'.$lesNomsMois[$lemois].'</td></tr>';
    		$chaine .= '<tr><td></td><td>L</td><td>Ma</td><td>Me</td><td>J</td><td>V</td><td>S</td><td>D</td></tr>';
    		// initialisation des variables pour le remplissage du calendrier
    		$i = 0;
    		$j = 0;
    		//
    		while($i<$dernierjour)
    		{
    			$chaine .= '<tr><td></td>';
    			while($j<7)
    			{
    				if($i==0) {
    					for($k=0;$k<($numjour-2);$k++) {
    						$chaine .= '<td></td>';
    					}
    					$k = ($numjour-2);
    				}
    				$i++;				
    				if ($i<$dernierjour)
    				{
    					$chaine .= '<td>'.$i.'</td>';
    				}
    				else $chaine .= '<td></td>';
    				$j++;
    			}
    			$j=0;
    			$chaine .= '</tr>';
    		}
    		$chaine .= '</table>';
    		return $chaine;
    	}
    Je pense que le problème, comme l'a souligné kirkis, vient de là :
    Pour autant que je sache, a priori, l'affectation $k = ($numjour-2) n'augmente pas forcément la valeur de $k
    Enfin, je tiens à préciser que les valeurs retournées par mes fonctions ont été testées avec des echo, en mettant en comm certaines parties, et en toute rigueur, elles semblent être correctes.
    Merci de l'attention que vous portez à mon problème, c'est très gentil

  5. #5
    En attente de confirmation mail
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    77
    Détails du profil
    Informations personnelles :
    Localisation : Belgique

    Informations forums :
    Inscription : Mars 2005
    Messages : 77
    Points : 69
    Points
    69
    Par défaut
    Ah, j'ai testé vos solutions et vous aviez raison.
    Le pb venait de là, car mon k ne vairait pas finalement:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    for($i=0;$i<($numjour-1);$i++) {
                      $chaine .= '<td></td>';
                      $k = ($numjour-2);
                   }
                }
    En tout cas merci bcp, le problème est résolu mais je ne sais pas comment on fait pour le signaler.

  6. #6
    Membre confirmé Avatar de amika
    Profil pro
    Inscrit en
    Septembre 2004
    Messages
    498
    Détails du profil
    Informations personnelles :
    Localisation : Canada

    Informations forums :
    Inscription : Septembre 2004
    Messages : 498
    Points : 464
    Points
    464
    Par défaut
    cliquer en bas sur le bouton résolu

    _____________________
    Il n'y a pas de choses urgentes, il n'y a que des choses en retard

  7. #7
    Rédacteur

    Avatar de Yogui
    Homme Profil pro
    Directeur technique
    Inscrit en
    Février 2004
    Messages
    13 721
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Yonne (Bourgogne)

    Informations professionnelles :
    Activité : Directeur technique

    Informations forums :
    Inscription : Février 2004
    Messages : 13 721
    Points : 29 985
    Points
    29 985
    Par défaut
    Heureux d'avoir fait au moins une BA dans la journée...
    Au passage, mon pseudo a changé de Kirkis à Yogui.

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

Discussions similaires

  1. [Système] Problème d'exécution .sh
    Par sebeni dans le forum Langage
    Réponses: 9
    Dernier message: 24/01/2006, 14h17
  2. Problème de SCANF dans une boucle WHILE
    Par FidoDido® dans le forum C
    Réponses: 4
    Dernier message: 30/12/2005, 17h42
  3. [Conception] Problème de test dans une boucle while
    Par Cyrius dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 26/11/2005, 18h07
  4. Réponses: 5
    Dernier message: 19/04/2005, 08h50
  5. Problème avec TNMSMTP dans une boucle.
    Par Orgied dans le forum Web & réseau
    Réponses: 3
    Dernier message: 07/04/2004, 10h19

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