Page 1 sur 1

undefinned offset

Posté : 15 juil. 2011, 13:57
par Invité
Bonjour, j'ai ici une erreur undefined offset 1 que je n'arrive pas à régler...d'après ce que j'ai lu sa signifie que l'index 1 de mon tableau n'existe pas mais je n'arrive toujours pas à résoudre
Lecode sert à parcourir le tableau $_POST['ref1'] à $_POST['refx ']voici le code

foreach($product as $rows)
{

for($i=1;$i<=$_POST['nombreproduit'];$i++)
{
if(!($rows['reference'] == $_POST['ref'+$i]))
{
$this->facturemodel->add_produit($_POST);
$lastProductId = mysql_insert_id();
$this->facturemodel->facture_has_product($lastFactureId,$lastProductId,$_POST['quantity']);
}
else
{
$this->facturemodel->facture_has_product($lastFactureId,$product['id'],$_POST['quantity']);
}
}
}
l'erreur est à la ligne if(!($rows['reference'] == $_POST['ref'+$i])). Si quelqu'un pouvait m'aider merci d'avance =)

Re: undefinned offset

Posté : 15 juil. 2011, 15:42
par moogli
Salut,
Utilise foreach pour parcourir le tableau de post (une p'tit expression régulière pour prendre que les bon index et ca roule tous seul ;) )

@+

Re: undefinned offset

Posté : 15 juil. 2011, 17:12
par sirakawa
Un truc bête comme chou :
Quand _un POST fait des siennes, commencer par un print_r($_POST); die(); éclaircit souvent la situation.
print_r($_POST); die();// montrera ce qui est passé et sous quels noms; après ça devrait aller mieux. die(); pour éviter que l'écran soit envahi...
foreach($product as $rows)
{

for($i=1;$i<=$_POST['nombreproduit'];$i++)
{
if(!($rows['reference'] == $_POST['ref'+$i]))
{

Re: undefinned offset

Posté : 18 juil. 2011, 10:41
par Invité
désolé de rep si tard...pour les expréssion régulière je ne m'y connais pas trop
vu que les index que je veux récupéré sont ref1 ref2 refx je dois écrire quelque chose comme preg_match('^ref',$index)?? en fait je ne vois pas comment appliquer sa sur les index de mon $_POST peux tu m'orienter s'il te plait moogli?

Re: undefinned offset

Posté : 18 juil. 2011, 11:29
par Ryle
C'est à peu près ça... en fait l'idée c'est de parcourir tous les index envoyés en post, et pour ceux qui commencent par 'ref' (^ref) et qui sont suivi d'un ou plusieurs chiffres (\d+), exécuter ton traitement...


Une autre solution par rapport à ton code initial consisterait simplement à vérifier si l'index existe avant de l'utiliser. Un simple if( isSet($_POST['ref'+$i]) ) avant d'exécuter le code et tu n'es plus embêté. C'est toutefois moins optimisé que de ne traiter que les données envoyées (à ne retenir donc que si le volume des données le permet)

Re: undefinned offset

Posté : 18 juil. 2011, 12:13
par Invité
[quote="Ryle"]C'est à peu près ça... en fait l'idée c'est de parcourir tous les index envoyés en post, et pour ceux qui commencent par 'ref' (^ref) et qui sont suivi d'un ou plusieurs chiffres (\d+), exécuter ton traitement...

Merci pour votre aide.
ce que je n'arrive pas à faire c'est tester le nom de l'index justement
foreach($_POST as $rows)
{
if(preg_match('^ref\d+',$index))
{
//code
}
}

je ne sais pas par quoi remplacer $index

Re: undefinned offset

Posté : 18 juil. 2011, 12:52
par moogli
heu en fait Ryle t'a donné le motif exact :/

après je pense que tu ne sais pas trop te servir des expression régulière ?

if(preg_match('/^ref(\d+)/',$index))

devrait fonctionner ?

pour les expressions regulière il y a, par exemple : http://expreg.com, pour les tester http://lumadis.be/regex/test_regex.php (par exemple)


@+

Re: undefinned offset

Posté : 18 juil. 2011, 14:14
par Invité
oui j'ai dit que je ne m'y connaissait pas en regex
mon problème c'est que je ne sais pas non plus comment récupérer le nom de l'index (ref1 ref2 etc.) en php

Re: undefinned offset

Posté : 18 juil. 2011, 14:49
par Ryle
foreach ($_POST as $index => $value)
Pour chaque couple clé/valeur envoyé par post, l'index est dans $index, la valeur est dans $value :)

Re: undefinned offset

Posté : 18 juil. 2011, 15:00
par Invité
Merci beaucoup pour votre aide :) !