logo

NPDS : Gestion de contenu et de communauté


Content & Community Management System (CCMS) robuste, sécurisé, complet, performant, parlant vraiment français, libre (Open-Source) et gratuit.
35 visiteur(s) et 0 membre(s) en ligne.
Activité du Site

Pages vues depuis 25/05/2001 : 108 404 120

  • Nb. de membres 8 693
  • Nb. d'articles 1 695
  • Nb. de forums 26
  • Nb. de sujets 8
  • Nb. de critiques 92

Top 10  Statistiques

Index du forum »»  SFORM »» Liste à choix multiple

Nouveau sujet
 Liste à choix multiple#14386Répondre

5Contributeur(s)
PhilGuenhexagonedeveloppeurTribal-DolphinAchel_Jay
3 Modérateur(s)
developpeurjpbJireck
PhilGuen PhilGuenicon_post
Bonjour à tous,

Je souhaite confectionner une liste à choix multiples dans le formulaire d'inscription (extension)

J'ai donc fait

//****************** Ajout pour ACB ************
$tmp=array(
"ACB marcheur"=>array('en'=>"ACB marcheur", 'selected'=>false),
"autre FFRP"=>array('en'=>"autre FFRP", 'selected'=>false),
"ACB cyclo"=>array('en'=>"ACB cyclo", 'selected'=>false),
"UVD"=>array('en'=>"UVD", 'selected'=>false),
"autre FFCT"=>array('en'=>"autre FFCT", 'selected'=>false),
"autre FFC"=>array('en'=>"autre FFC", 'selected'=>false),
"UFOLEP"=>array('en'=>"UFOLEP", 'selected'=>false),
"aucune"=>array('en'=>"aucune", 'selected'=>false),
);
$m->add_select('C5','Type de licence :', $tmp, true, 4, true);
$m->add_extender("C5", ""," plusieurs choix possibles avec CTRL");
//**********************************************

Ca fonctionne à l'affichage, mais ma variable $C5 prend "array" comme valeur. Faut-il faire un traitement complémentaire (l'inverse de split) sur C5 pour obtenir les choix "en clair" ?

J"ai essayé de rajouter

$C5=implode(",",$C5);

mais sans résultat

PS . Si je fais un seul choix, c OK ... $C5 prend bien le texte

Complément à ma question, comment fait-on pour avoir le résultat du choix, par exemple qd on modifie son compte.

J'affiche bien la liste des choix, mais celui (ou ceux) qui avait été selectionné dans le formulaire de création n'est pasen surbrillance.

Merci de votre aide

Philippe



Message édité par : PhilGuen



Message édité par : PhilGuen



Message édité par : PhilGuen



Message édité par : PhilGuen

PhilGuen PhilGuenicon_post
J'ai modifié de cette manière (on peut peut-être faire mieux)

//****************** Ajout pour ACB ************
switch ($C5) {
case "ACB marcheur":
$flag1="1";
break;
case "autre FFRP":
$flag2="1";
break;
case "ACB cyclo":
$flag3="1";
break;
case "UVD" :
$flag4="1";
break;
case "autre FFCT" :
$flag5="1";
break;
case "autre FFC" :
$flag6="1";
break;
case "UFOLEP" :
$flag7="1";
break;
case "aucune" :
$flag7="1";
break;
}
$tmp=array(
"ACB marcheur"=>array('en'=>"ACB marcheur", 'selected'=>$flag1),
"autre FFRP"=>array('en'=>"autre FFRP", 'selected'=>$flag2),
"ACB cyclo"=>array('en'=>"ACB cyclo", 'selected'=>$flag3),
"UVD"=>array('en'=>"UVD", 'selected'=>$flag4),
"autre FFCT"=>array('en'=>"autre FFCT", 'selected'=>$flag5),
"autre FFC"=>array('en'=>"autre FFC", 'selected'=>$flag6),
"UFOLEP"=>array('en'=>"UFOLEP", 'selected'=>$flag7),
"aucune"=>array('en'=>"aucune", 'selected'=>$flag8),
);
$m->add_select('C5','Type de licence :', $tmp, true, 4, false);
// $m->add_extender("C5", ""," plusieurs choix possibles avec CTRL appuyé");
//$C5=implode(",",$C5);
//**********************************************

Ca marche pour un choix unique, mais comment faire pour que ca marche en choix multiple? Ma variable prend "Array" comme valeur.

J'essaie de comprendre comment ca marche pour les groupes (en fait, c'est ce dont j'ai besoin), mais je n'arrive pas à trouver la différence avec ce que j'ai fait ... me manque le passage des valeurs de "add_group" dans "groupe", mais je ne trouve pas.

Help :-D suis coincé !!!!!!!!! :|

Pendant que vous y êtes, est-ce qu'un "dev-team member" peut me dire où se trouve la vérification de l'obligation de saisir un champ. Je voudrais forcer l'utilisateur à faire un choix, mais sans qu'il y en ait un de préselectionné.

Merci de votre aide car je n'avance pas.

Bon dimanche

Philippe

Message édité par : PhilGuen

hexagone hexagoneicon_post

Citation : PhilGuen 

$m->add_select('C5','Type de licence :', $tmp, true, 4, false);

multiple
obligation de saisir un champ.

Message édité par : PhilGuen

 


voici les parametres de add_select (cf modules/sform/sform.php 5.0 Narval)

dans ton appel de add_select tu indiques:

$m->add_select('C5','Type de licence :', $tmp, true, 4, false);
ce qui correspond a:
nom: C5
en: "type de licence"
values: $tmp
obligation: true
size: 4
et multiple: false

donc change le dernier parametre en true si tu veux pouvoir faire du choix multiple
a+
PhilGuen PhilGuenicon_post
Bonjour Hexagone et merci d'essayer de m'aider.

On est bien d'accord sur le paramètre à passer en true pour un choix multiple. L'exemple que je donnais était ce qui fonctionnait c a d le choix unique.

Mon pb est ensuite dans l'utilisation et le stockage de $C5.

En fait je voudrais retrouver un fonctionnement strictement identique à celui des groupes, mais ca coince au niveau du transfert du tableau en string.

Voici ce que j'ai fais exactement.

Dans sform/extend-user/extender/formulaire.php j'ai ajouté :

//***************************** Ajout pour ACB ***********************************
//$C5="ACB marcheur|ACB cyclo|UFOLEP"; // valeurs pour essais
if ($C5) {
$C5=" ".$C5; // pour résoudre le problème quand strpos est vrai mais = 0
if (strpos($C5,"ACB marcheur")) $flag1=1;
if (strpos($C5,"autre FFRP")) $flag2=1;
if (strpos($C5,"ACB cyclo")) $flag3=1;
if (strpos($C5,"UVD")) $flag4=1;
if (strpos($C5,"autre FFCT")) $flag5=1;
if (strpos($C5,"autre FFC")) $flag6=1;
if (strpos($C5,"UFOLEP")) $flag7=1;
if (strpos($C5,"aucune")) $flag8=1;
$C5=ltrim($C5); // pour annuler l'action de la ligne 44
// echo $C5; // pour vérifier
};
$tmp=array(
"ACB marcheur"=>array('en'=>"ACB marcheur", 'selected'=>$flag1),
"autre FFRP"=>array('en'=>"autre FFRP", 'selected'=>$flag2),
"ACB cyclo"=>array('en'=>"ACB cyclo", 'selected'=>$flag3),
"UVD"=>array('en'=>"UVD", 'selected'=>$flag4),
"autre FFCT"=>array('en'=>"autre FFCT", 'selected'=>$flag5),
"autre FFC"=>array('en'=>"autre FFC", 'selected'=>$flag6),
"UFOLEP"=>array('en'=>"UFOLEP", 'selected'=>$flag7),
"aucune"=>array('en'=>"aucune", 'selected'=>$flag8),
);
$m->add_select('C5','Votre licence : *', $tmp, true, 4, true);
$m->add_extender("C5", ""," plusieurs choix possibles avec CTRL appuyé");
//************************************************************************************************
:=! Cette partie fonctionne parfaitement

puis dans sform/extend-user/aff_formulaire.php, en espérant afficher le contenu de $C5 sou la forme d'une chaîne au format "choix1|choix2|choix4" j'ai ajouté ceci

//************************************* Ajout pour ACB *******************************
$C5 = implode("|",$C5);
//echo $C5;
$m->add_field('C5','Votre licence','$C5','textarea',false,255,5,"","");
//**************************************** Fin Ajout **********************************

:-? la rien ne s'affiche à l'endroit prévu (pourtant le "echo $C5" renvoie bien "choix1|choix2|choix4)

et la variable $C5 enregistre "Array"

Enfin, si j'enlève les lignes de "aff_formulaire.php" et que dans la fonction "finishNewUser" de user.php j'ajoute ligne 198

$C5 = implode("|",$C5);

:paf Warning: Bad arguments to implode() in c:\program files\easyphp\www\acbdescartes\user.php on line 198 :paf

:-| :-| :-|

Ca fait 3 jours que je suis la dessus alors je brule un cierge au nom de celui qui me dépanne :-D

Amitiés à tous

Philippe




Message édité par : PhilGuen

developpeur developpeuricon_post
$C5bis=explode("|", $C5); pas implode ....
PhilGuen PhilGuenicon_post
tu es sur? :-? :-? :-? :-? C'est bien un tableau qui ressort du traitement par sform?

explode - Retourne un tableau de chaînes
implode -- Rassemble les éléments d'un tableau en une chaîne ...

c'est donc bien ce que je veux faire : transformer le tableau $C5 en une chaîne (et ca marche si je le mets dans aff_formulaire.php et que je fais un "echo $C5) pour l'enregistrer dans la table users_extend.

et dans la gestion des groupes c'est bien "if ($add_group) {$add_group=implode(",",$add_group);}" qu'on a dans admin/users.php.

Bon j'essaie qd mm mais pour le coup je n'y comprends plus rien

Merci de ton aide

Philippe




Message édité par : PhilGuen

Tribal-Dolphin Tribal-Dolphinicon_post
Choix multiple = Tableau
Tableau = Array
Accès au tableau = $C5[0] / $C5[1] / .......

Donc il faut que compte les valeur dans ton array :


$num = count($C5);
$i = 0;
while($i<= $num) {
$var.= $C5[$i];
  $i++;
  if($i<$num) { $var .= "|"; }
}



Code fait de tête, à adapter suivant le résultat
PhilGuen PhilGuenicon_post
Citation : Tribal-Dolphin 
Choix multiple = Tableau
Tableau = Array


:-D ca me rassure !!!!!!

Je n'ai pas besoin de connaître chaque élément du tableau, juste de transformer le tableau en une chaîne avant de l'enregistrer dans la table

donc pour transformer le tableau $C5 en une chaîne ....... $C5=implode("|",$C5) devrait fonctionner (et d'ailleurs ca fonctionne pour enregistrer les groupes dans admin/users.php puisqu'on utilise "if ($add_group) {$add_group=implode(",",$add_group);}" )

ALORS POURQUOI TANT DE HAINE ??? :paf :Warning: Bad arguments to implode() in c:\program files\easyphp\www\acbdescartes\user.php on line 198 :paf



Message édité par : PhilGuen



Message édité par : PhilGuen

developpeur developpeuricon_post
désolé / trop vite j'ai lut ... :paf
PhilGuen PhilGuenicon_post
:-D pas grave

Bon ... j'abandonne :| Doit y avoir une m.... dans le tableau retourné. Toutes les instructions PHP de manipulation de tableau que j'ai essayé retourne une erreur. Pourtant un echo $C5 me retourne bien "Array".

Si quelqu'un veut bien prendre 5 mn pour essayer de modifier le formulaire d'inscription en incluant un champ liste à choix multiples et en enregistrant le résultat sous forme de chaîne dans une des variables libres, je serais intéressé par son expérience.

Moi j'ai perdu trop de temps la dessus. Y a un bug quelque part dans SFORM :-| et ca dépasse mes compétences. :paf

Merci d'avoir essayé de m'aider

Bonne journée à tous

Philippe

Message édité par : PhilGuen



Message édité par : PhilGuen

developpeur developpeuricon_post
deux chose :

- un print_r($C5); te donnera le contenu exact de C$ (c'est bien pratique)
- le séparateur | est peut-être la source de tes erreurs (remplace le par une , un #, un autre truc quoi)

J'aessayerais de mon côté mais comme tu le dit / l'admin des groupes le fait !
PhilGuen PhilGuenicon_post
Merci beaucoup DEV

J'avais essayé avec d'autres séparateurs.

En fait, j'ai l'impression que c'est le Array renvoyé par SFORM qui n'est pas valide (peut-être un pb dans la construction initiale du champ à choix multiple) car toutes les instructions PHP de manipulation de tableau essayées renvoient une erreur.

Et pourtant ca fonctionne avec les groupes !!!

Je vais faire d'autres essais cet ap midi, mais si tu trouves qq chose avant, merci beaucoup

Amitiés

Philippe
PhilGuen PhilGuenicon_post
Citation : developpeur

deux chose :

- un print_r($C5); te donnera le contenu exact de C$ (c'est bien pratique)



si je mets un print_r($C5) dans aff_formulaire.php, j'ai ceci : Array ( [0] => ACB marcheur [1] => ACB cyclo ) :=!
(d'ailleurs un $C5 = implode("|",$C5); echo $C5; donne le bon résultat)

si je le mets dans la fonction finishNewUser de user.php (avant enregistrement dans la table) j'ai "Array" :-|


Le problème semble donc se trouver dans aff_ formulaire et / ou la validation du formulaire :paf :paf


Message édité par : PhilGuen

developpeur developpeuricon_post
le formulaire passe effectivement par des Array (il ne peut pas faire autrement d'ailleur). Dans finishNewUser ton implode devrait marcher donc ?
PhilGuen PhilGuenicon_post
dans finishNewUser

un $C5=implode("|",$C5); ligne 198 donne
:paf Warning: Bad arguments to implode() in c:\program files\easyphp\www\acbdescartes\user.php on line 198 :paf

et un print_r($C5); renvoie "Array" au lieu du Array ( [0] =>selection1 [1] =>selection2 attendu.

Il y a donc une corruption de $C5 après le formulaire


Message édité par : PhilGuen

developpeur developpeuricon_post
global $C5 ?

ou alors une affectation de $C5 dans le code ?

je regarde
PhilGuen PhilGuenicon_post
Merci DEV
PhilGuen PhilGuenicon_post
Citation : developpeur 

global $C5 ?

ou alors une affectation de $C5 dans le code ?

je regarde 


Bonjour DEv

As-tu trouvé qq chose?

Merci de ton aide
Amitiés

Philippe
Achel_Jay Achel_Jayicon_post
Hyper interresé par ton code Philguen et surtout par l attribution à des groupes en fonction des choix ... et si à la place de tout mettre ds la variable C5 tu placais chaque réponse dans une variable et utilisait des fonctions math ... + et =
PhilGuen PhilGuenicon_post
Houla la.

C'était il y a deux ans !!!! :-?

Je regarde comment je m'en suis sorti et je reviens (mais je crois bien que j'avais abandonné)

Cordialement

Effectivement, j'avais abandonné l'idée d'une liste à choix multiple dans le formulaire d'inscription avec passage du résultat dans $C5. Je me suis contenté d'une liste à choix unique.

Message édité par : PhilGuen / 03-11-2006 09:33