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 :

problème pour accéder à un élément de tableau


Sujet :

Langage PHP

  1. #1
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 141
    Points : 92
    Points
    92
    Par défaut problème pour accéder à un élément de tableau
    Bonjour,

    j'ai un code avec une boucle while qui liste mes commandes

    A l'intérieur de cette boucle je fais une requete pour récupérer les produits de ma commande.

    Si j'ai 5000 commandes alors je fais 5000 sous-requetes ce qui n'est pas vraiment optimal ...
    J'ai donc fais une fonction qui stock dans un array() la totalité des produits
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    function setTabKdoCommande()
    {
    	$req 	= 	$this->ewp->sqlQuery	("SELECT com_cli, kdo FROM ".EXP_PROD." WHERE prep=1 AND type=1 AND com_cli>='".$this->getMinCommande()."' ORDER BY com_cli ASC, kdo ASC");
    	while($o = $this->ewp->sqlGetObj($req))
    	{
    		//ajout dans mon array
    		//com_cli ==> id de la commande
    		//kdo ==> id du produit
    		$this->tabKdoCommande[$o->com_cli][]	=	$o->kdo;
    	}
    }
    cette fonction marche bien, pas de soucis de côté là (enfin normalement !)

    Dans ma boucle d'origine je remplace la requête que je faisais par un foreach sur le tableau créé précédemment
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    while(....)
    {
    	$nbOK	=	0;
    	foreach($this->tabKdoCommande[$com_cli] as $indexTab => $numKdo)
    	{
    		if($this->tabKdo[$numkdo] > 0)
    		{
    			$this->tabKdo[$numKdo]--;
    			$nbOK++;
    		}
    	}
    }
    le problème c'est que je n'arrive pas à accéder à l'élément $this->tabKdo[$numkdo] alors $numKdo est bien existant et que $this->tabKdo[$numkdo] n'est pas vide (vu avec un print_r)

    ce que je ne comprends pas c'est que j'arrive à accéder à l'élément en laissant mon ancienne sous-requete
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
     
    while(....)
    {
    	$nbOK	=	0;
    	$req 	= 	$this->ewp->sqlQuery	("SELECT kdo FROM ".EXP_PROD." WHERE com_cli='".$com_cli."' AND prep=1 AND type=1");
    	while($o = $this->ewp->sqlGetObj($req))
    	{
    		if($this->tabKdo[$o->kdo] > 0)
    		{
    			$this->tabKdo[$o->kdo]--;
    			$nbOK++;
    		}
    	}
    }
    là il accède bien à $this->tabKdo[$o->kdo] ...

    dans le 1er cas si $numKdo=3000 (par exemple) il n'accède pas à $this->tabKdo[$numkdo]
    dans le 2e cas si $o->kdo=3000 alors il accède bien à la valeur de $this->tabKdo[$o->kdo]

    je me tords les neurones dans tous les sens depuis une heure car je ne comprends pas ce qui cloche ...
    j'ai vérifié les types qui sont des string pour $numKdo et $o->kdo
    j'ai essayé de faire des cast (au cas où ...)

    mais là je bloque désespérément !

    Si vous avez une idée du pourquoi du comment je suis 100% preneur

    Merci de m'avoir lu

  2. #2
    Expert éminent
    Avatar de Benjamin Delespierre
    Profil pro
    Développeur Web
    Inscrit en
    Février 2010
    Messages
    3 929
    Détails du profil
    Informations personnelles :
    Âge : 37
    Localisation : France, Alpes Maritimes (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Développeur Web
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Février 2010
    Messages : 3 929
    Points : 7 762
    Points
    7 762
    Par défaut
    Sinon une jointure c'est pas plus simple ?

  3. #3
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 141
    Points : 92
    Points
    92
    Par défaut
    ce left join serait assez compliqué à mettre en place mais j'y ai pensé.

    cependant j'aimerais quand même bien comprendre pourquoi j'ai ce soucis pour accéder à un élément de mon array

  4. #4
    Expert éminent sénior
    Avatar de rawsrc
    Homme Profil pro
    Dev indep
    Inscrit en
    Mars 2004
    Messages
    6 142
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 48
    Localisation : France, Bouches du Rhône (Provence Alpes Côte d'Azur)

    Informations professionnelles :
    Activité : Dev indep

    Informations forums :
    Inscription : Mars 2004
    Messages : 6 142
    Points : 16 545
    Points
    16 545
    Billets dans le blog
    12
    Par défaut
    Bonjour,

    il faudrait poster le code complet de ta classe je pense parce que là c'est impossible de te dire pourquoi tu as ce problème.

  5. #5
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 141
    Points : 92
    Points
    92
    Par défaut
    je ne pense pas que la classe soit utile
    revoici le code qui pose soucis mais en + light

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    //ce code ne fonctionne pas
    foreach($this->tabKdoCommande[$com_cli] as $numKdo)
    {
    		echo	$numKdo.' - '.$this->tabKdo[$numkdo].'<br />';
    }
     
    //ce code fonctionne
    $req 	= 	$this->ewp->sqlQuery	("SELECT kdo FROM ".EXP_PROD." WHERE com_cli='".$com_cli."' AND prep=1 AND type=1");
    while($o = $this->ewp->sqlGetObj($req))
    {
    	echo	$o->kdo.' - '.$this->tabKdo[$o->kdo].'<br />';
    }
    mes 2 boucles retournes le même numéro mais seule une accède à l'élément du tableau $this->tabKdo

    à l'écran j'ai :
    3000 -
    3000 - 1

    on voit bien que $numKdo dans la première boucle et $o->kdo dans la seconde renvoient 3000 (en string, j'ai vérifié)
    je ne comprend donc pas pourquoi la première boucle n'accède pas à l'élément avec $this->tabKdo[$numkdo] alors que la seconde y accède avec $this->tabKdo[$o->kdo]
    Pourtant les 2 valeurs renvoient bien "3000"

    J'ai également testé en mettant directement $this->tabKdo[3000] et je récupère bien 1

    je désespère car ça me fait tourner en bourrique

  6. #6
    Membre régulier
    Profil pro
    Inscrit en
    Mars 2007
    Messages
    141
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2007
    Messages : 141
    Points : 92
    Points
    92
    Par défaut
    bon ben ...

    la grosse buse que je suis n'a pas vu qu'en fait je me suis planté dans le nom de ma variable ...
    je déclare $nomKdo dans le foreach et j'appelle $nomkdo dans mon array ... j'ai oublié le K majuscule dans la variable ...

    Bon ben je vous ai embêté pour rien !

    Merci quand même

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

Discussions similaires

  1. Problème pour centrer verticalement dans un tableau
    Par navis84 dans le forum Balisage (X)HTML et validation W3C
    Réponses: 10
    Dernier message: 18/07/2006, 17h56
  2. [JSP] Problème pour accéder à un bean venant d'une servlet
    Par GLDavid dans le forum Servlets/JSP
    Réponses: 6
    Dernier message: 07/06/2006, 10h43
  3. Problème pour effacer un élément fait par canvas
    Par matech dans le forum Langage
    Réponses: 4
    Dernier message: 21/04/2006, 00h35
  4. Problèmes pour accéder à ma view...
    Par loupdeau dans le forum MFC
    Réponses: 4
    Dernier message: 18/05/2005, 15h43
  5. [Tomcat] Problème pour accéder à une servlet
    Par david71 dans le forum Tomcat et TomEE
    Réponses: 9
    Dernier message: 08/04/2005, 14h56

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