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

JavaScript Discussion :

[AJAX] Recharger un menu deroulant php sans recharger la page


Sujet :

JavaScript

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Par défaut [AJAX] Recharger un menu deroulant php sans recharger la page
    Bonjour à tous,
    Voilà j'ai une page php avec un menu deroulant à partir d'une requete mysql et à cote un bouton-lien qui renvoie sur une nouvelle page php pour mettre à jour cette base si l'option n'est pas présente dans le menu deroulant. Une fois le rajout effectué, j'aimerais mettre à jour mon menu deroulant sans recharger ma page initiale.
    Est-ce possible?
    Merci d'avance.

  2. #2
    Membre Expert

    Profil pro
    imposteur
    Inscrit en
    Avril 2003
    Messages
    3 308
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations professionnelles :
    Activité : imposteur

    Informations forums :
    Inscription : Avril 2003
    Messages : 3 308
    Par défaut
    Pas en PHP : une exécution en PHP est toujours sur le serveur, donc il faut un rechargement.

    Ajax peut sans doute faire ce que tu recherches.

  3. #3
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Par défaut recharger un menu deroulant php
    Je sais j'ai dejà un fonction ajax mais elle fonctionne pas pour ce menu deroulant voila mon code :
    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
     
    <script type="text/javascript">
    function getElement(id) 
    {
    	var Elem;
     
    	if(document.getElementById) 
    	{
    		if (typeof document.getElementById(id) == "object") 
    			Elem = document.getElementById(id);
    				else 
    					Elem = void(0);
    	} 
    	else if(document.all) 
    	{
    		if (typeof document.all[id] == "object") 
    			Elem = document.all[id];
    				else 
    					Elem = void(0);
    	} 
    	else if(document.layers) 
    	{
    		if (typeof document[id] == "object") 
    			Elem = document[id];
    				else 
    					Elem = void(0);
    	}
    	else Elem = void(0);
     
    	return Elem;
    }
     
     
    var xhr = null;
     
    function getXhr()
    {
    	if (window.XMLHttpRequest) 
    	{
    		xhr = new XMLHttpRequest();
    	}
    	else if (window.ActiveXObject)  // if IE
    	{ 
    		var ieversions = ['Msxml2.XMLHTTP',
    						  'Microsoft.XMLHTTP',
    						  'Msxml2.XMLHTTP.5.0',
    						  'Msxml2.XMLHTTP.4.0',
    						  'Msxml2.XMLHTTP.3.0'
    						 ]; 
     
    		for(var i=0; !xhr && i<ieversions.length; i++) 
    		{ 
    			try
    			{
    				xhr = new ActiveXObject(ieversions[i]);
    			} 
    			catch(e) 
    			{ 
    				xhr = null;
    			}
    		}
    	}
     
    	if(!xhr)// XMLHttpRequest non supporté par le navigateur
    		alert("Votre navigateur ne supporte pas les objets XMLHTTPRequest...");
    }
     
     
    /**
    * Méthode qui sera appelée sur le click du bouton
    */
    function requete(page,select,form,target,target1,target2,target3,target4)
    {
    	getXhr();
     
    	xhr.onreadystatechange = function()
    	{
    		if(xhr.readyState == 4)
    		{		
    		if(xhr.status == 200 || xhr.status == 304)
    			eval(xhr.responseText);
    		}
    	};
     
    	xhr.open("POST",page,true);
    	xhr.setRequestHeader("Content-Type","application/x-www-form-urlencoded");
    	xhr.send("form="+escape(form)+"&type="+escape(select.id)+"&id="+escape(select.value)+"&target="+escape(target)+"&target1="+escape(target1)+"&target2="+escape(target2)+"&target3="+escape(target3)+"&target4="+escape(target4));
    }
    </script>
     
    .........
     
     
    <select name="oam" id="oam" onClick="javascript:requete('requete_oam.php',this,'formulaire');"  />
            <?php
            $oam=$_GET["oam"];
            echo '<option value="'.$oam.'">'.$oam.'</option>';
            while ($row1= mysql_fetch_array($result1, MYSQL_ASSOC)) 
            {$var1= $row1["oam"];
            echo '<option value="'.$var1.'">'.$var1.'</option>';
            }
            ?>
    	</select>
    Ca c ma page principale. et voila le code de ma page requete_oam.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
     
     
    <?php
     
     
    if(!empty($_POST) || !empty($_GET))
    {
    	if(isset($_POST['type']))
    		$type = strip_tags($_POST['type']);
    			elseif(isset($_GET['type']))
    				$type = strip_tags($_GET['type']);
    					else
    						$type = '';
     
    	if(isset($_POST['id']))
    		$id = strip_tags($_POST['id']);
    			elseif(isset($_GET['id']))
    				$id = strip_tags($_GET['id']);
    					else
    						$id = '';
     
    	if(isset($_POST['form']))
    		$form = strip_tags($_POST['form']);
    			elseif(isset($_GET['form']))
    				$form = strip_tags($_GET['form']);
    					else
    						$form = '';
     
     
     
     
     
    	require("connect_atelier.php");
     
     
    	if($type == 'oam')
    	{
    		if($id != '')
    		{
    			$req = 'SELECT oam FROM oam WHERE oam="'.$id.'"';   
    			$res = mysql_query($req,$connect) or die ('Erreur : '.mysql_error() );  
    			echo "<select name='oam' id='oam'>";
    		        echo '<option value=""></option>';
           			while ($row= mysql_fetch_array($res, MYSQL_ASSOC)) 
           			{$var1= $row["oam"];
           			echo '<option value="'.$var1.'">'.$var1.'</option>';  
           			echo "</select>";
           			}
     
     
    		}
     
     
     
    	}
    }
    ?>
    mais ca marche pas pour le menu deroulant. la fonction fonctionne pour d'autre element donc c vient pas de ma fonction mais putot de ma page requete_oam.php je pense
    Merci d'avance

  4. #4
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    J'ai pas regardé ton code parce que j'ai la fleme grave surtout un lundi. Je peux te dire que ça fonctionne. Tu as deux moyen.
    1 : tu fabrique de toute piece ton menu select coté client et le menu select actuel est placé dans un div. AJAX va appelé le fichier php qui va générer le code html du select et va afficher le contenu dans le div contenant l'ancien select.
    2 : Soit tu alimentes le select en construisant les fonctionns javascript coté client. En faite c'est php qui genere cette fonction. Je t'avous que je me rappelle plus trop comment ajouter un élément d'un select mais c'est facile à trouver.

    Edit apres avoir eu le courage de lire une partie de ton code tu as pris la premiere solution. Je crois que ton eval ne va pas fonctionner. fait ceci

    //mondiv c'est le div contenant l'ancien <select>.

    document.getElementById(mondiv).innerHTML = xhr.responseText;

  5. #5
    Membre averti
    Inscrit en
    Juin 2006
    Messages
    60
    Détails du profil
    Informations forums :
    Inscription : Juin 2006
    Messages : 60
    Par défaut Select avec Ajax
    J'ai essaye ton truc mais ca ne marche pas j'ai surement une erreur dans mon code voilà une partie de mon script:

    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
     
    	function go(){
    				getXhr();
    				// On défini ce qu'on va faire quand on aura la réponse
    				xhr.onreadystatechange = function(){
    					// On ne fait quelque chose que si on a tout reçu et que le serveur est ok
    					if(xhr.readyState == 4 && xhr.status == 200){
     
    						// On se sert de innerHTML pour rajouter les options a la liste
    						document.getElementById('oam').innerHTML = xhr.responseText;
    					}
    				}
     
    				// Ici on va voir comment faire du post
    				xhr.open("GET","requete_oam.php",true);
    				xhr.send(null);
    			}
     
    ................
     
    voilà mon select : 
     
     
    <div id='oam' style='display:inline' onclick='go()'>
          <select name='oam' id='oam' style="width:240" >
            <option value=''></option>
          </select>
          </div>
    et voila le code de ma requete_oam.php

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
     
    <?php
            echo "<select name='oam' id='oam' style='width:240'>";
            echo "<option value=''></option>";
            require("connect_atelier.php");
            $req = 'SELECT DISTINCT oam FROM oam ';   
            $res = mysql_query($req,$connect) or die ('Erreur : '.mysql_error() );
            while($row = mysql_fetch_assoc($res)){
                    echo "<option value='".$row["oam"]."'>".$row["oam"]."</option>";
                    }
            echo "</select>";  
    ?>

    Merci encore

  6. #6
    Membre éprouvé
    Avatar de berceker united
    Profil pro
    SQL
    Inscrit en
    Février 2005
    Messages
    3 509
    Détails du profil
    Informations personnelles :
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : SQL
    Secteur : Finance

    Informations forums :
    Inscription : Février 2005
    Messages : 3 509
    Par défaut
    Dans l'idée c'est ça .
    - As-tu executé le fichier requete_oam.php seul pour voir s'il y avait pas une erreur coté php ?
    - As-tu testé qu'il rentrait bien dans
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    if(xhr.readyState == 4 && xhr.status == 200){
    - As-tu testé que le div reçoit bien le contenu ?

    - As-tu fais le test sous FireFox et regardé dans le debuger de ce dernier ?

Discussions similaires

  1. [MySQL] selected dans un menu deroulant Php.
    Par sihammaster dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 26/06/2012, 14h36
  2. Charger une page sans recharger le menu flash
    Par overtrack dans le forum ActionScript 1 & ActionScript 2
    Réponses: 0
    Dernier message: 27/04/2009, 12h25
  3. [MySQL] Actualiser données PHP sans recharger page
    Par herve94400 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 15/10/2008, 15h44
  4. [SQL] Menu deroulant PHP dynamique requete SQL
    Par pit2121 dans le forum PHP & Base de données
    Réponses: 2
    Dernier message: 21/12/2007, 16h16
  5. [AJAX] autocompletion sur menu deroulant
    Par bourvil dans le forum Général JavaScript
    Réponses: 1
    Dernier message: 27/02/2007, 15h44

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