[PHP] cherche coup de main

Voilà ce que je voudrais faire.

J’ai deux liste déroulante dont une à choix multiple, je fait un choix dans au moins une des listes voir les deux. je voudrais que lorsque je valide,
mes choix apparaissent dans un tableau ou une liste dans cette même page rafraichis.
et je voudrais pouvoir supprimer un de ces choix de la liste si je le veut.
j’ai déjà fait ( avec l’aide d’un pote) une session qui récupère mes données.

seulement, je voudrait pouvoir rajouté d’autre choix a la suite de cette liste. je ne sais pas trop comment je pourrait faire.

exemple de ma liste final :

choix_liste1 prix
choix_liste2 prix
choix2_liste1 prix
choix2_liste2 prix

ça ressemble un peut a un panier en fait, mais comme je n’en est jamais fait…

Tu stockes tes informations comment ? base MySQL ?

[quote name=‘Moe’ date=’ 11 Dec 2004, 00:39’]Tu stockes tes informations comment ? base MySQL ?
[right][post=“311936”]<{POST_SNAPBACK}>[/post][/right][/quote]

oui

Je viens de relire le sujet, maintenant je comprends.

On choisit des objets, on appuie sur ok et ça nous montre ces objets, et on peut encore en enlever si on a mal choisi la première fois.

Je ne connais pas les listes déroulantes à choix multiple, je ne sais pas si c’est possible puisqu’un seul choix apparaît lorsqu’elle se ferme, on ne voit pas les autres.
Le plus dur est de réaliser le truc pour sélectionner les objets, et ça n’est pas du PHP, ça serait plus du Javascript + HTML.
Personnellement, Je ferais ça avec des cases à cocher ( ou ), si je devais faire ça.

Bon courage.

Ce tutorial devrait peut-être t’aider; ça marche très bien pour les checkbox, mais pour les listes à choix multiple, le principe doit être le même :stuck_out_tongue:

A+

Je relierai en detail plus tard : mais a vue de nez :

un cookie qui stocke un session ID une table session ID produit prix

select * from latable where sessionID=cookieSession echo "td>produit";
prix

Biensur, je n’ai pas fait de vrai code la mais tu devrai comprendre le principe.

Je pense qu’il n’a pas spécialement de problèmes pour faire passer les variables de ses listes au travers d’un formulaire mais plutôt de les conserver en « mémoire » le temps de pouvoir faire autre chose.

Vu que tu utilises des sessions en fait, je vois pas spécialement le problème. Si tu stockes tes variables (choix_liste1 prix, choix_liste2 prix, choix2_liste1 prix, choix2_liste2 prix) dans des variables de sessions, tu les garderas tout au long du processus du moment que le formulaire, la page de traitement du formulaire etc… fonctionne sur la même session. Utilises des variables du style $_SESSION[‹ liste1 ›] pour cela. Le mieux est de boucler tes résultats pour éviter de faire 10000 traitements dans le genre:

[code]<?php
// on admet que liste1 est ta première liste et que les variables sont passées
// dans un tableau liste1[]
foreach ($liste1 as $value) {
$_SESSION[‹ liste1 ›][] = $value; // on enregistre toutes les valeurs de liste1 dans le tableau de session $_SESSION[‹ liste1 ›][]
}

// pareil pour liste2[]
foreach ($liste2 as $value) {
$_SESSION[‹ liste2 ›][] = $value; // on enregistre toutes les valeurs de liste2 dans le tableau de session $_SESSION[‹ liste2 ›][]
}
?>[/code]
On va utiliser les crochets vides pour le tableau de session afin de ne pas s’occuper de gérer les lignes du tableau. Ca faciletera grandement les opérations dessus, comme les effacements, ajouts etc… et nous évitera d’écraser des données par mégarde :stuck_out_tongue:

Pour effacer les données, un truc du genre:

[code]<?php
// On affiche les résultats des tableaux avec une boîte à cocher pour l’effacement
print « <form method=« POST » action=« effacer.php »> »;
foreach ($_SESSION[‹ liste1 ›] as $key => $value) { // tableau liste1[]
print « $value <input type=« checkbox » name=« effacer1[] » value= »$_SESSION[‹ liste1 ›][$key]" />";
}
foreach ($_SESSION[‹ liste2 ›] as $key => $value) { // tableau liste2[]
print « $value <input type=« checkbox » name=« effacer2[] » value= »$_SESSION[‹ liste2 ›][$key]" />";
}
print «  »;

// effacer.php
foreach ($effacer1 as $v) { // on efface les entrées de la liste 1
unset($_SESSION[‹ liste1 ›][$v]);
}
foreach ($effacer2 as $k) { // on efface les entrées de la liste 2
unset($_SESSION[‹ liste2 ›][$v]);
}
?>[/code]
J’ai fait ça vite fait, mais le principe est là. Après tout ça, tu peux stocker tous les résultats dans une table MySQL lors de la validation finale et détruire la session pour éviter les erreurs.

Tu peux aussi faire comme fser le propose, ça peut être plus simple à gérer. Maintenant, tout dépend tes besoins, ça peut grandement alourdir les traitements si tu as un nombre conséquent d’utilisateurs, de faire xx requêtes toutes les 2 secondes sur les tables. A toi de voir :stuck_out_tongue:
Je passerais quand même l’id de session (<?php echo SID?>) dans l’URL en cas que l’utilisateur ait désactivé complètement les cookies (tout dépend encore une fois à quel public est destiné ton application).
(note: <? echo SID?> n’est pas nécessaire, si --enable-trans-sid a été activé à la compilation de PHP.)

Merci pour les tuyaux, je vais étudier ça. En fait le soucis, était de trouvé le système pour incrémenté la liste tout en gardant les choix précédent.

Pour les utilisateurs, pour le moment ça va juste servir pour une dixaines de potes, si ça tourne bien je pourrais eventuellement en faire profité d’autre personnes.

C’est en fait (pour ceux qui connaissent) un éditeur de feuille d’armée pour Warhammer 40 000.

[quote name=‹ Brisco › date=’ 11 Dec 2004, 20:04’]Merci pour les tuyaux, je vais étudier ça. En fait le soucis, était de trouvé le système pour incrémenté la liste tout en gardant les choix précédent.
[right][post=« 312079 »]<{POST_SNAPBACK}>[/post][/right][/quote]
Mon premier bout de code peut convenir pour ça. Comme j’ai indiqué, l’utilisation des crochets vides dans les tableaux des variables t’enlève ce problème. En ne spécifiant pas de lignes, PHP va gérer ça tout seul en incrémentant automatiquement à la suite (ce qui permet de facilement ajouter, effacer etc… des données à ta liste sans t’occuper de rien).

Maintenant, tu peux effectivement faire comme fser l’a proposé avec des variables classiques couplées à une base MySQL. Avec une dizaine d’utilisateurs, ça devrait aller :stuck_out_tongue:

Il est vrai que ça fait un bail que j’ai pas fait de php, encore moins pour beaucoup d’utilisateurs :stuck_out_tongue:
alors niveau optimisation … :stuck_out_tongue:

  • oui faudrait que j’apprenne a optimiser -