Récupérer une saisie manuelle dans une boucle sur une table

danbo
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 09:59

De la part de Danbo.
Bonjour aux intelligences.

Je viens demander à votre sagacité à m'aider à résoudreun problème de reconnaissance de variable.

Voici l'explication, ce n'est pas très long, mais simple à poser:

1) J'ai une table de données que je liste (en PHP).
Chaque ligne de la table affiche ses informations. Par exemple:
"id","article",quantite","prix"...bien!!!

2) Grâce à une routine "WHILE", j'affiche chaque ligne et j'ajoute une case de remplissage comme celle-ci:

while(...)
{
...

"<input type=\"text\" name=\"choix".strval($nlignes)."\" title=\"quantite ".$nlignes."\" width=\"20\" class=\"commande\" value=\"0\" />";

$k=$_POST['echo "choix".strval($nlignes);'];
}

où je demande à l'internaute de remplir la quantite pour l'article choisi.
L' "input' porte un name choix0, choix1, choix2, etc..., l'incrémentation se faisant durant le"WHILE"

3) j'obtiens donc bien des variables différentes que le systeme semble reconnaitre, car il est capable de les afficher (dans le title).

4) Or, dès que je valide par un bouton la quantite entree, PHP me repond qu'une erreur d'index apparait, sous cette forme:

Notice: Undefined index: choix1 in c:\program files\easyphp1-8\www\_seebuy_dan\listearticles.php on line 118

Et les manips sur $_POST ne donnent rien, ni avec eval().

D'après vous, y a t il incompatibilité entre le listing et l'adjonction d'un "input", comme si je mélangeais listing + saisie ? ou faut il séparer page de saisie et listing absolument ?

Je vois que sur les sites marchands, ce principe n'existe pas, cela veut-il dire que c'est actuellement impossible.

L'objectif, c'est de réduire les manips pour l'internaute, et faciliter le traitement de l'info pour moi.

Eléphanteau du PHP | 15 Messages

02 mars 2006, 12:04

Je ne suis pas sur d'avoir tout bien compris mais je me permet déjà de faire quelques remarques :

Si j'ai bien compris, tu fais une boucle d'affichage sur tes champs de saisie, en ajoutant à chaque fois :

Code : Tout sélectionner

$k=$_POST['echo "choix".strval($nlignes);'];
Déjà, pour $_POST, je te suggère de faire ça :

Code : Tout sélectionner

$k = $_POST["choix$nlignes"];
Ensuite, le message d'erreur te dis simplement que la variable que tu tentes de récuperer n'est pas définie, ce qui est normal : l'utilisateur ne remplissant pas tous les champs, les autres sont forcement vide. Pour éviter ce message, met plutôt :

Code : Tout sélectionner

if (isset($_POST["choix$nlignes"])) $k = $_POST["choix$nlignes"];
Ca devrait être mieux :)

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 mars 2006, 14:46

Déjà, pour $_POST, je te suggère de faire ça :

Code : Tout sélectionner

$k = $_POST["choix$nlignes"];
Je ne suis pas d'accord avec toi. Dans un soucis de clareté du code et de portabilité, il vaut mieux extraire les variables des chaines de caractères

Code : Tout sélectionner

$k = $_POST["choix".$nlignes];
Sinon, quel est l'intéret de récupérer le contenu de l'input qi tu ne l'utilise pas ?

Comment est-ce que tu le récupéres dans la page de destination de ton formulaire
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer

danbo
Invité n'ayant pas de compte PHPfrance

02 mars 2006, 15:03

me voici à nouveau:

En effet, la syntaxe

$t="q".$nligne;
if(isset($_POST["$t"]))

fonctionne bien, à ceci près:

Lorsque j'ai plusieurs produits affichés sur ma page (venant de la table produits), et que j'entre plus une valeur "quantité" pour plus d'un produit, seule la dernière quantité est prise en compte par le $_POST, les autres sont ignorées (les précédentes), malgré la présence d'indice.

Il me reste donc à comprendre pourquoi ces valeurs sont annulées ?

Avatar du membre
Administrateur PHPfrance
Administrateur PHPfrance | 13231 Messages

02 mars 2006, 15:21

tout simplement parce que as chaque itération, tu remplace le contenu de $k par la nouvelle valeur ... :roll:
Connaître son ignorance est la meilleure part de la connaissance
Pour un code lisible : n'hésitez pas à sauter des lignes et indenter

twitter - site perso - Github - Zend Certified Engineer