Affichage apres une liste lié

baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011 - 16 mai 2011 à 16:44
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011 - 20 mai 2011 à 10:25
bonjour tout le monde

voila j ai un gros soucis et j aimerai bien enfin pouvoir le resoudre,jeprecise que je suis debutant

j ai un select1 qui lui me donne des categories et j affiche dynamiquement dans un frame le resultat
mon select1 met a jour automatique mon select2 et qui affiche en valeur les marques dispo de la categorie choisie

bon jusque la ca va

mon select2 sert a trié par marque
mais maintenant je souhaite pouvoir afficher dynamiquement quand je clik dans le select2 et ca j arrive pas

ma premiere fonction je l ai repiqué de mes cours donc bete copier coller et remplacement des valeurs

mais je suis incapable d en faire une

c est pour ce la que je demande de l aide

voici deja mon code actuel

fonction pour la mise a jour du select2 ajax:


function MAJ_marque(Nsouscategorie)
{
//declaration d'une variable
var xmlhttp;

//test si une categorie a été choisi
if (Nsouscategorie.length==0)
{
document.getElementById("liste_marques").innerHTML="";
return;
}
// test le type de navigateur pour créer l'objet adapté
if (window.XMLHttpRequest)
{// code for IE7+, Firefox, Chrome, Opera, Safari
xmlhttp=new XMLHttpRequest();
}
else
{// code for IE6, IE5
xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
}

// appel et exécution d'une fonction permettant la mise a jour dynamique
xmlhttp.onreadystatechange=function()
{
if (xmlhttp.readyState==4 && xmlhttp.status==200)
{
//remplisage de la zone dynamique marque avec les resultats trouvés en base de données
document.getElementById("liste_marques").innerHTML=xmlhttp.responseText;
}
}



mon php:


//traitement maj du select marque
if(isset($_GET['num']))

{



// si on reçois un parametre num c'est que on veux mettre a jour la liste des marques

//sélection des marques qui utilisent la categorie reçu en parametre num

$requete = "SELECT DISTINCT Nmarque FROM Nproduct
WHERE Nsouscategorie ='".$_GET['num']."'" ;



// execution de la requete et recuperation les resultats dans une variable

$resultats = mysql_query($requete) ;

//construire la chaine de marques a afficher


//commencement de la liste déroulante des marques

$res = " ";

$res=$res."choisissez une marque";

while($tempo = mysql_fetch_assoc($resultats) )
{

//répétition des marques trouvées
$res = $res ."".$tempo['Nmarque']."";

}

//fin de la liste déroulante
$res = $res ."";


echo $res;



}

//traitement pour la selection d une categorie
if(isset($_POST['CATEGORIE']))

{


//création un nouvel objet tbs
$tbs = new clsTinyButStrong;

//modèle html dynamique à utiliser
$tbs -> LoadTemplate("cat.html");

//création de la requete
$requete = "SELECT* ,round((Nnet_ttc * 1.396),2) as net FROM Nproduct
where Nsouscategorie='".$_POST['CATEGORIE']."'";

//execute la requete,recupere les resultats et fusionne avec le modele html
$tbs -> MergeBlock('blk',$connexion,$requete);

//affiche le fichier html
$tbs -> Show();

}
//traitement du trie par marque des categories
if(isset($_GET['marque']))
{


//création un nouvel objet tbs
$tbs = new clsTinyButStrong;

//modèle html dynamique à utiliser
$tbs -> LoadTemplate("cat.html");


//création de la requete
$requete = "SELECT* ,round((Nnet_ttc * 1.396),2) as net FROM Nproduct
where Nsouscategorie='".$_GET['CATEGORIE']."'
and Nmarque='".$_GET['marque']."'";

//execute la requete,recupere les resultats et fusionne avec le modele html
$tbs -> MergeBlock('blk',$connexion,$requete);

//affiche le fichier html
$tbs -> Show();


}



mon html:









Choisissez une catégorie

ACCESSOIRE DIVERS

Pile
Tapis souris

AUDIO
Carte son
Haut-Parleur


voila j espere avoir été precis dans mon explication et surtout qu on puisse resoudre mon soucis

merci d avance

32 réponses

baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
16 mai 2011 à 23:04
y a personne pour m aider je n y arrive toujours pas
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
17 mai 2011 à 10:22
Tu envoies quand les info au serveur ? Je ne le vois nulle part dans ta fonction JS.

Il faut un truc comme ça. Attention, à mettre après le
  xmlhttp.onreadystatechange=function()
  {
//...
}


Pour l'envoie par le méthode GET :
httpRequest.open('GET', 'traitement.php?var1=valeur1&var2='+Nsouscategorie, true);
httpRequest.send(null);
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
17 mai 2011 à 12:46
bonjour et merci pour ton aide

oups j ai oublier quelque lignes pour les info serveur
la il est complet mon code

je vais regarder pour ce que tu m as dit pour le reste
      function MAJ_marque(Nsouscategorie)
{
    //declaration d'une variable
   var xmlhttp;
   
    //test si un code postale a été choisi
       if (Nsouscategorie.length==0)
    {
document.getElementById("liste_marques").innerHTML="";
return;
   }
   // test le type de navigateur pour créer l'objet adapté
  if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
  else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

  // appel et exécution d'une fonction permettant la mise a jour dynamique
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
//remplisage de la zone dynamique villes avec les resultats trouvés en base de données
document.getElementById("liste_marques").innerHTML=xmlhttp.responseText;
    }
  }

  
  xmlhttp.open("GET","principal.php?num="+Nsouscategorie,true);
   xmlhttp.send();
  
  
  } 
  
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
17 mai 2011 à 16:14
le var1 est ce bien pour moi ce qui ce trouve dans mon if(isset($_GET['marque']))

mais en valeur1 c est quoi?

et donc en var2 c est mon num actuelle?


merci d avance
0

Vous n’avez pas trouvé la réponse que vous recherchez ?

Posez votre question
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
17 mai 2011 à 16:35
J'ai juste écrit des trucs au pif à passer au serveur pour que tu voies comment ça marche.
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
17 mai 2011 à 19:42
oui ca j avais compris mais ce que je veux dire c est pour la correspondance avec mon code

car je capte pas vraiment comment ca fonctionne , la ca fait 4 jours que j essai de mettre ca au point
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 13:45
var1 tu peux le récupérer en faisant
if(isset($_GET['var1'])) 


C'est exactement pareil que quand tu passes des info par un formulaire avec la méthode GET sauf que tu construis toi même l'URL envoyé au serveur.
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 13:52
var1 c'est juste un nomn tu peux mettre ce que tu veux.

var s = "coucou"
httpRequest.open('GET', 'traitement.php?fonction=genererListe&categorie='+Nsouscategorie+'&message='+s, true);
httpRequest.send(null);


if(isset($_GET['fonction'])) 
{
  if( $_GET['fonction']=="genererListe" )
  {
    // Je génère ma liste
    echo "du texte que tu récupères en javascript après execution"
  }
  else {
    //le fichier php a été appelé par autre chose
  }
}


Le test de la chaine est peut être faux, je n'ai plus en tête la syntaxe pour php.
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 15:01
bon j ai essayer mais humm humm j ai rien qui ce passe

j ai crée cette fonction
function Trie_marque(Nmarque)
{
    //declaration d'une variable
   var xmlhttp;
   
    //test si une marque a été choisi
       if (Nmarque.length==0)
          {
        		document.getElementById("liste").innerHTML="";
        		return;
          }
          
       
   // test le type de navigateur pour créer l'objet adapté
      if (window.XMLHttpRequest)
          {// code for IE7+, Firefox, Chrome, Opera, Safari
          xmlhttp=new XMLHttpRequest();
          }
      else
          {// code for IE6, IE5
          xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
          }

  // appel et exécution d'une fonction permettant la mise a jour dynamique
  xmlhttp.onreadystatechange=function()
    {
      if (xmlhttp.readyState==4 && xmlhttp.status==200)
         {
      		//remplisage de la zone dynamique marque avec les resultats trouvés en base de données
      		document.getElementById("liste").innerHTML=xmlhttp.responseText; 
         }
    }

  xmlhttp.open('GET','principal.php?marque=Trie&num='+Nsouscategorie, true);
  xmlhttp.send();
  

}



la requete que je veux appeler
 if(isset($_POST['marque']))
      {     
          if($_GET['marque']=="Trie")
        	 {
        	    
                         
                                    //création un nouvel objet tbs
                                    $tbs = new clsTinyButStrong;
                                                
                                    //modèle html dynamique à utiliser
                                    $tbs -> LoadTemplate("cat.html");
                                     
                                                                  
                                    //création de la requete
                                    $requete = "SELECT* ,round((Nnet_ttc * 1.396),2) as net FROM Nproduct
                                    where  Nsouscategorie='".$_GET['CATEGORIE']."'
                                    and Nmarque='".$_GET['marque']."'";

                             //execute la requete,recupere les resultats et fusionne avec le modele html
                                    $tbs -> MergeBlock('blk',$connexion,$requete);
                                              
                                    //affiche le fichier html
                                    $tbs -> Show();
                                    
                            
          }
       }
      


j ai mis ceci dans mon select2 qui lui est en php
$res = " <select name="marque" onchange="Trie_marque(this.value)">";


j ai pas de message d erreur rien et rien ne ce passe
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 16:28
$tbs -> Show(); fait quoi ?
Essaye juste en mettant
if(isset($_POST['marque']))
      {     
          if($_GET['marque']=="Trie")
        	 {
        	    
                         
echo "hello"
                                    
                            
          }
       }


Et à la réponse dans le JS tu mets alert(xmlhttp.responseText);

Le JS a l'air juste, donc le problème doit venir du php.
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 16:31
Dans ta déclaration du select, tu mets name="marque" mais on te voit pas y affecter un id, alors que par la suite tu veux le modifier par son id qui serait "liste". Je dis ça, je dis rien.
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 16:51
je sais pas trop ou fallait mettre l alert alors j ai fais comme ca
if (xmlhttp.readyState==4 && xmlhttp.status==200)
         {
      		//remplisage de la zone dynamique marque avec les resultats trouvés en base de données
      		document.getElementById("liste").innerHTML=xmlhttp.responseText;
          alert(xmlhttp.responseText);  
         }



mais rien du tout il ne ce passe rien

j ai mis un id au select comme tu ma dit id="marque"

le tbs show il est commenté ca affiche la page html
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 16:55
Mets l'id à liste_marques vu que tu fais :

document.getElementById("liste_marques").innerHTML


A part si ce n'est pas le même ^^'
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 16:59
liste_marque est l id de ma div ou va s afficher mon select marque lors de ma selection dans mon select categorie
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 21:27
bon j ai essayer de faire une fonction pour remplacer le submit() sur mon premier select et euréka j y suis arriver mais ..... et oui y un mais j ai plus d affichage dans mon frame
avec le debugeur de firefox je vois bien mon url contruite et juste mais comment on l appel dans le frame???


ensuite j ai essayer de contruire la fonction toujour et encore pour le select 2 je pense ne pas etre tres loin mais voila il me manque quelque chose ou syntaxe

voici le code
 function Trie(Nsouscategorie,Nmarque)
 {
    //declaration d'une variable
   var xmlhttp;
   
    
   // test le type de navigateur pour créer l'objet adapté
  if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
  else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }

  // appel et exécution d'une fonction permettant la mise a jour dynamique
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
//remplisage de la zone dynamique villes avec les resultats trouvés en base de données
 
    var Nsouscategorie= document.getElementById("sel1").selectedValue;

    var Nmarque= document.getElementById("sel2").selectedValue;

    }
  }

  
  xmlhttp.open("GET","principal.php?CATEGORIE="+Nsouscategorie+"&marque="+Nmarque,true);
   xmlhttp.send();
  
  } 



et le debugueur me dit ca
[21:18:45,518] GET http://www.sauvetage-informatique.eu/cat/bis/principal.php?CATEGORIE=&marque=undefined [HTTP/1.1 200 OK 266ms]
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
18 mai 2011 à 21:59
  xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
//remplisage de la zone dynamique villes avec les resultats trouvés en base de données
 
    var Nsouscategorie= document.getElementById("sel1").selectedValue;

    var Nmarque= document.getElementById("sel2").selectedValue;

    }
  }

  
  xmlhttp.open("GET","principal.php?CATEGORIE="+Nsouscategorie+"&marque="+Nmarque,true);
   xmlhttp.send();
  


Je rêve ou tu créer Nsouscategorie et Nmarque là où tu traites la réponse du serveur ? Et pour avoir cette réponse, tu lui envoies une URL qui utilise ces valeurs qui seront initialisés quand il répondra
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
18 mai 2011 à 22:47

var sel1= document.getElementById("sel1").selectedValue;

    var sel2= document.getElementById("sel2").selectedValue;

    }
  }

  
  xmlhttp.open("GET","principal.php?CATEGORIE="+Nsouscategorie+"&marque="+Nmarque,true);
   xmlhttp.send();



ben comme je comprend pas grand chose mais j avais fais ca aussi mais j ai le meme message
je sais pas comment on fait apres dans le xmlhttp.open
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
19 mai 2011 à 09:15
En fait ce code :
 xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
//remplisage de la zone dynamique villes avec les resultats trouvés en base de données
 
    var Nsouscategorie= document.getElementById("sel1").selectedValue;

    var Nmarque= document.getElementById("sel2").selectedValue;

    }
  }

Le serveur envoie plusieurs réponses au cours du traitement, par exemple quand la connexion s'ouvre, quand il a reçu la requête,.., quand il a tout traité. C'est le readyState 4. Ensuite, il peut y avoir une erreur ou non, mais en cas de succès il renvoie un status 200. Donc à ce moment tu peux traiter la réponse !

Essaye de mettre
xmlhttp.send(null);
j'ai essayé sans, comme toi, ça a marché mais on ne sait jamais (j'uilise ASP et non PHP)
0
baddevil Messages postés 18 Date d'inscription vendredi 14 juillet 2006 Statut Membre Dernière intervention 20 mai 2011
19 mai 2011 à 10:03
bonjour

je te remercie de ta patience avec moi car je suis un peu a l ouest avec ce code

si j ai compris le if (xmlhttp.readyState==4 && xmlhttp.status==200)

test et c est en dessous que je traite

j ai deplacé mes var cependant je sais pas quoi mettre a la place pour qu il m ouvre le resultat dans mon frame(id="result")

mes deux fonctions retournerons vers ce frame

1 ere
 function sub(Nsouscategorie)
{
    //declaration d'une variable
   var xmlhttp;
   
    //test si une categorie a été choisi
       if (Nsouscategorie.length==0)
    {
document.getElementById("liste").innerHTML="";
return;
   }
   // test le type de navigateur pour créer l'objet adapté
  if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
  else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
  //je recupere la valeur avec l id du select
   document.getElementById("sel1");
   
  // appel et exécution d'une fonction permettant la mise a jour dynamique
  xmlhttp.onreadystatechange=function()
  {
    if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    document.getElementById("divstock").innerHTML=xmlhttp.responseText; 

    }
  }
  
     
  url="principal.php?CATEGORIE="+Nsouscategorie;
  xmlhttp.open("GET",url,true);
   xmlhttp.send(null);
  
  
  }   


et mon autre code pour le trie alors lui il est plus compliqué pour moi
function Trie(Nsouscategorie,Nmarque)
{
    //declaration d'une variable
   var xmlhttp;
   var Nsouscategorie=document.getElementById("sel1").SelectedValue;
   var Nmarque=document.getElementById("sel2").SelectedValue;
    
   // test le type de navigateur pour créer l'objet adapté
  if (window.XMLHttpRequest)
    {// code for IE7+, Firefox, Chrome, Opera, Safari
    xmlhttp=new XMLHttpRequest();
    }
  else
    {// code for IE6, IE5
    xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
    }

  // appel et exécution d'une fonction permettant la mise a jour dynamique
  xmlhttp.onreadystatechange=function()
    {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
      {
      
       ????????
      
      }
      
    }
 
  xmlhttp.open("GET","principal.php?CATEGORIE="+Nsouscategorie+"&marque"+Nmarque,true);
  xmlhttp.send(nul);
  
}   


saurai tu ce que je dois mettre et merci encore de ton aide
0
smathis Messages postés 153 Date d'inscription lundi 22 mars 2010 Statut Membre Dernière intervention 17 juin 2011 5
19 mai 2011 à 12:02
1er Code:
C'est quoi cette instruction dans le vide ?
 document.getElementById("sel1");


2eme code :
xmlhttp.open("GET","principal.php?CATEGORIE="+Nsouscategorie+"&marque"+Nmarque,true);

Tu as oublié un signe = apres &marque.

T'occupes pas de le mettre dans ta page HTML, essaye déjà de l'afficher dans un alert pour voir les valeurs.
0
Rejoignez-nous