IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

PHP & Base de données Discussion :

liste déroulante et ajout de la meme liste sans la selection [MySQL]


Sujet :

PHP & Base de données

  1. #1
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 52
    Points
    52
    Par défaut liste déroulante et ajout de la meme liste sans la selection
    Bonjour à tous.

    Je n'ai pas réussi a trouvé un sujet qui ressemblait a celui la, je pose donc ma question en espérant des réponses qui aideront je suis sur beaucoup de monde.

    Je suis en train d'essayer de faire apparaître des listes déroulantes via une base de données, jusque la tout va bien :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    <table>
    <tr>
    	<td><strong>Don</td>
    	<td><select id="datedebcours" name="datedebcours" onKeyup="couleur(this)">
    			  <option value="">&nbsp;</option>
    			<?php $query ="SELECT * FROM `dons` ";
    			$retournee =  envoiRequete($query);
     
    			while($donnees = mysql_fetch_array($retournee))
    			{?>
    				<option value="<?php echo $donnees['id_dons']; ?>"><?php echo $donnees['nom_dons']; ?></option>
    			<?php 	} ?>
    		</select></td>
    		<td><input type="button" name="plus1" id="plus1" value="+" onclick="addline()" /></td>
    </tr>
    </table>
    J'aimerai dans un premier temps ajouter la même liste juste en dessous de la première en cliquant sur le bouton +
    et dans un deuxieme temps, que la proposition sélectionnée dans la liste précédente soit grisée, non sélectionnable ou même non apparente.

    Auriez vous une idée, un code, bout de code?

    merci d'avance pour vos propositions.

  2. #2
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Salut !
    Il suffit, dans la 1re liste, de ne pas réafficher le <option> précédemment sélectionné.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
     
    // Données à afficher
    $data = array('Italie', 'France', 'Espagne', 'Allemagne', 'Suisse') ;
     
    ?>
     
    <form>
        <select name="country">
            <?php foreach ( $data as $country ) : ?>
                <?php if ( ! isset($_GET['country']) || $country != $_GET['country'] ) : ?>
                    <option><?php echo $country ?></option>
                <?php endif ?>
            <?php endforeach ?>
        </select>
        <input type="submit" value="+">
     
        <?php if ( isset($_GET['country']) ) : ?>
            <select>
                <?php foreach ( $data as $country ) : ?>
                    <option><?php echo $country ?></option>
                <?php endforeach ?>
            </select>
        <?php endif ?>
    </form>
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  3. #3
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 52
    Points
    52
    Par défaut
    Merci pour ta réponse rapide.

    Cependant cette manip fonctionne pour 1 seul ajout. en fait mon idée serait plus dans ce style :
    http://www.institutparisien.fr/inscr...ntensif/cours/
    C'est l'inscription d'une école de français pour les étrangers.
    A chaque fois qu'on clique sur le bouton ajouter, ça "valide" la ligne d'au dessus et ajoute une nouvelle. tout en sélectionnant la date d’après. malheureusement ici, la même date peut être choisie plusieurs fois. Je trouve par contre ce listing bien sympa. Et le tout sans recharger la page

    Merci.

    P.S : je ne travaille pas pour ce site évidement donc ce n'est pas de la pub que je fais ^_^

  4. #4
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    Le principe reste le même pour $x <select> ;-)

    Dans l'exemple que tu fournis la prog est bcp plus simple car tout est effectué en JavaScript, pas de persistance des données à gérer.
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  5. #5
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 52
    Points
    52
    Par défaut
    Merci, mais je ne vois pas trop comment ajouter une ligne en plus a chaque fois que je clique sur le bouton. (dans le cas présent ça serait pour afficher jusqu'à 20 fois la liste tout en enlevant à chaque fois l'item pris précédemment.)

    J'aimerai aussi ne pas avoir a recharger la page et surtout garder les choix plutot que de ré-afficher la liste.

    sinon oui désolé pour le js du lien. je n'avais pas pris la peine de vérifier le langage utilisé.

    merci pour le temps que tu m'accordes.

  6. #6
    Expert éminent
    Avatar de Séb.
    Profil pro
    Inscrit en
    Mars 2005
    Messages
    5 098
    Détails du profil
    Informations personnelles :
    Âge : 46
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Opérateur de télécommunications

    Informations forums :
    Inscription : Mars 2005
    Messages : 5 098
    Points : 8 207
    Points
    8 207
    Billets dans le blog
    17
    Par défaut
    J'aimerai aussi ne pas avoir a recharger la page
    Vois sur le forum JavaScript
    Un problème exposé clairement est déjà à moitié résolu
    Keep It Smart and Simple

  7. #7
    Membre du Club
    Homme Profil pro
    Chef de projet MOA
    Inscrit en
    Décembre 2009
    Messages
    46
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Chef de projet MOA
    Secteur : High Tech - Multimédia et Internet

    Informations forums :
    Inscription : Décembre 2009
    Messages : 46
    Points : 52
    Points
    52
    Par défaut
    Bon, je suis passé autrement et ajouté de l'ajax pour ne pas avoir a recharger la page ni poser les variables dans l'adresse.

    Je vous pose ici les 2 pages. il y a surement une méthode plus optimisée mais a mon niveau de codage... si vous avez des commentaires dessus et une optimisation, je suis preneur.

    index.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    47
    48
    49
    50
    51
    52
    53
    54
    55
    56
    57
    58
    59
    60
    61
    62
    63
    64
    65
    66
    67
    68
    69
    70
    71
    72
    73
    74
    75
    76
    77
    78
    79
    80
    81
    82
    83
    84
    85
    86
    87
    88
    89
    90
    91
    92
    93
    94
    95
    96
    97
    98
    99
    100
    101
    102
    103
    104
    105
    106
    107
    108
    109
    110
    111
    112
    113
    114
    115
    116
    117
    118
    119
    120
    121
    <html>
    <head>
    	<title>test choix dons</title>
    	<script type="text/javascript" src="prototype-1.5.0.js"></script>
    	<script language="javascript">
    	 /* ---------------------------- */
    	/* XMLHTTPRequest Enable 		*/
    	/* ---------------------------- */
    	function createObject() 
    	{
    		var request_type;
    		var browser = navigator.appName;
    		if(browser == "Microsoft Internet Explorer")
    		{
    			request_type = new ActiveXObject("Microsoft.XMLHTTP");
    		}
    		else
    		{
    			request_type = new XMLHttpRequest();
    		}
    		return request_type;
    	}
     
    	var http = createObject();
     
    	function selectdon(element)
    	{
    		//NB DE DONS DEJA PRIS 
    		var  nomb_don = document.getElementById('compteur');
    		var nb =  nomb_don.value;
    		nomb_don.value=parseInt(nb,10)+1;
    		//REGARDE CE QUIL A PRIS 
    		var  don = document.getElementById(element); 
    		id_don = don.value;
    		//ON ECRIS DANS LETAT 
    		var don_pris = document.getElementById('valdon_'+nomb_don.value);
    		don_pris.value=id_don;
     
    		//on recupere les id  et prepare la variable a passer en get++
    		var infos_get ="";
     
    		for(var i=1;i<5;i++)
    		{
    			var nom='valdon_'+i;
    			var element = document.getElementById(nom);
    			var id = element.value;
    			if( i == 1 )
    			{
    				infos_get= infos_get+"valdon_"+i+"="+id;
    			}
    			else
    			{
    				infos_get= infos_get+"&valdon_"+i+"="+id;
    			}
    		}
    		nocache = Math.random();
    		http.open('get','choix.php?'+infos_get+'&nb='+nomb_don.value+'&nocache = '+nocache);
    		http.onreadystatechange = autosuggestReply;
    		http.send(null);
    	}
     
    	function autosuggestReply()
    	{
    		if(http.readyState == 4)
    		{
    			var  nomb_don = document.getElementById('compteur');
    			var nb =  nomb_don.value;
    			nomb=parseInt(nb,10)+1;
    			var id_ouverteur='don_'+nomb;
    			var response = http.responseText; 
    			e = document.getElementById(id_ouverteur);
    			//alert(response);
    			if(response!="")
    			{
    				e.innerHTML=response;
    				//e.value=response;
    			}
    			else 
    			{
    				e.value="";
    			}
    		}
    	}
    	</script>
    </head>
     
    <body>
    <?php //set up SQL connection
    $link = mysql_connect("localhost","root","");
    if (! $link)
    {
    	die ("Couldn't connect to mySQL server");
    }
    if (!mysql_select_db("mabdd",$link) )
    {
    	die ("Couldn't open mabdd: ".mysql_error() );
    } ?>
     
    <select name="select" id="select" onchange="selectdon('select')">
       <option value="">&nbsp;</option>
       <?php 
    		$requete="SELECT id_comp , nom_comp  FROM matable";
    		$retour = mysql_query($requete)or die("".mysql_error());
    		while( $do = mysql_fetch_array($retour))
    		{ ?>
    	   <option value="<?php echo $do['id_comp']; ?>"><?php echo $do['nom_comp']; ?></option>
      <?php } ?>
    </select>
     
    <div id="don_2"></div><div id="don_3"></div><div id="don_4"></div><div id="don_5"></div>
     
    <!-- console permettant de supprimer dansla liste les id des competences prises -->
    <input type="hidden" id="compteur"  value="0"/>
    <input type="hidden" id="valdon_1" value="0"/>
    <input type="hidden" id="valdon_2" value="0"/>
    <input type="hidden" id="valdon_3" value="0"/>
    <input type="hidden" id="valdon_4" value="0"/>
    <input type="hidden" id="valdon_5" value="0"/>
     
    </body>
    </html>
    choix.php
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    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
    <?php
    //set up SQL connection
    $link = mysql_connect("localhost","root","");
    if (! $link)
    {
    	die ("Couldn't connect to mySQL server");
    }
    if (!mysql_select_db("mabdd",$link) )
    {
    	die ("Couldn't open mabdd: ".mysql_error() );
    }
     
    $query_string="";	
    $valeur="";	
    $or="";	
    $nb=0;
    //on recupere les valeurs des ids 
    for($i=1;$i<5;$i++)
    {
    	$valeur=$_GET['valdon_'.$i];
     
    	if( $valeur != 0 )
    	{
    		if( $nb > 0 )
    		{  $or = "AND "; }
    		$query_string .=$or." id_comp !='".$valeur."'"; 
    		$nb++;
    	}
    }
     $nb=$_GET['nb'];
    ?>
     
    <select name='select' id='select<?php echo  $nb; ?>' onchange="selectdon('select<?php echo  $nb; ?>')">
       <option value=''>&nbsp;</option>
    		<?php 
    		$requete="SELECT id_comp , nom_comp  FROM competence WHERE ".$query_string;
    		echo $requete;
    		$retour = mysql_query($requete)or die("".mysql_error());
    		while( $do = mysql_fetch_array($retour))
    		{ ?>
    			<option value="<?php echo $do['id_comp']; ?>"><?php echo $do['nom_comp']; ?></option>
      <?php } ?>
    </select>
    Evidement les fonctions de connection et le js peut etre mis sur une page a part .

    Ici on peut choisir jusque 5 choix possibles. pour changer le nombre, il faut dans les 2 boucles for (1 dans chaque page) mettre la limite au nombre voulu, ajouter les div et les hidden dans la page index.

    (vous pouvez aussi faire des bouton onclick pour ajouter une nouvelle liste jusqu'a la limite voulue.)

    Merci pour vos commentaires en espérant que ca aide des gens.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. Réponses: 17
    Dernier message: 24/03/2016, 13h13
  2. Réponses: 6
    Dernier message: 13/10/2014, 20h40
  3. Réponses: 2
    Dernier message: 06/11/2009, 15h14
  4. Choix dans liste déroulante puis rajout d'une autre liste déroulante
    Par Nosti dans le forum Général JavaScript
    Réponses: 12
    Dernier message: 01/02/2008, 17h50
  5. Réponses: 2
    Dernier message: 28/05/2007, 15h37

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo