undefinned offset

Invité
Invité n'ayant pas de compte PHPfrance

15 juil. 2011, 13:57

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 =)

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

15 juil. 2011, 15:42

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 ;) )

@+
Il en faut peu pour être heureux ......

Mammouth du PHP | 2278 Messages

15 juil. 2011, 17:12

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]))
{
Vanitas vanitatum et omnia vanitas
Mes derniers livres :
Sauvez les Mots chez BoD,
Tous les chemins mènent à ROM chez BoD

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2011, 10:41

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?

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 juil. 2011, 11:29

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)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2011, 12:13

[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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

18 juil. 2011, 12:52

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)


@+
Il en faut peu pour être heureux ......

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2011, 14:14

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

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 10684 Messages

18 juil. 2011, 14:49

foreach ($_POST as $index => $value)
Pour chaque couple clé/valeur envoyé par post, l'index est dans $index, la valeur est dans $value :)
Ce n'est pas en améliorant la bougie que l'on a inventé l'ampoule...

Invité
Invité n'ayant pas de compte PHPfrance

18 juil. 2011, 15:00

Merci beaucoup pour votre aide :) !