foreach qui bug sans raison...

foreach qui bug sans raison... - PHP - Programmation

Marsh Posté le 10-10-2005 à 15:51:46    

alors là je comprends pas... vendredi je pars du taff.. tout marchais tres bien... ce matin mon boss s'est servi de mon interface... tout marchait tres bien.. et là d'un instant à l'autre... il me met des erreurs sur les foreach... alors que j'ai rien touché... comment cela est il possible ?
 

Citation :


Warning: Invalid argument supplied for foreach() in /u/clonecop/public_html/php/admin/valid.php on line 487
 
Warning: Invalid argument supplied for foreach() in /u/clonecop/public_html/php/admin/valid.php on line 504
 


 
voici à quoi ressemblent mes foreach
 

Code :
  1. foreach($_SESSION['item'] as $key=>$value)
  2. {
  3. $_SESSION['item'][$key]['id']=$key;
  4. $_SESSION['item'][$key]['libelle']=ucfirst(htmlentities($_POST["libelle$key"]));
  5. $_SESSION['item'][$key]['quantites']=$_POST["quantites$key"];
  6. $_SESSION['item'][$key]['prix_unitaire']=$_POST["prix_unitaire$key"];
  7. $_SESSION['item'][$key]['total_ht_item']=money_format('%.2n',$_SESSION['item'][$key]['prix_unitaire']*$_SESSION['item'][$key]['quantites']);
  8. $_SESSION['total_ht']=money_format('%.2n',$_SESSION['total_ht']+$_SESSION['item'][$key]['total_ht_item']);
  9. }


 
est-ce que quelquechose vous parait louche là dedans ? moi non.. surtout que ça fonctionnait tres bien !


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 15:51:46   

Reply

Marsh Posté le 10-10-2005 à 15:57:50    

T'es sur que $_SESSION['item'] contient toujours un tableau?

Reply

Marsh Posté le 10-10-2005 à 15:59:38    

bah j'ai rien touché... et ça marchait ! il peut arriver que cette variable soit détruite quand j'ouvre une nouvelle feuille de calcul.. justement je suis en train de faire des :
 
if(!isset($_SESSION['item']))
{
$_SESSION['item']=array();
}


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 16:07:59    

je crois que mon programme est possedé !!! il me faut un exorciste !!!


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 16:12:50    

non mais là ya un blem !!!!
 
même ça ça marche plus :
 

Code :
  1. foreach($item2suppr as $key)
  2. {
  3. $val=$key;
  4.  unset($GLOBALS['_SESSION']['item'][$val]);
  5.  if(!isset($_SESSION['item'][$val]))
  6.  {
  7.  $_SESSION['infos'].="L'élement $val est bien effacé<br />";
  8.  }
  9.  else
  10.  {
  11.  $_SESSION['infos'].="Impossible d'effacer l'élement $val<br />";
  12.  }
  13. }


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 16:14:21    

Efface tes données de session et reprends au début?


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-10-2005 à 16:15:57    

bah ça fait ça sur tous les postes !!!
 
c'est etrange quand même ! serait il possible que notre hébergeur ait changé des parametres ou autrechose qui pourrait provoquer ce genre d'erreurs ?


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 16:20:08    

Je vois pas comment ça pourrait faire ça d'un seul coup...[:urd]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 10-10-2005 à 16:22:47    

t'a vérifié quand même le format de ton "item" ?
le contrôle d'erreur, c'est bien !
 
if(!isset($_SESSION['item'])) die("pas d'items" );
if(!is_array($_SESSION['item'])) die("item n'est pas un array" );
print_r($_SESSION['item']));
 
edit : erreur de ma part ..

Message cité 1 fois
Message édité par shakpana le 10-10-2005 à 16:24:23
Reply

Marsh Posté le 10-10-2005 à 18:41:36    

shakpana a écrit :

t'a vérifié quand même le format de ton "item" ?
le contrôle d'erreur, c'est bien !
 
if(!isset($_SESSION['item'])) die("pas d'items" );
if(!is_array($_SESSION['item'])) die("item n'est pas un array" );
print_r($_SESSION['item']));
 
et ça
> unset($GLOBALS['_SESSION']['item'][$val]);
ça fait quelque chose (qui concerne $_SESSION) ?


 
 
j'ai fait ça :
 
 

Code :
  1. <?php
  2.    if(!isset($_SESSION['item']))
  3.    {
  4.    echo "la variable item n'existe pas<br />";
  5.     }
  6.     else
  7.     {
  8.     echo "la variable item existe<br />";
  9.     }
  10.   if(!is_array($_SESSION['item']))
  11.   {
  12.   echo "la variable item n'est pas un array<br />";
  13.   }
  14.   else
  15.   {
  16.   echo "la variable item est un array<br />";
  17.   }
  18.   print_r($_SESSION['item']);
  19.    ?>


 
il me retourne ça :
 
la variable item existe
la variable item est un array
Array ( )  
 
 
... c quand même bizarre ça ! je comprends pas mon probleme !


Message édité par freed102 le 10-10-2005 à 18:46:35

---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 18:41:36   

Reply

Marsh Posté le 10-10-2005 à 18:48:52    

bah, donc ton $_SESSION['item'] est tableau vide ...
juste initialisé genre $_SESSION['item'] = array();
forcément avec ça tu vas pas énumérer grand chose  :D

Reply

Marsh Posté le 10-10-2005 à 18:49:57    

bah oui mais avant ça ne posait pas de probleme !! pour un foreach, si ya rien.. il enumere rien ! mais il provoque pas une erreur à ce que je sache ?


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 18:51:19    

Voilà, un foreach, en présence d'un array vide, va simplement rien faire...

Reply

Marsh Posté le 10-10-2005 à 18:51:45    

on est d'accord, parce que là ton foreach sur cet exemple te fait une erreur ?
si oui, oui, c'est louche ...


Message édité par shakpana le 10-10-2005 à 18:52:04
Reply

Marsh Posté le 10-10-2005 à 18:52:29    

oui j'ai des erreurs sur tous mes foreach depuis cet apres midi alors que tout fonctionnait tres bien encore ce matin !
 
Warning: Invalid argument supplied for foreach() in /u/clonecop/public_html/php/admin/valid.php on line 373


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 18:57:24    

Balance tout le code de ta page avec le test sur is_array avant pour voir.

Reply

Marsh Posté le 10-10-2005 à 18:57:38    

Ou mieux, réduit à un truc tout simple qu'on puisse tester.

Reply

Marsh Posté le 10-10-2005 à 18:58:28    

j'ai plus de 1000 lignes de code là... ça crainx !!!!


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 19:00:00    

$items = array();  
foreach($items as $item){
}
et même un truc de base plante ...
whaou - c'est effectivement mystique ...
et ce entre ce matin et cet aprem.
je veux bien être pendu !

Reply

Marsh Posté le 10-10-2005 à 19:06:34    

Le truc que vient de poster shakpana plante chez toi, freed ?

Reply

Marsh Posté le 10-10-2005 à 19:12:14    

Et heu ... question con, les erreurs, c'est sur la ligne du foreach ou à l'intérieur du foreach?

Reply

Marsh Posté le 10-10-2005 à 19:14:08    

non ça ça ne plante pas, en fait j'ai fait des
 
if(!isset($_SESSION['item']))
{
$_SESSION['item']=array();
}
if(!isset($_SESSION['ref']))
{
$_SESSION['ref']=array();
}
 
sur tous mes tableaux... car c'est effectivement parceque la variable à été préalablement detruite ou n'a pas été créée...
 
mais le truc que je comprends pas c'est pourquoi d'un instant à l'autre.. tout s'est mit à deconner.. alors que tout marche comme ça depuis deux mois ?


---------------
Freed102
Reply

Marsh Posté le 10-10-2005 à 19:56:38    

freed102 a écrit :

if(!isset($_SESSION['item']))
{
$_SESSION['item']=array();
}
if(!isset($_SESSION['ref']))
{
$_SESSION['ref']=array();
}


ha ok, je préfère ça ...
donc c'est "normal" que tu ai des tableaux vides ...
quant à ta question sur le pourquoi ... je crois qu'il nous manque des éléments ...
/me fait une relecture du thread ..

Reply

Marsh Posté le 10-10-2005 à 20:01:40    

freed102 a écrit :

non ça ça ne plante pas, en fait j'ai fait des


Si tu préfaires : les warnings, c'est sur quelles lignes de codes, la ligne du foreach ou des lignes l'intérieur des foreach?

Reply

Marsh Posté le 10-10-2005 à 20:16:47    

omega2 a écrit :

Si tu préfaires : les warnings, c'est sur quelles lignes de codes, la ligne du foreach ou des lignes l'intérieur des foreach?


à chaque fois les warnings étaient sur la ligne du foreach et pas à l'interieur

Reply

Marsh Posté le 10-10-2005 à 20:43:16    

bah oui, à priori ce qu'il devait se passer, tu essayais d'enumerer une variable non-existante $_SESSION['item'], ou en tout cas qui n'était pas du type que tu assumais qu'elle était... d'où l'error-checking (note : s'pratique de temps en temps E_ALL - avec bonne initialisation des variables)... maintenant pourquoi cette var n'est pas initialisée comme elle l'était auparavant...  
y'aurais pas eut un changement de comportement des sessions, tes vars de session à part $item sont-elles correctes ?

Reply

Marsh Posté le 10-10-2005 à 20:45:17    

bah oui toutes les autres variables n'ont pas changé et apparaissent normalement... j'ai eu le même probleme avec une variable normale... (sans session)

Reply

Marsh Posté le 10-10-2005 à 20:46:53    

Il y a eu quoi comme changement de fichier dans la journée?

Reply

Marsh Posté le 10-10-2005 à 20:48:30    

bah j'y avais pas touché jusqu'à ce que mes boss en utilisant mon interface me disent  "Freed !!! ya plein de messages d'erreur partout sur ton programme !!"

Reply

Marsh Posté le 10-10-2005 à 20:52:37    

Ben soit quelqu'un y a touché soit quelqu'un à touché aux réglages du php.ini et plus précisément au réglage de l'affichage des erreurs ce qui fait que ce qui était caché est devenu visible.
 
Y a malheureusement pas de miracle et si ca a touché une autre variable, je suis certain que c'est l'un de ces deux événement qui ont eu lieux.

Reply

Marsh Posté le 10-10-2005 à 21:17:47    

oui, la bonne nouvelle c'est que à part suivre au pas à pas ton $_SESSION['item'] depuis sa création pour vérifier ce qui lui arrive, je vois pas de soluce miracle ...
Mais ton truc, il a qd même dû fonctionner à un moment, non ?
Parce que là, à priori, $item n'est jamais rempli ...


Message édité par shakpana le 10-10-2005 à 21:18:20
Reply

Marsh Posté le 11-10-2005 à 10:51:19    

bah si il fonctionnait tres bien ce programme qui est utilisé depuis juillet tous les jours, bon maintenant remarche normalement depuis que j'ai declaré les variables quand elles n'existent pas... mais c tout de même tres louche ce qu'il s'est passé !c à croire que quelqu'un à touché à mon programme pendant mon absence ! (pourtant je vois pas ce qui aurait pu provoquer tout ça !)


---------------
Freed102
Reply

Marsh Posté le 11-10-2005 à 11:00:36    

t'es pas passé à un niveau de contrôle d'erreur plus strict dans php? :??:


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-10-2005 à 11:07:03    

bah non je pense pas parceque c vraiment la seule erreur qui apparaissait ! enfin bon.. j'ai corrigé le truc, j'espere que ça va pas poser d'autres erreurs sur d'autres pages du site


---------------
Freed102
Reply

Marsh Posté le 11-10-2005 à 14:21:36    

skeye a écrit :

t'es pas passé à un niveau de contrôle d'erreur plus strict dans php? :??:


+1 . avec php c'est qd même un bon truc à faire + initialisation de vars, vérif. de type + un ptit E_ALL en dev.
et ça évite bien ce genre de mésaventures ...

Reply

Marsh Posté le 11-10-2005 à 14:23:01    

en dev c'est sur, mais en prod, il vaut mieux éviter de mettre les allertes en E_ALL.

Reply

Marsh Posté le 11-10-2005 à 14:23:36    

omega2 a écrit :

en dev c'est sur, mais en prod, il vaut mieux éviter de mettre les allertes en E_ALL.


Ah ben ça c'est sûr...[:petrus75]


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 11-10-2005 à 14:29:45    

skeye a écrit :

Ah ben ça c'est sûr...[:petrus75]


tout le monde aura d'ailleurs noté cette petite phrase de la doc à propos de display_errors, activé par défaut

This is a feature to support your development and should never be used on production systems (e.g. systems connected to the internet).


Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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