impossible de rentrer dans mon foreach

impossible de rentrer dans mon foreach - PHP - Programmation

Marsh Posté le 12-01-2011 à 12:13:49    

Tout d'abord bonjour,
 
je suis actuellement entrain de développer un intranet a travers un framework, copix 3.
 
Le code sera plus explicatif.
 
 

Code :
  1. function getMatriculeAv($num){
  2.   $i=0;
  3.   $tab = array();
  4.   $req = _doQuery('Select MATRICULE from cartemulti Where BADGE ='.$num.';');
  5.   print_r($req);break;
  6.   foreach($req as $rep){
  7.    $tab[$i][0] = $rep->MATRICULE;
  8.    $i++;
  9.    echo "pupuce";break;
  10.   }
  11. }


 
le résultat du de la requête est le suivant.
Array ( [0] => stdClass Object ( [MATRICULE] => 10223 ) ).
Le problème étant que pour une raison obscure il ne veut pas rentrer dans mon foreach pour extraire mon resultat(10223).
 
Si quelqu'un peut m'expliquer je lui en serais reconnaissant. Je planche sur cette erreur depuis 9h ce matin :/
 
Merci d'avance

Reply

Marsh Posté le 12-01-2011 à 12:13:49   

Reply

Marsh Posté le 12-01-2011 à 12:17:30    

C'est pour quoi le premier break ?

Reply

Marsh Posté le 12-01-2011 à 12:20:24    

c'était juste pour avoir le resultat de ma requête.
Même sans il ne passe pas dans le foreach.

Reply

Marsh Posté le 12-01-2011 à 12:45:45    

me rappelle plus des vagues trucs que j'ai faits en php, array() ça te crée un tableau utilisable en bidimensionnel directement ?

Reply

Marsh Posté le 12-01-2011 à 12:47:12    

Y'avait pas un truc pour éviter le $i++,
comme $tab[]=$valeur  
sans préciser l'indice ?

Reply

Marsh Posté le 12-01-2011 à 12:47:31    

Donc déjà vire tes 2 breaks. Ensuite, ton print_r($req) il est bien interprété et te donne ce que tu veux?
Ensuite, fous un echo en ligne 7 (1ère ligne dans ton foreach)
 
Reviens avec les résultats du code corrigé


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 12:52:38    

Code :
  1. function getMatriculeAv($num){
  2.   $i=0;
  3.   $tab = array();
  4.   $req = _doQuery('Select MATRICULE from cartemulti Where BADGE ='.$num.';');
  5.   //print_r($req);break;
  6.   foreach ($req as $repo){
  7.    echo "blabla";
  8.    $tab[$i][0] = $repo->MATRICULE;
  9.    $i++;
  10.   }


 
oui mon $req a bien récupéré ce que je veux, mon '10223' mais dans un tableau.
Pour le echo de la première ligne il ne s'affiche pas. (même avec un break derrière j'ai aussi testé).
Le truck c'est que je fais la même manipe pour d'autre fonction, avec des requêtes semblables et cela fonctionne parfaitement.

Reply

Marsh Posté le 12-01-2011 à 13:00:42    

Mais arrête de foutre des breaks dans tous les sens vu que manifestement t'as absolument pas compris ce qu'ils font.  
Donc à la ligne 5, tu enlèves le break, tu remets le print_r et tu nous colles ici l'output de print_r
 
Accessoirement (ça doit être seulement la 25 fois depuis le début de l'année que je le répète en plus) : Il ne faut PAS écrire vos requêtes SQL comme ça, utilise PDO. On n'est plus en PHP3 depuis un moment...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 13:04:49    

Alors d'une sur le code la le break est en commentaire.
De deux je travail via un framework je suis obligé d'utiliser le break sinon ma page est automatiquement redirigé et n'affiche donc pas les echo etc...
De trois le resultat de cette requête si tu avais lu mon premier post en entier est déjà posté.
 
Sinon oui je tout ouï pour ta façon d'écrire les requêtes sql.

Reply

Marsh Posté le 12-01-2011 à 13:20:31    

Oui d'accord mais ton break va t'éjecter directement de ta fonction. Donc si tu veux éviter que ton FW intervienne, faut arrêter le traitement à fa fin de la fonction (en mettant un exit, die ou autre)  
À part ça, t'es sur que c'est pas justement ton framework qui te joue des tours? Parce que là je vois aucune raison pour laquelle tu ne devrais pas rentrer dans ton foreach...


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 13:20:31   

Reply

Marsh Posté le 12-01-2011 à 13:32:53    

Ba c'est bien ça le soucis, moi non plus je ne vois pas de raison.
 
Et si cela vient de framework je vois mal comment régler le problème.
Surtout que comme dit plus haut cela fonctionne parfaitement pour d'autre fonction.
 
Je vais essayer d'explorer de nouvelles pistes.
 
Si je trouve une solution je reviendrais ici la poster.

Reply

Marsh Posté le 12-01-2011 à 13:37:16    

Azax a écrit :

Alors d'une sur le code la le break est en commentaire.
De deux je travail via un framework je suis obligé d'utiliser le break sinon ma page est automatiquement redirigé et n'affiche donc pas les echo etc...


 
Ton framework en bois ne gère pas des log ?  [:zytrasnif]  
 

Citation :

Sinon oui je tout ouï pour ta façon d'écrire les requêtes sql.


 
Tout framework digne de ce nom se doit d'avoir un DBAL avec un ORM. Utilise le [:spamafote]

Reply

Marsh Posté le 12-01-2011 à 13:38:35    

smaragdus a écrit :


 
Ton framework en bois ne gère pas des log ?  [:zytrasnif]  
 

Citation :

Sinon oui je tout ouï pour ta façon d'écrire les requêtes sql.


 
Tout framework digne de ce nom se doit d'avoir un DBAL avec un ORM. Utilise le [:spamafote]


 
Relis ton post et essaie de répondre à ta "question" sur la connexion avec le SGBD :D


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 13:50:29    

Code :
  1. function getMatriculeAv($num){
  2.   $tab = array();
  3.   $req = _doQuery('Select * from cartemulti Where BADGE ='.$num.';');
  4.   if(count($req)>0){
  5.   foreach ($req as $i=>$repo){
  6.    $tab[$i][0] = $repo->MATRICULE;
  7.   }
  8.   } else{
  9.   }
  10.    return $tab;
  11.  }


 
Voila cela fonctionne.
Ce coup ci il passe bien dans ma boucle et je peux récupérer la valeur qui m'intéressais.
 
Merci a toi esox pour avoir essayé de m'aider.

Reply

Marsh Posté le 12-01-2011 à 13:53:12    

Ah oui c'est clair que si ça ne contenait rien je ne vois pas comment ça aurait pu passer dans la boucle, donc l'affichage du contenu de $req que tu nous a donné était faux ;)

Reply

Marsh Posté le 12-01-2011 à 14:03:37    

Même pas.
 
C'est ca qui est le plus étrange.
Car maintenant je viens de re-tester mon code lors de la création de ce sujet. et il fonctionne :/
 
Donc je ne sais toujours pas d'ou venait l'erreur.  
Parfois en informatique il vaut mieux pas chercher :D

Reply

Marsh Posté le 12-01-2011 à 15:17:27    

Azax a écrit :

Même pas.
 
C'est ca qui est le plus étrange.
Car maintenant je viens de re-tester mon code lors de la création de ce sujet. et il fonctionne :/
 
Donc je ne sais toujours pas d'ou venait l'erreur.  
Parfois en informatique il vaut mieux pas chercher :D


 
Très bonne approche pour avoir l'air un peu con lorsque la pète lors de la mise en prod :bounce:


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 16:21:55    

Très peu de chance, déjà c'était étrange a l'origine. Mais alors que je remette le même code et que cela fonctionne. Vu que toutes mes autres fonctions ont la même syntaxe je vois pas ou cela pose problème.
 
Mais je trouve que passer de 9h à 15h sur une simple boucle qui était surement un caprice du FW c'est suffisamment chercher.

Reply

Marsh Posté le 12-01-2011 à 16:30:21    

C'est rare d'avoir un comportement aléatoire au niveau logiciel.

Reply

Marsh Posté le 12-01-2011 à 16:35:45    

Justement, ce genre de machin où le dev se dit "bof maintenant ça marche ... pas chercher" c'est génial quand ça merde devant le client ... C'est des grands moments de solitude pour le dev, et là le site qui tombe pendant 9 ou 15h, ça peut coûter cher ..


---------------
Si la vérité est découverte par quelqu'un d'autre,elle perd toujours un peu d'attrait
Reply

Marsh Posté le 12-01-2011 à 16:43:35    

Oui fin bon escuse moi, simple stagiaire en fin de bts. De ne pas passer ma journée sur un problème sans queue ni tête. Surtout quand cette fonction n'est pas primordiale.
 
J'ai d'autres avancements a faire sur le site.
 
Comme tu la dis toi-même cela n'avais aucune raison de ne pas fonctionner. C'était surement une erreur dans le controller et pas dans la classe.  
 
Sur ce, je vous remercie de m'avoir aidé.


Message édité par Azax le 12-01-2011 à 16:44:39
Reply

Marsh Posté le 12-01-2011 à 21:08:35    

Voir des break pour arrêter l'exécution d'un framework me fait assez peur.
 


function xyz () {
    // instructions avec print_r, boucles, debug, etc
    die('Je suis en train de faire des petits tests qui contiennent des requêtes ouvertes aux injections SQL :D...');
}


 
Tu auras tout l'output nécessaire.
 
Lorsque la variable que tu print_r est NULL, bah tu vas juste voir NULL (cela ne te dit rien ?) et du coup tu n'entreras pas dans le foreach car $req n'était pas un array...
 
Dernier conseil pour le futur : toujours chercher à comprendre d'où vient une erreur. Cela peut coûter en temps aujourd'hui mais te permettra de garder tes cheveux dans 10 ans :D !

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed