begin process at 2012 05 30 00:01:09
  Trouver un code source :
 
dans
 
Accueil > Forum > 

Javascript / DHTML / Ajax

 > 

Framework

 > 

Ajax

 > 

Selects en cascade avec bdd Mysql


Derniers messages déposésPoser une question dans le forum ou lancer une discussion

Selects en cascade avec bdd Mysql

lundi 29 novembre 2010 à 18:10:16 | Selects en cascade avec bdd Mysql

mdc888

Hello,

Je sais, je vais avoir des remarques du genre : sujet ultra traité, mais je viens de passer une demi journée à chercher sur le web et faire des tests, et j'en arrive à demander un peu d'aide.

Voila, j'utilise le principe décrit ici (http://siddh.developpez.com/articles/ajax/#LIV-A) pour créer un select via un autre, en passant par un fichier php pour la partie bdd, et XMLHttpRequest pour la partie javascript.


[code]
// Requette AJAX
function makeRequest(url,id_niveau,id_ecrire){
var http_request = false;
//créer une instance (un objet) de la classe désirée fonctionnant sur plusieurs navigateurs
if (window.XMLHttpRequest) { // Mozilla, Safari,...
http_request = new XMLHttpRequest();
if (http_request.overrideMimeType) {
http_request.overrideMimeType('text/xml');//un appel de fonction supplémentaire pour écraser l'en-tête envoyé par le serveur, juste au cas où il ne s'agit pas de text/xml, pour certaines versions de navigateurs Mozilla
}
} else if (window.ActiveXObject) { // IE
try {
http_request = new ActiveXObject("Msxml2.XMLHTTP");
} catch (e) {
try {
http_request = new ActiveXObject("Microsoft.XMLHTTP");
} catch (e) {}
}
}

if (!http_request) {
alert('Abandon :( Impossible de créer une instance XMLHTTP');
return false;
}
http_request.onreadystatechange = function() { traitementReponse(http_request,id_ecrire); } //affectation fonction appelée qd on recevra la reponse
// lancement de la requete
http_request.open('POST', url, true);
//changer le type MIME de la requête pour envoyer des données avec la méthode POST , !!!! cette ligne doit etre absolument apres http_request.open('POST'....
http_request.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
obj=document.getElementById(id_niveau);

data="val_sel="+obj.value;

http_request.send(data);
}


function traitementReponse(http_request,id_ecrire) {
var affich="";
if (http_request.readyState == 4) {
if (http_request.status == 200) {
// cas avec reponse de PHP en mode texte:
//chargement des elements reçus dans la liste
var affich_list=http_request.responseText;
obj = document.getElementById(id_ecrire);
obj.innerHTML = affich_list;




}
else {
alert('Un probleme est survenu avec la requete.');
}
}
}


[/code]

Code PHP qui génére la liste N°2:

[code]

$query = sprintf("SELECT id, cp, ville FROM villes WHERE cp='%d' ORDER BY ville ASC",

mysql_real_escape_string($_POST[val_sel]));

$result_recherche=mysql_query($query) or die (mysql_error());
$num_rows = mysql_num_rows($result_recherche);

// construction de la liste deroulante
$aff=="";
$aff .= "   Ville :
<select name='id_ville' id='id_ville' onChange=\"makeRequest2('RepVilles.php','id_ville','id_ville_multi')\" class=\"required\" >";
if ($num_rows == 0)
$aff .= "<option value=\"\">-- Code postal introuvable, veuillez modifier --</option>";
else
$aff .= "<option value=\"\">-- Choisissez --</option>";


while ($row=mysql_fetch_assoc($result_recherche)){
$aff.='<option value="'.$row["id"].'">'.$row["ville"].'</option>';
}
$aff .= "</select><br><br>";
// envoi reponse Php a Ajax
echo $aff;

[/code]


Ca fonctionne très bien lorsqu'on a un 1er niveau, mais moi je voudrai en créer un 2e, à partir du select généré juste avant :

-> Select 1 fixe -> select 2 généré en js -> select 3 généré en js

Le problème, c'est que pour le select 3, la valeur du post est vide. "obj=document.getElementById(id_niveau);" ne semble renvoyer aucune valeur à partir du select N°2

Merci pour votre aide, j'en ai vraiment besoin !
lundi 29 novembre 2010 à 18:47:47 | Re : Selects en cascade avec bdd Mysql

PetoleTeam

Membre Club
Bonjour,
il semblerait que ton SELECT #2, utilise, sur son onchange, la fonction makeRequest2, je ne la vois pas définie mais je pense que c'est un oubli

mais que représente, obj=document.getElementById(id_niveau);, c'est le même que pour la 1st fonction.

je te conseilles de travailler sur le code généré pas le PHP pour y voir peut être plus clair.
;O)
mardi 30 novembre 2010 à 10:28:14 | Re : Selects en cascade avec bdd Mysql

mdc888

Hello

Merci pour ta réponse;
makeRequest2 est juste un test de ma part, et donc une erreur dans le code ci-dessus.
Normalement j'appelle bien makeRquest
Pour le code PHP, je n'ai mis que la génération du 2 select, et pas du 3e.

Voici donc le PHP pour le 3e select :


Code PHP :

if (!empty($_POST[val_sel]))
	
{
	
	$srch = sprintf("SELECT `id`, `lng`, `lat` FROM `villes` WHERE `id`='%d' LIMIT 1",
	
	mysql_real_escape_string($_POST[val_sel]));
	
	//print $srch;
	
	$result_srch = mysql_query($srch, $connexion);
	
	while ($row=mysql_fetch_assoc($result_srch)){
				
	$lat = $row['lat'];
	$lng = $row['lng'];
	
	}
	
	//print '<br>'.$lat.'<br>'.$lng;
	
	$distance = 5;
	
	
	$qry = "SELECT `id`, `ville`, (((acos(sin((".$lat."*pi()/180)) * sin((`lat`*pi()/180))+cos((".$lat."*pi()/180)) * cos((`lat`*pi()/180)) * cos(((".$lng."- `lng`)*pi()/180))))*180/pi())*60*1.1515*1.609344) as distance FROM `villes` HAVING distance <= ".$distance." ORDER BY ville LIMIT 30";
	
	
	//print $qry;

	
	$result_recherche=mysql_query($qry) or die (mysql_error());
	$num_rows = mysql_num_rows($result_recherche);
	
	print $num_rows;
	
if ($num_rows != 0)
{	
$nbcol=2;
$i = 0;
$aff = "&nbsp;&nbsp; Ville :";
$aff .= '<table>';

	while($row = mysql_fetch_assoc($result_recherche))
	  {
		  
		if($i%$nbcol==0)
			$aff .= "<tr>";
			
			$aff .= "<td width='50' valign='top' align='center'>";
			$aff .= "
				  ";
					
			$aff.='<input name="ville_multi['.$row['id'].']" value="'.$row['id'].'" type="checkbox"';
			if ($row['id'] == $_POST[val_sel])
			$aff.=' checked="checked" ';
			$aff.='>'.$row['ville']; 
	  	
			$aff .= "</td>";

	  if($i%$nbcol==($nbcol-1))
 			$aff .= '</tr>';
			
			$i++;
			
	  }// fin while
	  
	  $aff .= '<table>';
	  
}


// envoi reponse Php a Ajax	
	echo $aff;
	
	
}


Néanmoins je ne pense pas que ca vienne de la, car ce script PHP ne recoit aucune valeur du POST

Voici le lien pour tester :
http://www.naviguimmo.com/annonces_liste.php?GO=GO&region=Rhone-alpes

Rentre un code postal, selectionne une ville, et la tu verras que dans le 3e champs, il y a une erreur due au fait qu'il n'y a pas eu de POST envoyé par le 2e formulaire
mardi 30 novembre 2010 à 11:41:10 | Re : Selects en cascade avec bdd Mysql

PetoleTeam

Membre Club
Réponse acceptée !
Bonjour,
lu dans la source générée par la PHP
Code HTML :
<div id="id_ville" style="float: left;">&nbsp;&nbsp; Ville : 
  <select name="id_ville" id="id_ville" onchange="makeRequest('RepVilles.php','id_ville','id_ville_multi')">
    <option value="">-- Choisissez --</option>
  </select>
</div>
on note 2 fois id="id_ville", ce qui fait que lorsque dans ta fonction tu récupères
Code Javascript :
obj=document.getElementById(id_niveau);
data="val_sel="+obj.value;
avec id_niveau égal à id_ville, c'est le premier qui est récupérés, donc la DIV et elle n'a pas de value.

Une ID doit être UNIQUE!


;O)
mardi 30 novembre 2010 à 12:58:35 | Re : Selects en cascade avec bdd Mysql

mdc888

Alors la merci !

Pinaise, je le sais aussi que les id sont unique... Mais un petit copié collé et voila :(
C'est une bonne leçon pour moi

Merci beaucoup en tous cas
mardi 30 novembre 2010 à 13:17:30 | Re : Selects en cascade avec bdd Mysql

PetoleTeam

Membre Club
tu pourrais d'ailleurs te passer d'ID en passant directement à la fonction this.value, ce qui te feras modifier ta fonction comme suit
Code Javascript :
function makeRequest( url, param_, id_ecrire){ 
....
data = "val_sel=" +param_;
...
}
et donc un appel
Code Javascript :
onchange = "makeRequest('RepVilles_multi.php', this.value,'div_id_ville_multi')"

;O)
mardi 30 novembre 2010 à 13:35:29 | Re : Selects en cascade avec bdd Mysql

mdc888

Bone idée ;)
Mais j'utilise cette fonction dans d'autres pages, et sous d'autres conditions...

++
:)


Cette discussion est classée dans : mysql, request, http, select, id


Répondre à ce message

Sujets en rapport avec ce message

Jquery - Appel ajax dans un modalbox [ par lostrailler ] Bonjour à tous, Je vous expose mon soucis avec jquery et le plugin modalbox. Je dois afficher un formulaire à remplir dans un modalbox. Jusque là pa Problème de récupération de données avec AJAX [ par Diablotine666 ] Bonjour, Je souhaite récupérer des données contenues dans une base de données en utilisant de l'ajax afin de ne pas avoir à rechercher ma page. Mon co Calcul d'un panier en temps réel [ par lorentdups ] Bonjour à tous !Je souhaiterais réaliser une panier avec calcul en temps réel du prix en fonction de la quantité choisie.Je pense que cela est possibl recuperation données AJAX [ par corsamobile ] Bonjour à tous,J'ai créé une liste deroulante liée avec trois listes deroulantes qui vont chercher leurs données dans une BDD.En selectionnant une ref Trouver tous les select d'un form dont l'ID commence par.. [ par romalafrite ] Bonjour,j'ai plusieurs select dans un formulaire (insérés dynamiquement en PHP). Je voudrais au moment de la validation parcourir EN JS tous les éléme Récupérer l'id d'un select [ par iomega ] Bonjour à tous je voudrai récupérer dans un autre champs nommé auteur le numéro d'index d'un select mais le problème est que le l'id contient du text aide à la saisie avec un popup [ par lucsa ] bonjour, je me met au javascript et j'ai quelque soucis.je souhaite afficher un popup si l'on click dans champ de saisie (input type=text). ce popoup aide à la saisie avec un popup [ par lucsa ] bonjour, je me met au javascript et j'ai quelque soucis.je souhaite afficher un popup si l'on click dans champ de saisie (input type=text). ce popoup select menu [ par fred0076464 ] salut, voila j'ai un menu deroulant qui se charge avec un champs 'res-nom' de ma table mysql 'reservation ' dont voici le code : Nom:onchange="submode Php + js ==> select + onchange( ) + POST ==> niveau debutant++ [ par zeguizmo ] Salut tout le monde, J'ai un petit probleme de javascript dans mon code en php. J'utilise un bouton select : <option V


Nos sponsors


Sondage...

CalendriCode

Mai 2012
LMMJVSD
 123456
78910111213
14151617181920
21222324252627
28293031   

Consulter la suite du CalendriCode

Photothèque

A découvrir



 
Développement réalisé par Nicolas SOREL (Nix) avec l'aide de : Cyril DURAND et Emmanuel (EBArtSoft), Merci à Vincent pour ses précieux conseils.
CodeS-SourceS.com© Toute reproduction même partielle est interdite sauf accord écrit du Webmaster
CodeS-SourceS.com© est une marque déposée tous droits réservés

Google Coop CodeS-SourceS Google Coop CodeS-SourceS
Temps d'éxécution de la page : 0,702 sec (3)

Nous contacter | Annoncer sur CodeS-SourceS | Mentions légales