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

PHP & Base de données Discussion :

Variable d'entrée non prise en compte


Sujet :

PHP & Base de données

  1. #1
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut Variable d'entrée non prise en compte
    Bonjour à tous,

    Je post ici après avoir cherché un peu partout sur le fofo comme sur d'autres site (aucune référence au problème auquel je fais face en ce moment ...). Je précise que je ne suis pas encore un dev chevronné et rompu aux affres du PHP.

    J'explique :

    Je développe en ce moment une appli en php avec une base mysql.

    J'ai créé toutes mes classes, avec des objets qui contiennent d'autres objets et pour lesquelles tout se charge automatiquement au démarrage. Après avoir testé et retesté le bousin, je me suis rendu compte que vu le poids des appels à la base, il valait mieux ne remplir completement ces objets que lorsque cela était vraiment nécessaire (je vous laisse deviner la raison ? bah une grosse perte de temps dans le cas contraire).

    Donc là dessus, sur certaines fonctions, je passe un booléen en paramètre pour leur dire s'il faut oui ou non chargé les objets contenus dans les objets recherchés (j'espère que je suis clair ), voir dans la fonction qui pose problème en ce moment, s'il faut enregistrer tous les objets en cascade ou non.

    Le problème : quoique je fasse, quelque soit la valeur que je passe en paramètre, elle n'est pas prise en compte (ou plutôt la valeur 'false' est prise en compte à chaque appel).

    La question que je me pose, après avoir re-vérifié le script sous toutes les coutures, c'est est ce que cela peut provenir d'un problème de serveur ? (nan, parce que je ne vois vraiment pas ce qui cloche là dedans )

    Je vous met un bout de la fonction en question (pas la peine de mettre l'intégralité et de tte façon elle est un peu trop longue pour ça, sans parler de la classe elle mê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
     
    function enregistrer($attr = true)
    {
            // Je vous passe l'entrée en matière (vérifications effectuées avant enregistrement des données) et la préparation de la requete, elles ne posent pas problème et la valeur d'entree n'est pas encore utilisée à ce moment là
    	if (!Executer($requete))
    	{
    		return false;
    	}
     
    	if ($attr)
    	{	//	Enregistrement / modification des objets liés
    		for ($i=0; $i<$this->nb_objets; $i++)
    		{
    			if (!$this->les_objets[$i]->set_id($this->id))
    			{
    				$this->erreur .= $this->les_objets[$i]->erreur;
    				return false;
    			}
    			if (!$this->les_objets[$i]->enregistrer())
    			{
    				$this->erreur .= $this->les_objets[$i]->erreur;
    				$this->sql_erreur .= $this->les_objets[$i]->sql_erreur;
    				return false;
    			}
    		}
    	}
     
    	return true;
    }
    J'ai donc plusieurs classes qui fonctionnent sur ce principe, et systématiquement lorsque j'utilise un booléen en entrée, ca ne passe pas (et ca fait quelques heures que je m'arrache les cheveux là dessus )

    Help please !

  2. #2
    Invité
    Invité(e)
    Par défaut


    Ta variable $attr est probablement modifiée, soit avant d'entrer dans ta fonction, soit à l'intérieure de ta fonction. Méfie-toi de l'écrasement de variables causé par un mauvais nommage... Je ne vois que ça

  3. #3
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Bah l'appel de la méthode est plutôt simple (enfin l'appel qui pose problème).

    La valeur ne peut pas être modifiée avant appel de la méthode, puisque les cas dans lesquels j'enregistre le tout sont très ciblés et dans les scripts où cela se produit, ils sont appelés de cette manière.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    $mon_objet->Enregistrer(true);
    (J'ai aussi tenté avec 'Enregistrer(1);', 'Enregistrer("true");', par acquis de conscience, mais pas de changement.)

    Et dans la méthode en question, la variable $attr n'est utilisée pour la première fois que dans lors du test (je lui ai changé de nom plusieurs fois pour tester ce genre de bêtises, mais c'est le même résultat).

    J'ai beau regarder encore et encore, je ne vois pas d'erreur de codage.

    Je me demandais, du coup, si les différentes strates d'objets imbriqués les unes dans les autres ne pouvaient pas poser ce genre de problème, où si l'erreur ne pouvait pas provenir d'un problème de surcharge au niveau du serveur (je n'y crois pas vraiment, mais comme disait Sherlock Holmes dans un des bouquins de Sir Arthur Conan Doyle, "Lorsque vous avez éliminé l'impossible, ce qui reste, si improbable soit-il, est nécessairement la vérité.").

    Du coup, je patauge ... et je vais finir par supprimer la condition et faire la maj de chaque objet à chaque fois (mais ca me désole, je n'ai pas pour habitude de laisser un script me dicter ma conduite ).

    Merci quand même pour la tentative de réponse, David.

  4. #4
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Le problème : quoique je fasse, quelque soit la valeur que je passe en paramètre, elle n'est pas prise en compte (ou plutôt la valeur 'false' est prise en compte à chaque appel).
    Qu'est-ce qui prouve que l'exécution n'a pas déjà quitté la fonction avant le if ($attr) en question?
    On voit qu'il y a un return false conditionnel juste avant, sans parler de la partie de code non montrée.

    Pour obtenir des certitudes là-dessus, il suffirait d'ajouter des print dans ton code.

  5. #5
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Lorsque tout se passe correctement la méthode me retourne "true" (et "false" dans chaque cas d'erreur, avec une description de l'erreur lorsqu'elle ressort de la méthode si problème), or à chaque appel je n'ai constaté aucune erreur (je teste le retour de chaque fonction / méthode avant de poursuivre dans mon script.

    Quant à la partie du code non montrée, ce ne sont que des vérifications sur les différents champs, leur unicité, leur format, leur existence ou non, (...) avec les mêmes règles de sorties en cas d'erreurs. La totalité des objets créés me donne chaque erreur à chaque niveau, au sein de chaque script écrit avec ces objets, donc si erreur et sortie impromptue il y a, le script s'arrete ...

    Ici, le script continue pourtant jusqu'à la fin et reçoit la valeur "true" pour chaque appel de méthode. J'en déduis que les méthodes en question se déroulent jusqu'à la fin sans soucis, puisqu'aucun retour d'erreur. La seule chose qui ne passe pas, c'est la variable d'entrée qui semble ne pas exister lors du lancement des méthodes d'enregistrement.

  6. #6
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Quand à l'oeil le code n'a pas de problème mais qu'à l'exécution il s'avère qu'il en a , on met des print.

  7. #7
    Nouveau Candidat au Club
    Profil pro
    Inscrit en
    Avril 2009
    Messages
    4
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2009
    Messages : 4
    Points : 1
    Points
    1
    Par défaut
    Je me suis sûrement mal exprimé, mais dans le mode "debug" mis en place, j'ai effectivement le contenu de chaque variable d'affiché à l'écran, en plus du retour d'erreurs dans les différents objets, et lors d'un appel où je passe 'true' dans l'attribut, la variable est affichée comme inexistante (ou nulle si vous préférez)

  8. #8
    Membre émérite
    Profil pro
    Inscrit en
    Octobre 2008
    Messages
    1 874
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations forums :
    Inscription : Octobre 2008
    Messages : 1 874
    Points : 2 890
    Points
    2 890
    Par défaut
    Et bien passe "123" et regarde si elle est "affichée" comme contenant 123.

Discussions similaires

  1. variable non prise en compte
    Par oliv27400 dans le forum MATLAB
    Réponses: 2
    Dernier message: 08/11/2010, 09h28
  2. Permissions CACLS variable non prise en compte
    Par Selkurs dans le forum Scripts/Batch
    Réponses: 1
    Dernier message: 12/03/2009, 13h27
  3. Variables de my.cnf non prises en compte
    Par bluemartini dans le forum Administration
    Réponses: 7
    Dernier message: 26/02/2009, 18h14
  4. Variable non prise en compte dans un formulaire
    Par stomerfull dans le forum Langage
    Réponses: 2
    Dernier message: 04/08/2008, 14h36
  5. Redirection entrée standart non prise en compte
    Par mrrenard dans le forum C#
    Réponses: 14
    Dernier message: 22/01/2008, 16h56

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