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 :

[Tableaux] Comment débogguer un code PHP


Sujet :

Langage PHP

  1. #1
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut [Tableaux] Comment débogguer un code PHP
    Bonjour,

    J'ai ce code ci
    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
     
    ...
    if ($_POST[PJour]==1)  // si calendrier mise à jour le 1er jour
    	{
    	    CreationCalendrier($_POST[CodeMois], $_POST[PJour], $mjour, $Libelle);
    	}
    	else // si calendrier mise à jour au x jour > 1 
    	{
    	 	// recherche du nombre de jour à reculer
    		for ($i=1;$i<$_POST[PJour];$i++)
    		{
    		 	$NbreRemote=$NbreRemote+1;
    		}
    		// recherche du libellé jour grégorien correspondant au 1er jour H
    		$JourDebut=$mjour-$NbreRemote;
    		$LibJourPrec=$Libelle;
     
    		for ($jp=$_POST[PJour];$jp=$JourDebut;$jp--)
    		{
    		 	$Trouver=mysql_fetch_array(mysql_query("Select * From hjour Where JourSuivant='$LibJourPrec'"));
    	 		$LibJourPrec=$Trouver['LibelleJour'];
    		}
    		CreationCalendrier($_POST[CodeMois], 1, $JourDebut, $LibJourPrec);
    	}
    ...
    Lorsque ma variable $_POST[PJour] vaut 1 tout se passe bien.
    Mais quand je rentres dans la partie Else, j'ai mon hourglass qui tourne en rond comme si je suis dans un boucle infini ou que j'ai un plantage. Non seulement je ne change pas de page mais rien ne se passe.

    Je voudrais savoir d'abord si mon code est correcte. Ensuite est ce qu'il existe un moyen d'exécuter le code pas à pas pour voir ce qui se passe.

    Merci
    Amicalement

  2. #2
    Membre habitué Avatar de kivan666
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 177
    Points
    177
    Par défaut
    cast la variable POST dans un int :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    $nbjour=(int)$_POST['PJour'];
    avant de faire ton for, ca vient peut-être de la.
    en effet si ton POST est de type alphanumérique il est possible que cela empeche sa comparaison avec ton $i

  3. #3
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    J'ai essayé

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
     
    ...
    else // si calendrier mise à jour au x jour > 1 
    	{
    	 	// recherche du nombre de jour à reculer
    		$nbjour=(int)$_POST['PJour'];
    		for ($i=1;$i<$nbjour;$i++)
    		{
    		 	$NbreRemote=$NbreRemote+1;
    		}
    Mais j'ai le même comportement.
    Amicalement

  4. #4
    Membre habitué Avatar de kivan666
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 177
    Points
    177
    Par défaut
    bah pour débugger qu'une seule solution... fait un

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    echo "$i<$nbjour";
    dans ta boucle for et tu verras bien pourquoi cela tourne dans le vide...

  5. #5
    Membre habitué Avatar de kivan666
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 177
    Points
    177
    Par défaut
    enfin reflexion faite c'est ta deuxième boucle qui doit bugger, mais j'ai du mal à saisir ce que tu essaye d'y faire...

  6. #6
    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

    Un problème vient de la syntaxe de tes variables, il faudrait écrire $_POST['PJour'] et non $_POST[PJour]

  7. #7
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par kivan666
    bah pour débugger qu'une seule solution... fait un
    echo "$i<$nbjour";
    dans ta boucle for et tu verras bien pourquoi cela tourne dans le vide...
    Je veux bien le mettre mais puisque je ne soit même pas de la page en cours, je ne verrais rien du tout !

    c'est ta deuxième boucle qui doit bugger, mais j'ai du mal à saisir ce que tu essaye d'y faire...
    Eh bien pour comprendre prenons jour d'aujourdhui qui est Lundi. Si je recule de 5 jours, cette deuxieme boucle me permet de retrouve le jour correspondant. voila ce que fait cette boucle
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
     
    soit VarJour='Lundi'
    Pour j=5 a 1 pas -1
           VarJour=RechercheJour Précedent(VarJour)
    Fin pour
    Voila. J'espères que c'est clair maintenant.
    Amicalement

  8. #8
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Salut

    Un problème vient de la syntaxe de tes variables, il faudrait écrire $_POST['PJour'] et non $_POST[PJour]
    J'ai essayé aussi mais ca n'y change rien.
    Amicalement

  9. #9
    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
    Spotted

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($jp=$_POST[PJour];$jp=$JourDebut;$jp--)
    TU utilises $jp=$jourDebut comme condition finale, or c'est une affectation (=) et non une comparaison (== ou ===). Du coup, c'est toujours vrai, d'où boucle infinie

  10. #10
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Spotted

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($jp=$_POST[PJour];$jp=$JourDebut;$jp--)
    TU utilises $jp=$jourDebut comme condition finale, or c'est une affectation (=) et non une comparaison (== ou ===). Du coup, c'est toujours vrai, d'où boucle infinie
    C'est bien ca le problème. J'ai éliminé ligne par ligne et je m'en suis rendu compte.

    Merci.
    Amicalement

  11. #11
    Membre habitué Avatar de kivan666
    Profil pro
    Inscrit en
    Janvier 2006
    Messages
    242
    Détails du profil
    Informations personnelles :
    Âge : 40
    Localisation : France

    Informations forums :
    Inscription : Janvier 2006
    Messages : 242
    Points : 177
    Points
    177
    Par défaut
    Citation Envoyé par Yogui
    Spotted

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    for ($jp=$_POST[PJour];$jp=$JourDebut;$jp--)
    TU utilises $jp=$jourDebut comme condition finale, or c'est une affectation (=) et non une comparaison (== ou ===). Du coup, c'est toujours vrai, d'où boucle infinie
    lol... comment j'ai ne pas pu le voir...

  12. #12
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Bonjour

    Je continue ici pour ne pas ouvrir un nouveau post (c'est la suite)

    Alors maintenant mon problème se trouve ici
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    $LibJourPrec=$Libelle;
     
         for ($jp=$_POST[PJour];$jp==$JourDebut;$jp--)
         {
              $Trouver=mysql_fetch_array(mysql_query("Select * From hjour Where JourSuivant='$LibJourPrec'"));
    	$LibJourPrec=$Trouver['LibelleJour'];
         }
        CreationCalendrier($_POST[CodeMois], 1, $JourDebut, $LibJourPrec);
    Quand je sors de ma boucle For ma variable $LibJourPrec vaut avant l'entrée dans la boucle par exemple Mardi et la boucle elle vaut Lundi mais à l'appel de la fonction CreationCalendrier() la première valeur est conservée !

    C'est comme si les modifications approtée à la variable dans la boucle ne sont pas visible pour la suite.
    Amicalement

  13. #13
    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

    Tu n'as pas tenu compte de ma remarque sur la syntaxe des tableaux : ['...'] plutôt que [...]

    Sinon, j'aimerais attirer ton attention sur le fait que ta requête n'est pas optimisée. Si ton objectif est de récupérer uniquement une valeur, alors il faut que tu utilises une requête qui te donne une seule valeur.

  14. #14
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Salut

    Tu n'as pas tenu compte de ma remarque sur la syntaxe des tableaux : ['...'] plutôt que [...]
    si si si. voila comment j'ai fais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
     
    $LibJourPrec=$Libelle;
     
        for ($jp=(int)$_POST['PJour'];$jp==$JourDebut;$jp--)
        {
    	echo("je suis ici : $jp  et libelle : $LibJourPrec <br>");
     	$Trouver=mysql_fetch_array(mysql_query("Select * From hjour Where JourSuivant='$LibJourPrec'"));
    	$LibJourPrec=$Trouver['LibelleJour'];
        } 
    echo("-------------------------------------------<br>");
    echo("je suis hors de la boucle et libelle : $LibJourPrec <br>");
    la dernière ligne de la boucle affiche bien la valeur cherchée, mais hors de la boucle j'ai la valeur initiale.

    J'ai aussi essayé de déclarer $LibJourPrec comme global mais ca n'y change rien.

    Citation Envoyé par Yogui
    Sinon, j'aimerais attirer ton attention sur le fait que ta requête n'est pas optimisée. Si ton objectif est de récupérer uniquement une valeur, alors il faut que tu utilises une requête qui te donne une seule valeur.
    Par exemple
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
    Select LibelleJour From hjour Where JourSuivant='$LibJourPrec'"
    ?
    Amicalement

  15. #15
    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
    Le problème est surtout de faire une boucle uniquement pour en récupérer la dernière valeur. Cela peut se faire en une fois, c'est plus clair et plus efficace.

  16. #16
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Le problème est surtout de faire une boucle uniquement pour en récupérer la dernière valeur. Cela peut se faire en une fois, c'est plus clair et plus efficace.
    C'est ce que je cherches à faire dans le for.

    Tu crois qu'une requête devrait suffir?

    PS : je rappel que ce que je cherches c'est de trouver le libellé du jour selon une valeur saisie.
    Par exemple pour une saisie égale à 3, je prend le numéro du jour encours, je remonte de trois jours et je veux retrouve le libellé correspondant.

    PS je rappel aussi que la boucle fonctionne sans problème sauf que je n'arrives pas à utiliser la valeur trouver en fin.
    Amicalement

  17. #17
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    voila ce que j'ai finalement.
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    $LibJourPrec=$Libelle;
     
    $jlimit=$mjour+1;
    for ($pj=$JourDebut;$pj<$jlimit;$pj++)
    {
          $Trouver=mysql_fetch_array(mysql_query("Select * From hjour Where JourSuivant='$LibJourPrec'"));
         $LibJourPrec=$Trouver['LibelleJour'];
         echo("je suis ici : $pj  et libelle : $LibJourPrec <br>");
    } 
    echo("-------------------------------------------<br>");
    echo("je suis hors de la boucle et libelle : $LibJourPrec <br>");
    Et la c'est bon. Apparamment c'est la décrémentation qui ne va pas. Ou alors c'est moi qui suit complétement à coté.
    Amicalement

  18. #18
    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
    Si tu as besoin de la valeur du jour j-3, pourquoi faire une boucle qui parcourt les jours j, j-1 et j-2 ? Cela multiplie par 4 les calculs que tu fais, sans valeur ajoutée.
    Je ne sais pas si tu comprends mon raisonnement mais il faudrait que tu y arrives, car mettre des boucles partout ne convient pas.

    Dans le même ordre d'idées, faire "SELECT *" gaspille des ressources puisque tu n'as besoin que d'un seul champ. Il est toujours préférable de mettre explicitement les champs dans le SELECT, à la fois pour des raisons de clarté et d'économie de ressources.

  19. #19
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Je ne sais pas si tu comprends mon raisonnement mais il faudrait que tu y arrives, car mettre des boucles partout ne convient pas.
    Je crois que je comprends bien.
    Dans le même ordre d'idées, faire "SELECT *" gaspille des ressources puisque ...
    ca c'est déjà corrigé.

    Merci.
    Amicalement

  20. #20
    Membre expérimenté

    Profil pro
    Inscrit en
    Juin 2003
    Messages
    1 229
    Détails du profil
    Informations personnelles :
    Localisation : Sénégal

    Informations forums :
    Inscription : Juin 2003
    Messages : 1 229
    Points : 1 579
    Points
    1 579
    Par défaut
    Citation Envoyé par Yogui
    Si tu as besoin de la valeur du jour j-3, pourquoi faire une boucle qui parcourt les jours j, j-1 et j-2 ? Cela multiplie par 4 les calculs que tu fais, sans valeur ajoutée.
    Je ne sais pas si tu comprends mon raisonnement mais il faudrait que tu y arrives, car mettre des boucles partout ne convient pas.
    J'avais dis que je comprennais mais ma boucle semble être plus indiquée ici ou en tout cas plus facile à mettre en oeuvre.

    Ma table jour(NumJour, LibelleJour, LibelleJourSuivant)

    1 - Lundi - Mardi
    2 - Mardii - Mercredi
    .....
    7 - Dimanche - Lundi

    Supposons qu'on soit un Lundi (donc NumJour=1) et qu'on doivent remonter de 3 jours (donc j-3 = Vendredi avec NumJour=6)

    Retrouver le 6 avant de passer au libellé nécessite plus de code que la boucle qui n'est d'ailleur pas aussi longue que ca.

    Voila.
    Amicalement

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

Discussions similaires

  1. Dans une fonction JAVASCRIPT, comment utilser du code php ?
    Par Alexandrebox dans le forum Général JavaScript
    Réponses: 22
    Dernier message: 10/06/2009, 08h12
  2. Réponses: 12
    Dernier message: 09/06/2009, 10h26
  3. Comment vérifier un code PHP avec beaucoup de conditions ?
    Par Gunner4902 dans le forum EDI, CMS, Outils, Scripts et API
    Réponses: 2
    Dernier message: 03/07/2008, 14h53
  4. Comment générer du code php?
    Par developper2006 dans le forum Langage
    Réponses: 2
    Dernier message: 10/04/2007, 09h42
  5. [MySQL] Comment appeler du code PHP par requête
    Par mickdu90 dans le forum PHP & Base de données
    Réponses: 14
    Dernier message: 19/04/2006, 10h55

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