Liste déroulante via un fichier txt complexe

Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
- - Dernière réponse :  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.
Afficher la suite 

Votre réponse

14 réponses

Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366
0
Merci
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 ?
Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
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>
Commenter la réponse de lems01568000
Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366
0
Merci
Il te faut 3 explodes.
1 sur le ";"
Puis deux sur les ":"
Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
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à :)
Commenter la réponse de lems01568000
Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366
0
Merci
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
Commenter la réponse de jordane45
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
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
Commenter la réponse de lems01568000
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
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>
jordane45
Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366 -
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
je dois utiliser la fonction GET dans la page résultat pour appeler mon select = ville
Commenter la réponse de lems01568000
Messages postés
28
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
8 octobre 2013
1
0
Merci
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.
Commenter la réponse de nicotontige
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
<?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
chichi-25
Messages postés
11
Date d'inscription
mercredi 2 octobre 2013
Statut
Membre
Dernière intervention
17 octobre 2013
-
Bonjour,
j'ai un problème similaire, est-ce que tu as trouvé la solution?
merci
chichi-25
Messages postés
11
Date d'inscription
mercredi 2 octobre 2013
Statut
Membre
Dernière intervention
17 octobre 2013
-
est-ce que tu pourrais me donner un coup de main s'il te plait?
jordane45
Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366 -
Bonjour chichi.
Tu ferais mieux d'ouvrir ta propre question sur le forum en expliquant le plus clairement possible ton souci.
Commenter la réponse de lems01568000
Messages postés
7
Date d'inscription
dimanche 6 octobre 2013
Statut
Membre
Dernière intervention
7 octobre 2013
0
Merci
$fichier devrait écrire à la fin du lien : montreal.txt ou quebec.txt tout dépendant du choix effectué
Commenter la réponse de lems01568000
Messages postés
25484
Date d'inscription
mercredi 22 octobre 2003
Statut
Modérateur
Dernière intervention
12 mai 2019
366
0
Merci
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.


Commenter la réponse de jordane45
Messages postés
28
Date d'inscription
mardi 25 octobre 2005
Statut
Membre
Dernière intervention
8 octobre 2013
1
0
Merci
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
Commenter la réponse de nicotontige
Messages postés
11
Date d'inscription
mercredi 2 octobre 2013
Statut
Membre
Dernière intervention
17 octobre 2013
0
Merci
j'ai un probleme similaire, est-ce que tu as trouvé la solution?
merci
Avez-vous trouvé une solution au problème ?
Commenter la réponse de chichi-25
0
Merci
Avez-vous trouvé la solution ?
Commenter la réponse de pat8

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.