Précédent   Forum des professionnels en informatique > PHP > Langage > Formulaires
Formulaires Forum d'entraide sur les formulaires avec PHP. Avant de poster -> FAQ formulaires, Cours de formulaires et Sources de formulaires
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 04/08/2008, 12h04   #1
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Par défaut Liste déroulante dynamique

Bonjour,
Je suis en train de créer un petit menu permettant de modifier/supprimer des lignes contenu dans un fichier texte sous la forme :

Dupont Thomas 21
Jean Jacques 56

Je voudrais donc afficher dans ma liste c'est nom afin de les avoirs en variable pour pouvoir par la suite executer mes actions.

Code :
1
2
3
4
5
6
7
 
    <SELECT name="fonction">
        <OPTION VALUE="choix">
        <?php echo "$contents"; ?>
        </OPTION>
 
    </SELECT>
Ceci marche mais m'affiche tous sur une seule ligne, logique d'ailleur...
Voila je me demande si c'est possible de faire ca ?

Merci d'avance pour vos réponses
Yann
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 12h37   #2
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Ben ouais normal que t'aies tout sur une seule ligne.

Il faut qu'à chaque nouvelle ligne de ton fichier, tu créées une nouvelle option dans ta liste déroulante.

D'ailleurs au lieu de faire:
Code php :
<?php echo "$contents"; ?>
Fais plutôt:
Code php :
<?php echo $contents; ?>
Pas besoin de créer une chaine de caractères, tu perds en performance pour rien
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 12h40   #3
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Salut et bienvenue dans les forums de développez.com !

Si il s'agit d'une chaîne de caractères, il faut déjà la transformer en tableau. Il faudra donc spécifier le séparateur.
Ensuite, tu génères les options avec les élement de ce tableau. Exemple :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
<?php
$chaine='choix;element 1;element 2;element 3;element 4';
 
$tableau=@explode(';',$chaine);
 
echo '<select name="fonction">'."\n";
 
foreach($tableau as $key=>$value)
  echo '<option value="'.$key.'">'.$value.'</option>'."\n";
 
echo '</select>'."\n";
?>
Voici le résultat : http://sub0.developpez.com/php/select.php
Regarde le code source de cette page pour voir le résultat en HTML...
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 13h32   #4
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Ca marche trop bien !
Merci beaucoup de vos réponses si rapide !

Juste une petite question avant de mettre "Résolu", peut-on formater la chaine pour n'afficher que la 1er colonne du fichier ou ca serait trop compliqué ?
Par exemple, dans mon cas, juste le nom ?
Merci d'avance !

Yann
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 13h48   #5
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Citation:
Envoyé par horus535 Voir le message
peut-on formater la chaine pour n'afficher que la 1er colonne du fichier
J'ai un peu de mal à comprendre ta question...
De quel fichier parles-tu ? De quelle colonne ?

Dans la démo, je ne vois aucun fichier et aucune colonne.
Il ya seulement un script, une chaîne, un séparateur, un tableau, une boucle, une liste déroulante...
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 14h04   #6
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Je crois que j'ai compris, si ça te dérange pas sub0, je reprends la main

En fait, il a un fichier qui stocke une série de noms, prénoms et age.

Il en parle ici:
Citation:
Envoyé par horus535 Voir le message
Je suis en train de créer un petit menu permettant de modifier/supprimer des lignes contenu dans un fichier texte sous la forme :

Dupont Thomas 21
Jean Jacques 56
Donc en fait là l'idée, c'est d'isoler le nom pour n'afficher que lui.

Ce qui va être galère puisque le séparateur entre le nom et le prénom, c'est un espace, or l'espace sert aussi dans les noms à particule, par exemple. EN manipulant avec les expressions régulières ceci-dit, tu devrais pouvoir isoler le nom. J'ai la tête creuse et le ventre plein là alors je saurais pas te l'écrire, mais je sais que c'est faisable. Si elle est pas sortie avant, j'essaierais de te la mettre quand j'aurais digéré
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 14h16   #7
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Hmm j'ai un petit problème, quand je veux récupérer une donnée de la liste, je la séléctionne et clique sur un bouton qui (pour le moment) m'éxécute :

Code :
1
2
3
4
5
 
<?php
$choix = $_POST["fonction"];
echo "$choix";
?>
J'ai un chiffre 0 ou 1 en fonction de la donnée que je séléctionne.

Pourtant mon code donne :

Code html :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
 
<FORM method=post action="collecte.php">
<TABLE BORDER=0>
<TR>
	<TD>Collecter les informations sur : </TD>
	<TD>
	<?php include("menuderoulant.php"); ?>
	</TD>
 
	<TD COLSPAN=2>
	<INPUT type="submit" value="Collecter">
    </TD>
 
</TR>
</TABLE>

Je poste tout en cherchant !
Merci

PS: merci a toi gwinyam, digère bien :p je règle ce problème avant d'essayer de formater la chaine !
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 15h15   #8
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
C'est normal qu'il te sorte soit un 1, soit un 0. Si tu lui fournis que deux lignes. Tu lui en fournirais 3 qu'il te sortirait aussi un 2.

Par contre, je réitère, n'utilise pas ça:
Mais ça:
Tu gagneras en performance. Certes le gain est absolument imperceptible pour un truc de cette taille mais c'est une habitude à prendre

Pareil:
Code php :
<?php include("menuderoulant.php"); ?>
Utilise plutôt :
Code php :
<?php include('menuderoulant.php'); ?>

En fait, le délimiteur de chaîne " permet d'indiquer à PHP qu'il y a des variables à interpréter dans la chaine et donc qu'il doit parcourir la chaine avant de l'utiliser. Ce qui est une perte de temps de le faire quand c'est une chaine sans variable ou quand la chaine est justement seulement une variable.
En utilisant le symbole ', tu indiques à PHP d'utiliser la chaine telle qu'elle est. Donc gain de temps de traitement
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 15h25   #9
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Ok merci des conseils j'optimise le code la !
Mais le truc c'est que je veux pas un 0,1,2 ou même 3, je veux la ligne de ma liste déroulante que j'ai choisi

Merci !
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 16h20   #10
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Citation:
Envoyé par horus535 Voir le message
Ok merci des conseils j'optimise le code la !
Mais le truc c'est que je veux pas un 0,1,2 ou même 3, je veux la ligne de ma liste déroulante que j'ai choisi

Merci !
Dans ce cas, il suffit de récupérer l'élement correspondant dans le tableau :
Citation:
Envoyé par gwinyam Voir le message
Ce qui va être galère puisque le séparateur entre le nom et le prénom, c'est un espace, or l'espace sert aussi dans les noms à particule, par exemple.
Je ne pense pas que ça posera problème.
Suffira de compter le nombre d'élément pour voir si il yen a un de trop...
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 16h30   #11
Membre Expert
 
Avatar de gwinyam
 
Homme Mathieu ROBIN
Développeur Web
Inscription : mai 2006
Messages : 1 116
Détails du profil
Informations personnelles :
Nom : Homme Mathieu ROBIN
Âge : 25
Localisation : France, Paris (Île de France)

Informations professionnelles :
Activité : Développeur Web
Secteur : High Tech - Opérateur de télécommunications

Informations forums :
Inscription : mai 2006
Messages : 1 116
Points : 2 142
Points : 2 142
Citation:
Envoyé par Sub0 Voir le message
Je ne pense pas que ça posera problème.
Suffira de compter le nombre d'élément pour voir si il yen a un de trop...
Ou plutôt de capturer l'ensemble de la ligne hormis les derniers digits et le dernier bloc alphabétique (pouvant comprendre un -), comme ça on garde que la première "colonne" en étant sûrs de ne pas avoir de souci avec les noms à particule, et les prénoms composés.

Un truc du genre:
#^([a-z-. ]{1,}) [a-z-]{1} [0-9]{1,}$#i

Enfin je suis pas sûr à 100%, mais ça devrait être assez similaire. Le nom complet étant ce que retournera la première parenthèse capturante.
gwinyam est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 16h51   #12
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Bon, je suis complêtement pommé :/

Je résume donc :
Code :
1
2
3
4
5
6
7
8
9
10
11
 
<TR>
<TD> Liste : </TD>
<TD><?php include("menuderoulant.php"); ?></TD>
<FORM method=post action="modif.php">
<TD COLSPAN=2><INPUT type="submit" value="Modifier"></TD>
</FORM>
<FORM method=post action="sup.php">
<TD COLSPAN=2><INPUT type="submit" value="Supprimer"></TD>
</FORM>
</TR>
J'ai ce code qui que me montre bien toute ma liste dans le menu déroulant et je voudrais donc pouvoir modifier ou supprimer ce que je séléctionne, or je n'arrive pas a récupérer les données que génére menuderoulant.php.

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
<?php
$filename = "liste.txt";
$handle = fopen ($filename, "r");
$contents = fread ($handle, filesize ($filename));
$tableau=@explode(';',$contents);
 
echo '<select name="fonction">'."\n";
 
foreach($tableau as $key=>$value)
  echo '<option value="'.$key.'">'.$value.'</option>'."\n";
 
echo '</select>'."\n";
fclose ($handle);
?>
Par exemple, pour modif.php je met :
Code :
1
2
3
4
 
$choix = $_POST["fonction"];
 
echo $choix;
J'ai essayé aussi

Code :
1
2
 
echo $tableau[$choix];
Rien ne s'affiche !
Dur dur de se mettre au php :/
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 04/08/2008, 17h16   #13
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Pourquoi ne pas tout mettre dans le même script ?
Avec pas mal de corrections, cela donne :
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
<?php
 
//==============================================
// Récupèration des données dans le fichier
//==============================================
$filename='liste.txt';
$handle=@fopen($filename,'r');
if($handle) 
  $contents=fread($handle,filesize($filename));
@fclose($handle);
$tableau=@explode(';',$contents);
 
 
//==============================================
// Traitement du formulaire
//==============================================
if(isset($_POST["fonction"])){
  $choix=$_POST["fonction"];
  echo $tableau[$choix];
 
  // ...
}
 
//==============================================
// Code HTML du formulaire
//==============================================
echo '<form method="post">
<table border="1">
<tr>
<td> Liste : </td>
<td>
<select name="fonction">';
 
foreach($tableau as $key=>$value)
  echo '<option value="'.$key.'">'.$value.'</option>'."\n"; 
 
echo '</select>
</td>
<td>
  <input type="submit" value="Supprimer" />
</td>
</tr>
</table>
</form>';
 
?>
Reste à obtenir les élements à partir du fichier.
Pour l'instant, le séparateur est toujours un point-virgule...

[EDIT]
Tu peux tester ce code ici : http://sub0.developpez.com/php/select2.php
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 05/08/2008, 09h22   #14
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Merci beaucoup, je mis remet ce matin pour essayer de terminer tous ca !
Intégrer 2 boutons également, et vraiment supprimer ou modifier la valeur !

Je vous tiens au courant et posterai mon code pour les suivant !
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 14/08/2008, 09h37   #15
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Bonjour ! mon programme avance très bien, j'en suis même arrivé au stade de l'optimisation et j'ai une question.

J'ai un fichier texte avec dedans :
Citation:
Nom IP type emplacement ;
Que je met donc dans la liste liste déroulante dynamique de Sub0 (merci a toi) et je voudrais afficher que le "NOM" mais qui donne accès quand même aux autres variables nécessaire a l'éxécution de mon script.

Possible ou non? j'ai cherché toute la journée hier et :s

Merci d'avance
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 16/08/2008, 12h41   #16
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Citation:
Envoyé par horus535 Voir le message
je voudrais afficher que le "NOM" mais qui donne accès quand même aux autres variables nécessaire a l'éxécution de mon script
Si j'ai bien compris...

Si tu veux séparer les éléments, récupère le 1er comme ceci :
Code :
1
2
3
4
foreach($tableau as $key=>$value){
  $tab=explode(' ',$value);
  echo '<option value="'.$key.'">'.$tab[0].'</option>'."\n"; 
}
[EDIT] A noter qu'il n'est pas bon d'utiliser l'espace comme séparateur, si les éléments en contiennent, cela fausse tout.
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 13h59   #17
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Merci beaucoup !

Je n'ai plus beaucoup de choses à voir pour que mon prog sera fini

1.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
 
echo '<FORM method="post">
<table border="1">
<TR>
<TD> Liste : </TD>
<TD>
<select name="fonction">';
 
foreach($tableau as $key=>$value){
  $tab=explode(' ',$value);
  echo '<option value="'.$key.'">'.$tab[0].'</option>'."\n"; 
}
 
echo '</select>
</TD>
<TD COLSPAN="2">
  <INPUT type="submit" value="voir">
</TD>
</TR>
</table>
</FORM>';
Ce code est génial mais si je veux rajouter un bouton pour une autre fonction? je sais recopier le code mais ca me le met en double, et je galère vraiment avec les echo '' pour rajouter le bouton, j'ai pourtant essayer pas mal de trucs.

2.
Je voudrais également trier mon fichier texte par ordre alphabétique.

3. (optionnel)
Mettre chaque ligne de mon fichier dans un tableau grace au séparateur ";"

Si tu pouvais m'aider une derniere fois Sub0 !
Je te remercie d'avance
Horus
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 19/08/2008, 18h43   #18
Expert Confirmé
 
Avatar de Sub0
 
Homme
Inscription : décembre 2002
Messages : 3 468
Détails du profil
Informations personnelles :
Sexe : Homme
Âge : 39

Informations forums :
Inscription : décembre 2002
Messages : 3 468
Points : 3 115
Points : 3 115
Envoyer un message via MSN à Sub0 Envoyer un message via Skype™ à Sub0
Citation:
Envoyé par horus535 Voir le message
si je veux rajouter un bouton pour une autre fonction? je sais recopier le code mais ca me le met en double, et je galère vraiment avec les echo '' pour rajouter le bouton, j'ai pourtant essayer pas mal de trucs.
Pour rajouter un bouton, ajoute un input :
Code :
1
2
  <INPUT type="submit" value="voir">
  <INPUT type="submit" value="Autre chose">
Citation:
Envoyé par horus535 Voir le message
Je voudrais également trier mon fichier texte par ordre alphabétique.
Utilise la fonction sort() par exemple.

Citation:
Envoyé par horus535 Voir le message
Mettre chaque ligne de mon fichier dans un tableau grace au séparateur ";"
Utilise la fonction readfile() puis la fonction explode().
Sub0 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 20/08/2008, 12h50   #19
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Merci, jusque la je te suis, j'ai réussi à bien mettre mes données dans un tableau ! Juste un détail on peux initialiser keys a 1?
Histoire d'avoir

Citation:
1 Dupont Version 9
2 Mireille Version 8
au lieu de :
Citation:
0 Dupont Version 9
1 Mireille Version 8
Par contre, pour les boutons, si je rajoute juste un INPUT, il traitera rien du tout, je rajoute juste un visuel d'un bouton, vu que pour traiter il utilise :
Citation:
if(isset($_POST["fonction"])){
$choix=$_POST["fonction"];

Je continue de tester

Merci
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 21/08/2008, 10h47   #20
Invité de passage
 
Inscription : août 2008
Messages : 28
Détails du profil
Informations forums :
Inscription : août 2008
Messages : 28
Points : 1
Points : 1
Hello !
J'ai trouvé pour les boutons, je donne la méthode :
Code :
1
2
 
 <INPUT type="submit" name="supprim" value="Supprimer">
On rajoute l'option "name"

Puis grâce au isset :
Code :
1
2
3
4
5
6
7
8
9
 
if(isset($_POST["fonction"])){
  $choix=$_POST["fonction"];
 
  if(isset($_POST["supprim"]))
   {
  ...
    }
}
On gère les différents boutons !

Pour l'indice du foreach j'en est plus besion également.

Par contre, dans ma liste déroulante, il y a un "vide" à la fin, pourtant le fichier .txt n'a pas de ligne vide, ya une astuce pour la virer ?
horus535 est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 04h53.


 
 
 
 
Partenaires

Hébergement Web