récupérer des informations dans un "select"

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : récupérer des informations dans un "select"

par kweb » 27 sept. 2007, 11:23

Je me suis emballé trop vite :?

Je ne comprend pas la fin de cette syntaxe que tu propose
...WHERE formation.cat_id = categorie.id"
dans la BD le champs pour l'id des catégorie on le nom suivant :
Table formation : id_categorie_formation
Table catégorie : id_categorie

Pourquoi ne pas utiliser ?
...WHERE formation.id_categorie_formation = categorie.id_categorie";

Je viens de faire un test en utilisant ta proposition et j'ai un bug d'affichage mais sans aucune erreur ?
et lorsque je test ce code en utilisant ton "if" mets en mettant mon "where", le "select" m'affiche autant de fois le nom des catégories qu'il y a de formation ? et avec des sauts de lignes entre chaque ???
le je commence à être perdu
<select name="categorie" id="categorie">
    <option value="">S&eacute;l&eacute;ctionner</option>
<?php 
$select2 = " SELECT formation.*, categorie.* FROM formation, categorie WHERE categorie.id_categorie = formation.id_categorie_formation";
$selected_retour = mysql_query ($select2) or die (mysql_error());
while ($ligne = mysql_fetch_assoc($selected_retour)) 
    { 
	$cat_id = $ligne['id_categorie_formation'];
	$selected = "";     	
	//echo '<option value="'.$ligne['id_categorie_formation'].";
	
		// On vérifie que "id_categorie_formation est égal à "id_formation", si OK on affiche "selected"
		if ( $ligne['id_categorie_formation'] == $ligne['id_categorie'] )
			{
			$selected = ' selected = "selected"';
			} 
			
	echo '<option value="'.$cat_id.'"'.$selected.'>'.$ligne['txt_categorie'].'</option>'; 
    } 
?>
</select>
Un petit rajout

voici ce que le code html me mets (un selected a tous):

Code : Tout sélectionner

<select name="categorie" id="categorie"> <option value="">S&eacute;l&eacute;ctionner</option> <option value="11" selected = "selected">0000</option> <option value="22" selected = "selected">Médecine général</option> <option value="22" selected = "selected">Médecine général</option> </select>


Quelques heures plus tard.....

Je pense avoir enfin trouvé la solution...
<select name="categorie" id="categorie">
    <option value="">S&eacute;l&eacute;ctionner</option>
<?php 
$select2 = " SELECT formation.*, categorie.* FROM formation, categorie WHERE formation.id_formation = $modifier ";
$selected_retour = mysql_query ($select2) or die (mysql_error());

while ($ligne = mysql_fetch_assoc($selected_retour)) 
    {     	
    echo '<option value='.$ligne['id_categorie'].'"';
	
        // On vérifie que "id_categorie_formation est égal à "id_formation", si OK on affiche "selected"
        if ( $ligne['id_categorie_formation'] == $ligne['id_categorie'] )
            {
            echo ' selected="selected"';
            } 
            
    echo '>'.$ligne['txt_categorie'].'</option>';
    }  
?>
</select>
Voici le code HTML

Code : Tout sélectionner

<select name="categorie" id="categorie"> <option value="">S&eacute;l&eacute;ctionner</option> <option value=11">0000</option> <option value=22" selected="selected">Médecine général</option> </select>
Je vais encore me répéter, mais merci à tout le monde !

par Yosh » 27 sept. 2007, 11:02

Alors déjà dans ta requête il te faut faire une jointure :

Code : Tout sélectionner

"SELECT formation.*, categorie.* FROM formation, categorie WHERE formation.cat_id = categorie.id"
Ensuite la remarque faites un peu plus haut est toujours d'actualité, à savoir le selected ne doit pas être dans le value, voila ce que je ferai dans ton cas :
$cat_id = $ligne['id_categorie_formation'];
$selected = "";
if ( $ligne['id_categorie_formation'] == $ligne['id_categorie'] )
{
$selected = ' selected = "selected"';
}
//creation de l'option
echo '<option value="'.$cat_id.'"'.$selected.'>'.$ligne['txt_categorie'].'</option>'; 

par kweb » 27 sept. 2007, 11:00

Effectivement, je viens de trouvé l'erreur, il manqué un ";".

Et je viens de résoudre mon problème !! cool :D
Donc merci a vous tous de votre participation.

je mets le code qui fonctionne ci-dessous, dans le cas ou sa pourrait aider quelqu'un
<select name="categorie" id="categorie">
    <option value="">S&eacute;l&eacute;ctionner</option>
<?php 
$select2 = " SELECT formation.*, categorie.* FROM formation, categorie WHERE formation.id_formation = $modifier";
$selected_retour = mysql_query ($select2) or die (mysql_error());
while ($ligne = mysql_fetch_assoc($selected_retour)) 
    {      	
	echo '<option value="'.$ligne['id_categorie_formation'].'selected="';
	
		// On vérifie que "id_categorie_formation est égal à "id_formation", si OK on affiche "selected"
		if ( $ligne['id_categorie_formation'] == $ligne['id_categorie'] )
			{
			echo 'selected"';
			} 
			
	echo '>'.$ligne['txt_categorie'].'</option>';
    } 
?>
</select>

par d0m » 27 sept. 2007, 10:53

c'est une erreur de syntaxe. Pour debugguer ce genre d'erreur vérifie :
- si il ne manque pas de ; à l'instruction juste au dessus
- si tes accolades ouverts sont bien fermées et vis versa

sinon pour selectionner une option dans un SELECT, pas besoin de mettre
 <OPTION .... selected=selected...>
mais simplement
 <OPTION .... SELECTED...>

par kweb » 27 sept. 2007, 10:35

D'accord, voici ce que j'ai essayé...
<select name="categorie" id="categorie">
    <option value="">S&eacute;l&eacute;ctionner</option>
<?php 
$select2 = " SELECT formation.*, categorie.* FROM formation, categorie ";
$selected_retour = mysql_query ($select2) or die (mysql_error());
while ($ligne = mysql_fetch_assoc($selected_retour)) 
    {      	
	echo '<option value="'.$ligne['id_categorie_formation']. 'selected="'
	
		// On vérifie que "id_categorie_formation est égal à "id_formation", si OK on affiche "selected"
		if ( $ligne['id_categorie_formation'] == $ligne['id_categorie'] )
			{
			echo 'selected"';
			} 
	echo '>'.$ligne['txt_categorie'].'</option>';
    } 
?>
</select>
Suis-je sur la bonne piste ?
en utilisant cette syntaxe, j'ai une erreur :
Parse error: syntax error, unexpected T_IF, expecting ',' or ';' in C:\wamp\www\MCO formation\administration\formations.php on line 197
L'erreur correspond a la ligne du "IF"
Merci

par Patriboom » 27 sept. 2007, 04:42

Il te suffit de couper ton écriture d'option.

    echo '<option ...';                                              //Je laisse l'écriture de l'option ouverte à dessein
    if (condition recherchée) { echo 'selected'; }
    echo '>...</option>'                                          //Je finis l'écriture de l'option


par Ryle » 27 sept. 2007, 00:04

Déjà tu as une petite erreur de guillemets, l'attribut selected="" est indépendant de l'attribut value="" alors que tu l'a consigné dedans.

Ensuite, pour avoir la liste de tes categories, il faut effectuer une requête indépendante en base pour récupérer tes différentes catégories et les lister, et je suppose que ce n'est pas du tout cela que contient $selected_retour qui doit n'avoir que les données de la formation.

L'idée est donc de boucler sur toutes les catégories et de n'insérer l'attribut selected que si la catégorie courante correspond à celle de la formation :)

récupérer des informations dans un "select"

par kweb » 26 sept. 2007, 17:44

Re-bonjour :lol:

cette fois-ci j'ai un problème pour récupérer des informations dans un "select".

Quelques explication :
La page sur laquelle je travaille, vas me servir a modifier les données inscrit dans la BD issue de deux tables "formation" et "categorie" qui sont liées entre elles (une formation dépend obligatoirement d'une catégorie).
<?
$select = "
SELECT formation.*, categorie.* 			
FROM formation, categorie 
WHERE formation.id_formation = $modifier AND formation.id_categorie_formation = categorie.id_categorie";
?>
Je fais donc une remonté d'informations dans des "inputs".
<input name="titre" type="text" id="titre" size="50" value="<?php echo $select_retour['nom_formation']; ?>"/>
Le problème rencontrer
Je veux utiliser un "select" pour afficher les titres de toutes les catégorie existante et faire un "selected" sur le titre de la catégorie correspondante a la formation.
j'ai commencer a faire quelques lignes, qui fonctionnent mais qui ne donne pas le résultat voulu (logique c'est la ou je bloque :lol: ).
Il ne m'affiche pas tous les titres des catégorie, mais juste le titre de la catégorie qui est liée à la formation ...
<select name="categorie" id="categorie">
    <option value="">S&eacute;l&eacute;ctionner</option>
<?php 
while ($ligne = mysql_fetch_assoc($selected_retour)) 
    {
    echo '<option value="'.$ligne['id_categorie'].'selected="selected"">'.$ligne['txt_categorie'].'</option>'; 
    } 
?>
</select>
Comment puis-je faire pour afficher tous les titres des catégories existantes.
ça fait un petit moment que je bloque dessus, donc un peu d'aide serrait la bien venue !
Merci par avance de votre aide.