Sarc Posté 7 Janvier 2006 Partager Posté 7 Janvier 2006 Bonjour à tous, Le débugage n'est pas ma passion, surtout quand je m'attaque aux "gros" scripts... J'ai une erreur : Notice: Undefined offset: 1 in .... on line 356 Voilà le code aux environs : foreach ($matprem AS $cle=>$valeur){ if ($stockmat[$id][$cle] != $entr[$id]->nbmat[$cle]) { $newval = $entr[$id]->nbmat[$cle]; if (!isset($stockmat[$id][$cle])) $env = "INSERT INTO stockmat (ident, idmat, nbmat) VALUES ('$id', '$cle', '$newval')"; else $env = "UPDATE stockmat SET nbmat='$newval' WHERE idmat = '$cle' AND ident='$id'"; envoi_sql($env, 'mise a jour des matieres premieres'); } } La ligne 356 est la première accolade, l'erreur doit donc être dans le foreach... Faut savoir que le foreach est lui même dans une boucle while, mais après vérification rapide, le foreach se remet à 0 à chaque fois qu'on l'appelle, donc le problème est pas là... Le pire, c'est que le script semble marcher à cet endroit là donc je comprends pas l'erreur, par contre impossible d'afficher quelque chose à la fin de la boucle while, le script semble s'arrêter là... Bref, je fatigue là ! Une idée du problème ? Lien vers le commentaire Partager sur d’autres sites More sharing options...
ste Posté 9 Janvier 2006 Partager Posté 9 Janvier 2006 encadre donc ta boucle foreach par un 'if( is_array($matprem) ) {', ainsi si ta variable $matperm est bien un tableau (multi)dimensionnel, elle s'exécutera... un début de piste ... pour ce que ca vaut Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 9 Janvier 2006 Partager Posté 9 Janvier 2006 ... Faut savoir que le foreach est lui même dans une boucle while, mais après vérification rapide, le foreach se remet à 0 à chaque fois qu'on l'appelle, donc le problème est pas là... As-tu fait un reset($matprem) ? Parce que si tu appelles le foreach plusieurs fois sans cela, le tableau apparaîtra comme vide vu que tu auras lu tous les éléments jusqu'au dernier. Tu auras donc un "undefined offset..." Le reset(array) permet de remettre les pointeurs au début du tableau. Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sarc Posté 9 Janvier 2006 Auteur Partager Posté 9 Janvier 2006 Bonsoir à vous deux, merci pour vos éléments de réponse C'est un tableau, qui n'est même pas créé par une requète sql ou quoi, c'est tout bêtement moi qui le crée manuellement dans le script, et il possède toujours 3 éléments... Dan, c'est ce que j'avais pensé en premier lieu, mais : Note : Lorsque foreach démarre, le pointeur interne de fichier est automatiquement ramené au premier élément du tableau. Cela signifie que vous n'aurez pas à faire appel à reset() avant foreach. Donc, ce n'est pas ça... et je comprends toujours pas pourquoi il y a ce message d'erreur (ce n'est pas une erreur fatale, mais si ça fait ralentir le script ou pire, ne fait pas marcher un truc, c'est déjà trop !) Merci de vos réponses tout cas Lien vers le commentaire Partager sur d’autres sites More sharing options...
Dan Posté 10 Janvier 2006 Partager Posté 10 Janvier 2006 Oui mais tu dis que ton foreach est dans une boucle while... donc tu peux y passer plusieurs fois (selon le contenu du while). Il ne faut pas faire le reset() avant le premier passage, mais après le foreach(). Au moins il te remettra le poiteur à zéro. Dan Lien vers le commentaire Partager sur d’autres sites More sharing options...
Sujets conseillés
Veuillez vous connecter pour commenter
Vous pourrez laisser un commentaire après vous êtes connecté.
Connectez-vous maintenant