Creer un menu deroulant en passant par un fichier CSV - PHP - Programmation
Marsh Posté le 18-05-2009 à 13:56:24
ben
tu as plusieurs étapes
1 etape
selection de ton csv
donc un input de type file
2 etape,
tu valide ton formulaire, et tu lit le contenu de ton csv que tu met dans un tableau
Code :
|
3 etape
tu parcours le tableau et tu le met dans un select
Marsh Posté le 18-05-2009 à 14:32:42
<?php
<input type='file' name='Produits'>
//voici un exemple de lecture d'un fichier csv qui retourne le tout dans une tableau
function read_csv($Produits) // transfert le fichier dans un tableau
{
if ( $FILE=fopen($Produits,"r" ) ) // ouverture du fichier
{
while ($ARRAY[]=fgetcsv($FILE,1024,";" )); // lire ligne par ligne et coupe colonne par colonne
fclose($FILE) ; // ferme le fichier
array_pop($ARRAY); // efface la derniere ligne
return $ARRAY; // renvoie le tableau
}else{ /* le fichier n'existe pas */
echo "Fichier introuvable !<br>Importation stoppée.";
exit();
}
}
?>
J'doit avoir pb de selection du fichier déja...
Marsh Posté le 18-05-2009 à 14:46:08
euh une question c'est exactement ton code?
car la il te manque le formulaire,<form >....< /form>
le traitement php pour traiter ton formulaire POST
Marsh Posté le 18-05-2009 à 16:14:26
Après modification intense de mon code lol, j'ai réussi a mettre mes 2 menu déroulant... sauf qu'il ne sont pas lier...
Si tu as une idée pour les lier
Code :
|
Marsh Posté le 18-05-2009 à 16:20:48
comment ca liée?
et
tes select ne vont pas te servir a grand chose, pour l'instant, a part l'affichage, car toutes les options ont la même valeur.
Marsh Posté le 18-05-2009 à 16:26:04
Oui je sais parce que la le code est vrement pour des menu individuel.
Ben lorsque je choisi une valeur dans le premier menu, il n'y a que des valeurs qui lui correspondent dans le second menu.
ex :
- Audio => - Haut parleurs
- Microphone
Marsh Posté le 18-05-2009 à 16:34:27
premièrement mets ton code entre les balises [cpp] et [ /cpp]
ensuite j'ai compris que tu veut afficher dans la seconde liste les informations en fonction de ce qui a ete dans la premiere.
Mais
le premier souci, est que déja la valeur de ton premier select sera toujours la meme ("ingénieur" ) donc lorsque tu recupera la valeur de cette liste pour mettre la seconde a jour, ca sera toujours en fonction de ingenieur
et ensuite, ta seconde liste, disons que j'ai audio comme tu dit,
comment sont structuré tes infos pour choisir les informations qui concerne l'audio?
Marsh Posté le 18-05-2009 à 16:45:34
de la même façon que la première liste deroulante, sauf qu'elle ne contient que les 2 attribut cité plus haut.
Ces attribut sont présent dans le fichier .csv .
La valeur "ingénieur" change lorqu'elle est selctionner.
Marsh Posté le 18-05-2009 à 16:52:00
maktu a écrit : |
Hein??
puis pour continuer tes select n'ont aucun nom
<select name="nomselect" id="nomselect" >
ensuite
ton fichier
tu as apparament deux colonnes A les Familles et B les sous familles
si tu sélectionne une valeur de la colonne A , comment sait tu quels sont les valeurs B a sélectionner
montre un extrait de ton fichier.
Je crois qu'il te manque beaucoup de notions.
Marsh Posté le 18-05-2009 à 17:16:07
"AUDIO";"Haut-Parleur";"SONY";"Non disponible";"SONY SRS-D511";"111808";74,75;0,42;19,6;89,9;8,62;"Système de haut-parleurs 5.1 home cinéma pour PC multimédia - 5 x Haut-parleur satellite 5 Watt + 1 x caisson de basses 25 Watt "
"AUDIO";"Haut-Parleur";"TRUST";"Disponible";"TRUST SP-6200 - 5.1 Surround Speaker Set";"560084";24,5;0;19,6;29,3;5;"Ensemble d'enceintes surround avec canaux 5.1 pour DVD amélioré ou audio de jeu (5x 3 Watt t 1x 6 Watt RMS)"
"AUDIO";"Lecteur MP3-MP4";"EPSON";"Non disponible";"EPSON P-2000";"530427";384,07;0,03;19,6;459,38;0,92;"Lecteur AV numérique - DD 40 Go - 3.8"" - Formats de lecture vidéo : MPEG-4, Motion JPEG"
"AUDIO";"Lecteur MP3-MP4";"MARQUES DIVERSES";"Disponible";"Lecteur MP3/MP4 R-965";"551003";40,5;0;19,6;48,44;0,6;"Baladeur MP3 et MP4 - Tuner FM - 512 Mo - Dictaphone - Ecran LCD 65000 couleurs - Equaliser mode - USB 2.0"
Marsh Posté le 18-05-2009 à 17:45:26
ah d'accord
excuse moi, alors, mais je pensait que tu comprenais pas tous, mais c'est pas le cas,
donc
déja apres import de ton fichier, je mettrai tous le fichier dans un tableau stocké en session.
Ensuite,
donc pour la premiere liste, pas de probleme, sauf faudrai que tu rajoute l'option onchange() et la tu fait valider ton formulaire,
des que ton formulaire sera validé
tu recupere la valeur de la liste
$valeurfamille=$_POST["nomselect1"]
et ensuite dans la boucle du deuxieme select tu fait un test
if($tab[0]==$valeurfamille) // si le test est correct tu met la valeur selectionné dans le select
Marsh Posté le 18-05-2009 à 17:52:58
D'accord je vais essayer. Je me déconnecte pour ce soir.
Je posterais le résultat demain. Merci beaucoup. Bonne soirée.
Marsh Posté le 19-05-2009 à 10:28:51
Code :
|
Je ne pense pas l'avoir mise au bon endroit pour récupérer la valeur.
Où met tu les 2nd If dans la 2nd boucle ?
Marsh Posté le 19-05-2009 à 10:51:31
Ouf, c'est bien tu as pas mal avancé
1 remarque:
encore les valeurs de tes options
pour le premier select il faut que tu fasse par exemple
Code :
|
ensuite je comprends pas ton test sur les sessions, en faite tu as pas besoin de session car tu as ton fichier en local,
tu l'ouvre a chaque chargement c'est pas trés propre,
apres tu peut améliorer.
Tu as pas besoins de ouvrir deux foix ton fichier, une fois que tu l'as ouverts et que tu as récuperer le tableau c'est bon , tu peut t'en servir partout dans la page.
et ta variable session['famille']='aa' ,je sais pas trop a quoi elle sert
enfin bref, voila
le code un peu corrigé
Code :
|
donc tu peut optimiser la lecture du fichier,eviter qu'elle soit fait plusieurs fois,
ensuite faite attention aux caractères spéciaux dans la liste utilise htmlspecialchars, ca resoudra les problemes.
Marsh Posté le 19-05-2009 à 11:18:04
J'ai juste tester ton code sans le modifier.
J'obtient qu'une seule liste des Familles.
Et il y a des doublons. "Audio" apparait autant de fois qu'il est présent dans le fichier Csv.
La Sous Famille n'apparait pas.
Marsh Posté le 19-05-2009 à 15:05:35
pour les doublons a toi de faire les vérifications
et la sous famille n'arraparait que si tu as choisis une famille et que tu appuye sur OK
Marsh Posté le 19-05-2009 à 15:57:54
Merci infoman, cela marche.
Il me reste a chasser les doublon =)
Ce Principe marcherai pour une 3ème ( et dernière ) liste ?
Marsh Posté le 19-05-2009 à 16:01:13
ouais biensur, pour autant de liste que tu veut
apres, si tu as en beaucoup plus, je pense que tu peut largement optimiser
deja en utilisant une fonction, car c'est toujours le meme code qui sera appele, a part pour l'index de la colonne et les valeurs comparées
ensuite au lieu a chaque fois d'ouvrir le fichier, tu l'ouvre une fois et tu le met dans un tableau, que tu appele a chaque fois que tu en as besoin
Voila.
Marsh Posté le 19-05-2009 à 16:13:22
Merci j'y suis arriver, j'ai juste combiné ta solution et la mienne avec un &&
Marsh Posté le 19-05-2009 à 16:20:03
Une dernière chose. Saurais-tu juste changer le onChange de façon ne pas passer par le bouton ?
mais toujour en ayant les liste lier...
Je ne suis pas pointilleux, mais je fait ce site pour une personne. Et le bouton ne l'emballe pas.
Marsh Posté le 19-05-2009 à 16:22:44
onchange="document.form1.submit();" //ton formulaire va se valider automatiquement des que tu auras fait le changement
Marsh Posté le 19-05-2009 à 16:40:10
la 3 ème liste est lier a la 1 et nn a la seconde ... c'est mon dernier soucis lol
Marsh Posté le 19-05-2009 à 16:59:57
il te faut recuperer le post du 2 select
et tester la valeur avec la 3 colonne
Marsh Posté le 19-05-2009 à 17:04:42
oui c'est ce que j'ai fait mais j'ai un message d'erreur. Il me le prend pas en compte. Tu veut le code ?
Marsh Posté le 19-05-2009 à 17:09:21
Code :
|
Marsh Posté le 19-05-2009 à 17:26:21
c'est quoi le message d'erreur qu'il te marque
# echo "<OPTION VALUE='$famille'>".$famille."</OPTION>";
# echo $famille."<br/>";//cette ligne ne sert a rien ici, elle se retrouve au milieu de ton select
Marsh Posté le 19-05-2009 à 17:33:23
Parse error: parse error in D:\wamp\www\Stage\test7.php on line 105
c la ligne où il y a la balsie </html> et si je ne met pas le
# <?php
# if(isset($_POST["SousFamille"])){// comme ca, cela ne s'affiche que si tu as sélectionné que la famille.
#
#
# $VSfamille=$_POST["SousFamille"]// le isset au dessus evitera que t'es une erreur si le post "famille" n'existe pas
# ?>
cette erreur ne se met pas
Marsh Posté le 20-05-2009 à 09:15:33
ton code c'est celui juste dessus,
si c'est pas la cas, copie ton code telle quelle pour que j'ai les numéro de lignes.
Marsh Posté le 20-05-2009 à 11:21:47
avant le
if(isset($_POST["SousFamille"])){
il te manque une accolade fermande }
Marsh Posté le 20-05-2009 à 11:27:42
L'erreur n'y ai plus... mais le menu Marque ne fonctionne toujours pas , il n'est pas relier au menu SousFamille
Marsh Posté le 20-05-2009 à 11:36:37
normal
$_SESSION[$marque] n'est jamais initialise,
il faut que tu le mette dans la seconde liste
Marsh Posté le 20-05-2009 à 11:47:01
j'ai essayer mais sa ne change rien. Je ne l'ai p-e pas mit au bon endroit.
$_SESSION[$sousfamille] n'était pas initialiser non plus dans ce cas.
Marsh Posté le 20-05-2009 à 13:43:48
je sais pas a quoi te serve tes sessions, mais la elles ont aucune utilité
surtout que a la fin, tu les détruits, les sessions on s'en sert pour garder des variables en mémoire entre différents chargement de page,
si ca reste sur ta page autant utilisé, une variable
et apres normal que la troisieme liste ne s'affiche pas il te manque le onchange sur la second liste
Marsh Posté le 20-05-2009 à 14:12:24
Pour le OnChange, j'ai fait quelques teste. Je recherche encore quel est le bon.
Marsh Posté le 18-05-2009 à 11:32:15
Bonjour,
Je souhaiterais creer un menu déroulant qui utilise des informations qui sont stocker dans un fichier .csv. Ceci en php.
Quelqu'un aurait une idée de script ?