IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

4D Discussion :

WEB : Champs Input ayant même "name" à traiter.


Sujet :

4D

  1. #1
    Futur Membre du Club Avatar de udine1981
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    juillet 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut WEB : Champs Input ayant même "name" à traiter.
    Bonjour à tous et toutes,
    Je viens vers vous aujourd'hui car depuis environ 1 an, je suis obligé de travailler avec 4D (v12) pour offrir un service web à mes clients.
    Aujourd'hui je dois mettre en place de nouvelles fonctions.
    Je précise que le problème que je vais vous exposer ne me pose pas de souci en PHP.

    Je dois ajouter une liste de produits que le visiteur aura choisit et ajoutés dans une sorte de "panier". Pour les identifier, j'ai un champs caché qui comporte l'Id du produit.
    En PHP/HTML je faisais toujours correspondre les tags HTML "name" de mes INPUT tel que : name="id[]" et je faisais traiter ce tableau par PHP sans souci.
    Sous 4D je n'y arrive pas du tout.

    Voici le code que j'utilise (surement un peu brouillon là, car j'ai fais beaucoup de modifications) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    LIRE VARIABLES FORMULAIRE WEB($atFormVariableNames;$atFormVariableValues)
    TABLEAU TEXTE($id;0)
    $x:=Chercher dans tableau($atFormVariableNames;"ID[]";1)
    ALERTE($x) //Me donne logiquement la position du paramètre, ici 2, ce qui est correct... le deuxième paramètre passé.
    Si ($x#-1)
    $id:=Chaine($atFormVariableValues{$x})
    ALERTE("ID  = " + $id) //Et là impossible de récupérer la valeur, toujours 0, alors a bien trouvé le paramètre.
    Fin de si
    C_ENTIER($j)
    Boucle ($j;1;Taille tableau($id))
    CHERCHER([Table];[Table]ID=$id{$j})
    ALERTE("ID = " + Cahine($id{$j}) //Je ne pense que cela aille jusque ici.
    Et voici ce que mon formulaire envoie concrètement c'est le deuxième paramètre qui là ne comporte qu'une info mais qui peut en contenir beaucoup plus :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
     
    285108-Quantite:14
    ID[]:285108
    Total0:0
    Total1:700.00
    Total2:2
    Total3:0
    Total4:0
    Et ainsi de suite...
    Voici ce que d'habitude je fais en PHP :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    <form method="POST" action="../php/save.php" name="form">
    <input type="text" name="add[]" value="blabla" />
    <input type="text" name="add[]" value="blabla2" />
    </form>
    Ce qui me donne en sortie : $_POST['add'] qui contient array(0=>"blabla", 1=>"blabla2")

    Mais là impossible je n'y arrive pas du tout. En vous remerciant tous et toutes par avance de bien vouloir éclairer ma lanterne.

    Bonne journée.

  2. #2
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2011
    Messages : 40
    Points : 66
    Points
    66
    Par défaut
    Bonjour

    Tu peux vérifier que tes valeurs remontent bien dans $atFormVariableValues en mettant un point de trace en ligne 3 et en regardant le contenu du tableau dans le débugger

    Ton souci se situe au niveau de la variable $id que tu initialises comme un tableau en ligne 3 mais que tu utilises en tant que variable texte en ligne 6. Dans ces conditions $id représente non pas la valeur de la ligne recherchée dans le tableau $atFormVariableValues mais la position courante du tableau $id qui est forcément toujours 0, puisque toujours vide.

    Remplace la ligne 3 par C_TEXTE($id) et ça marchera.

    Évidemment il faudra supprimer la ligne 11 et en ligne 12 il faudra écrire CHERCHER([Table];[Table]ID=$id)

    A noter qu'en ligne 7 par besoin de "chaine" (mais ça n'empêche pas le code de fonctionner quand même)

  3. #3
    Futur Membre du Club Avatar de udine1981
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    juillet 2014
    Messages
    4
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Haut Rhin (Alsace)

    Informations professionnelles :
    Activité : Chef de projet NTIC
    Secteur : Transports

    Informations forums :
    Inscription : juillet 2014
    Messages : 4
    Points : 5
    Points
    5
    Par défaut
    Bonjour,

    Merci beaucoup pour ta réponse. Elle m'a effectivement un peu aidé puisque je récupère bien mon ID. Sauf que c'est uniquement le premier, je n'ai pas les autres.

    Tu me dis de mettre $id en C_TEXTE mais si je fais ça comment je vais pouvoir "boucler" sur les Id"s" que la personne aura choisit.

    De même tu me dis d’enlever ma boucle en ligne 7, mais c'est pareil comment je vais pouvoir boucler ?

    En tout cas merci de te pencher sur mon problème.

    Voici un aperçu de mon "nouveau" code.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
     
    TABLEAU TEXTE($atFormVariableNames;0)
    TABLEAU TEXTE($atFormVariableValues;0)
    LIRE VARIABLES FORMULAIRE WEB($atFormVariableNames;$atFormVariableValues)
    $num:=Num($atFormVariableValues{$line})
    C_TEXTE($id)
    $x:=Chercher dans tableau($atFormVariableNames;"ID";1)
    Si ($x#-1)
    $id:=$atFormVariableValues{$x}
    C_ENTIER($j)
    //Boucle ($j;1;Taille tableau($x))
    CHERCHER([Table];[Table]ID=$id)
    //Fin de boucle
    EDIT : En fait la commande "Chercher dans tableau" s'arrête à la première occurrence trouvée de ID, il faudrait que je trouve un moyen de le faire répéter ou continuer plutôt sa recherche.

    EDIT 2 : En combinant "Chercher dans tableau" et "Compter dans tableau" aidés d'un "Tant que" j'obtiens bien deux enregistrements (si j'en ai pris 2 bien sûr) mais deux fois le même !

  4. #4
    Membre du Club
    Homme Profil pro
    Développeur informatique
    Inscrit en
    janvier 2011
    Messages
    40
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Gironde (Aquitaine)

    Informations professionnelles :
    Activité : Développeur informatique

    Informations forums :
    Inscription : janvier 2011
    Messages : 40
    Points : 66
    Points
    66
    Par défaut
    Ah oui je comprends ! Le pb vient du fait que tu ne peux pas recevoir dans la ligne n° 2 du tableau $atFormVariableValues un objet tableau au sens de 4D, la syntaxe $_POST['tab'] n'étant pas directement transposable en 4D

    Quoi qu'il arrive ce ne peut-être qu'une chaîne de texte.

    Pour régler ton problème deux solutions casi identiques :

    - tu formattes ton tableau en JSON côté Web et tu récupères une chaîne JSON côté 4D que tu parseras à l'aide de la commande JSON PARSE TABLEAU pour obtenir directement ton tableau : mais ça n'est possible que depuis 4D v14, donc pas pour toi

    - tu prépares une chaîne concaténant toutes tes valeurs de tableau côté Web avec n'importe quel séparateur. Tu récupères une chaîne texte côté 4D et tu recomposes le tableau en dépiautant la chaîne texte. N'hésite pas si tu as besoin d'aide là-dessus

Discussions similaires

  1. Réponses: 2
    Dernier message: 15/04/2004, 16h44

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo