Liste déroulante via un fichier txt complexe

lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013 - 6 oct. 2013 à 20:06
 pat8 - 12 mai 2019 à 06:16
Bonjour,

Je dois créer une liste déroulante à partir d'un fichier txt qui ressemble à ceci :
Ville:Montréal; Fichier:montreal.txt
Ville:Québec; Fichier:quebec.txt
Ville:Blainville; Fichier:blainville.txt

La seule chose que je dois voir dans ma liste c'est le nom de la ville. Lorsque je clique sur Montréal par exemple, je dois être redirigé vers une nouvelle page qui celle-ci me donnera le contenu de montreal.txt.

Je sais que je dois utiliser la clause explode mais je n'y arrive pas.

14 réponses

jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
6 oct. 2013 à 20:49
Bonjour.

Pourrais tu nous montrer ton code pour qu'on puisse essayer de voir ce qui ne fonctionne pas ?
Lors de ton explode définies tu le séparateur ?
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
6 oct. 2013 à 20:51
Mon problème c'est que j'ai 2 séparateur à mettre et je ne sais pas ou... donc ceci me donne le résultat suivant : Montréal; Fichier

<select name="Ville">
<?php
$menu_items = file("villes.txt");


foreach ($menu_items as $item)
{
// Explode
$menu_item_exploded = explode(":", $item);
$option_value = htmlspecialchars(trim($menu_item_exploded[0]));
$option_label = htmlspecialchars(trim($menu_item_exploded[1]));

echo "<option value='$option_value'>$option_label</option>";

}?>
</select>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
6 oct. 2013 à 20:55
Il te faut 3 explodes.
1 sur le ";"
Puis deux sur les ":"
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
6 oct. 2013 à 20:59
Je le sais mais je ne sais pas où le mettre. J'ai tout essayé et ça ne fonctionne pas. C'est la raison pourquoi je suis là :)
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié par jordane45 le 6/10/2013 à 21:10
Il faut commencer par les ";".
$line = explode(";", $item); 
$exp_ville = explode(":", $ line [0]);
$ville = $exp_ville [1];
// puis idem pour recup le fichier. 
$exp_file=explode (":", $ line [1]);
$file= $exp_file[1];


Cordialement,
Jordane
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
6 oct. 2013 à 21:15
Merci mais tout ça je le mets dans mon foreach ? et si je veux que lorsque l'utilisateur valide son choix que la page qui apparaitra soit celle avec l'information de l'URL ? soit par exemple le contenu de montreal.txt
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
6 oct. 2013 à 21:24
Avec ceci le tout fonctionne. Je garde juste ma ville.
Maintenant il faut que le valider (soit le montreal.txt) et qu'il affiche les infos relatives. je sais comment faire apparaitre les éléments avec un tableau associatif mais dans le code de la première page je fais comment ?


<?php
$menu_items = file("villes.txt");

foreach ($menu_items as $item)
{
// Explode
$menu_item_exploded = preg_split('/[:;]/', $item);
$option_value = htmlspecialchars(trim($menu_item_exploded[0]));
$option_label = htmlspecialchars(trim($menu_item_exploded[1]));

echo "<option value='$option_value'>$option_label</option>";

}?>
</select>
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
Modifié par jordane45 le 7/10/2013 à 00:05
Merci d'utiliser la coloration syntaxique pour poster du code [ première icone en haut à droite lorsque vous écrivez ] =)>
<?php 
$menu_items = file("villes.txt"); 

foreach ($menu_items as $item) 
 { 
 // Explode 
 $menu_item_exploded = preg_split('/[:;]/', $item); 
 $option_value = htmlspecialchars(trim($menu_item_exploded[0])); 
 $option_label = htmlspecialchars(trim($menu_item_exploded[1])); 

 echo "<option value='$option_value'>$option_label</option>"; 

 }?> 
</select>


Ensuite, le code
$menu_item_exploded = preg_split('/[:;]/', $item); 

retourne un tableau =>
Array ( [0] => Ville [1] => Montréal [2] => Fichier [3] => montreal.txt )

Il faudrait plutôt utiliser :
$option_value = htmlspecialchars(trim($menu_item_exploded[3])); 
 $option_label = htmlspecialchars(trim($menu_item_exploded[1])); 


de cette manière, lorsque vous sélectionnez une ville, le fichier correspondant est contenu dans le VALUE du select.


je sais comment faire apparaitre les éléments avec un tableau associatif mais dans le code de la première page je fais comment ?
Là il faudra être un peu plus clair dans votre question car je ne la comprend pas. ( quelle première page ? pour faire quoi ? ... )

Si vous souhaitez que des actions se produisent lorsqu'un utilisateur sélectionne une ville dans votre liste déroulante, il faudra regarder du côté de ONCHANGE et du javascript
0
lems01568000
7 oct. 2013 à 14:14
je dois utiliser la fonction GET dans la page résultat pour appeler mon select = ville
0
nicotontige Messages postés 28 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 8 octobre 2013 2
Modifié par nicotontige le 7/10/2013 à 15:11
Bonjour,

à mon humble avis, c'est un truc comme ça qu'il te faut :
<html>
<head>
<script language=javascript>
 function change_page(obj) {
  if (obj.selectedIndex != 0) {
   location.href=obj.value;
  }
 }
</script>
</head>
<body>
<?php
echo '<select name="Ville" onchange="change_page(this);">';
echo '<option>-----</option>';
$menu_items = file("ville.txt");
foreach ($menu_items as $item)
{
 echo '<option value="'.preg_split('/er:/', str_replace("rn", "", $item), -1)[1].'">'.substr($item, 6, strpos($item, ";")-6).'</option>';
}
echo '</select>';
?>
</body>
</html>


sachant que j'ai fait en sorte que le premier choix dans la liste déroulante soit des entrées factices ("-----") afin de ne pas générer d'erreur et d'imposer un choix.
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
7 oct. 2013 à 19:38
<?php
error_reporting(E_ALL | E_STRICT);
$fichier = $_GET["ville"];
$nom='http://www.ville.com/'<gras>.$fichier</gras>;
$tab=file($nom,
FILE_IGNORE_NEW_LINES | FILE_SKIP_EMPTY_LINES);
if ($tab === false) {
echo "Oups... Une erreur s'est produite.";
} else {
// le contenu de tout le fichier est dans $tab
print_r($tab);
}
?>


Tout fonctionne si j'écris le lien complet soit montreal.txt à la fin de mon url : http://www.ville.com/montreal.txt

Mais en réalité je veux appeler la variable $fichier à la fin de mon lien pour que ca puisse afficher le choix choisi dans le menu deroulant (montrea, quebec, etc)

j'ai essayé $nom='http://www.ville.com/'.$fichier; mais ca marche pas. J'ai aussi essayé $nom='http://www.ville.com/$fichier'; marche pas... Comment on fait ?

Merci encore
0
chichi-25 Messages postés 11 Date d'inscription mercredi 2 octobre 2013 Statut Membre Dernière intervention 17 octobre 2013
15 oct. 2013 à 00:20
Bonjour,
j'ai un problème similaire, est-ce que tu as trouvé la solution?
merci
0
chichi-25 Messages postés 11 Date d'inscription mercredi 2 octobre 2013 Statut Membre Dernière intervention 17 octobre 2013
17 oct. 2013 à 03:38
est-ce que tu pourrais me donner un coup de main s'il te plait?
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
17 oct. 2013 à 08:24
Bonjour chichi.
Tu ferais mieux d'ouvrir ta propre question sur le forum en expliquant le plus clairement possible ton souci.
0
lems01568000 Messages postés 7 Date d'inscription dimanche 6 octobre 2013 Statut Membre Dernière intervention 7 octobre 2013
7 oct. 2013 à 19:39
$fichier devrait écrire à la fin du lien : montreal.txt ou quebec.txt tout dépendant du choix effectué
0
jordane45 Messages postés 38144 Date d'inscription mercredi 22 octobre 2003 Statut Modérateur Dernière intervention 21 avril 2024 344
7 oct. 2013 à 20:17
Bonsoir,

Deux questions :
$fichier = $_GET["ville"];
$nom='http://www.ville.com/'<gras>.$fichier</gras>;


1 ] Es-tu sûr que ta variable $fichier contient quelque chose ?
-> Fais donc un ECHO de cette variable pour t'en assurer. ( vérifie aussi l'existence du $_GET['ville'] via un ISSET )


2 ] C'est quoi ces balises GRAS que tu as mis dans ta variable $nom ?
-> Déjà il te manque un "." après ta variable $fichier... et je ne vois pas l'intérêt de mettre du "gras" dans une variable qui te sert ensuite de Nom de fichier à utiliser....
-> Idem que pour ville... fais donc un Echo de ta variable $nom pour en vérifier son contenu.


0
nicotontige Messages postés 28 Date d'inscription mardi 25 octobre 2005 Statut Membre Dernière intervention 8 octobre 2013 2
8 oct. 2013 à 09:58
Le fichier n'est pas sur le serveur web ?
Car dans ces cas là il vaut mieux mettre un chemin relatif
exemple :
$nom='../files/'.$fichier;

si c'est sur un serveur distant, il faut bien entendu vérifier que tu as les droits d'accès.

Maintenant, comme le conseille jordane45, il faut faire un echo de ta variable pour être sur
0
chichi-25 Messages postés 11 Date d'inscription mercredi 2 octobre 2013 Statut Membre Dernière intervention 17 octobre 2013
14 oct. 2013 à 23:37
j'ai un probleme similaire, est-ce que tu as trouvé la solution?
merci
0
Avez-vous trouvé une solution au problème ?
0
Avez-vous trouvé la solution ?
0
Rejoignez-nous