Ajax - liste liées + radio boutons
neg12
Messages postés
5
Statut
Membre
-
Alain_42 Messages postés 5413 Statut Membre -
Alain_42 Messages postés 5413 Statut Membre -
Bonjour,
Je suis bloqué sur un problème depuis plusieurs jours, peut-être pouvez-vous m'aider?
Pour la mise à jour d'une base de donnée je doit passer par deux listées liées et des radio boutons.
Ma seconde liste doit être remplie suivant les radios boutons sélectionnés et la sélection dans la première liste, et changer automatiquement (sans refresh de la page) en cas de sélection différente dans la liste ou des radio bouttons.
Concernant les liste j'ai pu le faire en suivant des exemples trouvés sur le net, mais je n'arrive pas à y inclure le cas des radio boutons.
En fait je voudrais que la requête sql utilisée pour remplir la seconde liste soit modifiée suivant les radios boutons sélectionnés, mais je n'arrive pas à récupérer leur valeur via ajax.
Voici mon code:
Formulaire:
Fonction ajax
Page PHP qui va interroger la BDD pour repondre a la requette AJAX
Je suis bloqué sur un problème depuis plusieurs jours, peut-être pouvez-vous m'aider?
Pour la mise à jour d'une base de donnée je doit passer par deux listées liées et des radio boutons.
Ma seconde liste doit être remplie suivant les radios boutons sélectionnés et la sélection dans la première liste, et changer automatiquement (sans refresh de la page) en cas de sélection différente dans la liste ou des radio bouttons.
Concernant les liste j'ai pu le faire en suivant des exemples trouvés sur le net, mais je n'arrive pas à y inclure le cas des radio boutons.
En fait je voudrais que la requête sql utilisée pour remplir la seconde liste soit modifiée suivant les radios boutons sélectionnés, mais je n'arrive pas à récupérer leur valeur via ajax.
Voici mon code:
Formulaire:
<?php
include('db/mysql_db.php');
echo '<form name="showdom" method="post" action="" >';
echo '<div id="id_listcat">';
echo '<p>Step 1: Select type: </p></br>';
echo '<input type="radio" name="list_type" value="domain" id="list_type" checked="checked" onchange="makerequest(this.value)" /><label for="domain">domain</label> ';
echo '<input type="radio" name="list_type" value="url" id="list_type" onchange="makerequest(this.value)" /><label for="url">url</label></br></br>';
echo '<p>Step 2: Select list type: </p></br>';
echo '<input type="radio" name="filter_type" value="0" id="filter_type" checked="checked" oonchange="makerequest(this.value)" /><label for="whitelist">whitelist</label> ';
echo '<input type="radio" name="filter_type" value="1" id="filter_type" onchange="makerequest(this.value)" /><label for="blacklist">blacklist</label></br></br>';
echo '<p>Step 3: Select a company: </p></br>';
echo '<select size=1 name="selectcompany" id="id_selectcompany" onChange="makeRequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'id_listdom\')">';
echo '<option>Select: </option>';
$result_recherche=mysql_query("SELECT distinct company_location FROM company_conf ORDER BY company_location" ) or die ("Error: ".mysql_error());
$nombre_enr=mysql_num_rows($result_recherche);
if (! $result_recherche) { echo "Erreur requete"; exit;}
while ($row=mysql_fetch_assoc($result_recherche)){
?>
<option value="<?php echo $row['company_location']?>">
<?php echo $row['company_location']?></option>
<?php
}
echo '</select><br><br>';
echo '</div>';
echo '<div id="id_listdom">';
echo '<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->';
echo '</div>';
echo '</form>';
mysql_close($conn);
?>
Fonction ajax
// Requette AJAX
function makeRequest(url,id_selectcompany,list_type,filter_type,id_selectdom){
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_selectdom); } //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_selectcompany);
var radios1 = document.getElementsById(list_type);
for (i=0; i<radios1.length; i++)
if (radios1[i].checked)
var valsel1 = radios1[i].value;
var radios2 = document.getElementsById(filter_type);
for (i=0; i<radios2.length; i++)
if (radios2[i].checked)
var valsel2 = radios2[i].value;
data="val_sel="+obj.value;
http_request.send(data);
http_request.send(valsel1);
http_request.send(valsel2);
}
function traitementReponse(http_request,id_selectdom) {
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_selectdom);
obj.innerHTML = affich_list;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
Page PHP qui va interroger la BDD pour repondre a la requette AJAX
<?php
include ("db/mysql_db.php");
list_type_choice=$_POST['val_sel1'];
$result_recherche=mysql_query("SELECT distinct $list_type_choice FROM Custom_URL where company_location='".$_POST['val_sel']."' and type='".$_POST['val_sel2']."' ORDER BY $list_type_choice" ) or die ("Error: ".mysql_error());
$aff="";
$aff=$aff."<select name='selectdom[]' id='id_selectdom' size='10'>";
while ($row=mysql_fetch_assoc($result_recherche)){
$aff.="<option value=\"$row[$list_type_choice]\">$row[$list_type_choice]</option>";
}
$aff=$aff."</select>
<br><br>";
echo $aff;
?>
A voir également:
- Ajax - liste liées + radio boutons
- Liste déroulante excel - Guide
- Radio française - Télécharger - Médias et Actualité
- Liste code ascii - Guide
- Liste déroulante en cascade - Guide
- Comment réinitialiser un téléphone avec les boutons - Guide
1 réponse
tiens je reconnais mon code Ajax (c'est bien ça sert au moins a qq chose)
regardes mes remarques et rectifs (il peut subsister des erreurs)
regardes mes remarques et rectifs (il peut subsister des erreurs)
<?php
include('db/mysql_db.php');
echo '<form name="showdom" method="post" action="" >';
echo '<div id="id_listcat">';
echo '<p>Step 1: Select type: </p></br>';
echo '<input type="radio" name="list_type" value="domain" id="radio_type_1" checked="checked" onchange="makerequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'list_type\',\'filter_type\',\'id_listdom\')" /><label for="domain">domain</label> ';
echo '<input type="radio" name="list_type" value="url" id="radio_type_2" onchange="makerequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'list_type\',\'filter_type\',\'id_listdom\')" /><label for="url">url</label></br></br>';
//tu ne peut pas mettre 2 fois le même id donc on va les atteindre par le name
//tu dois toujours passer les mêmes arguments a l'ppel de focntion maquerequest
echo '<p>Step 2: Select list type: </p></br>';
echo '<input type="radio" name="filter_type" value="0" id="radio_filter_type_1" checked="checked" onchange="makerequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'list_type\',\'filter_type\',\'id_listdom\')" /><label for="whitelist">whitelist</label> ';
echo '<input type="radio" name="filter_type" value="1" id="radio_filter_type_2" onchange="makerequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'list_type\',\'filter_type\',\'id_listdom\')" /><label for="blacklist">blacklist</label></br></br>';
echo '<p>Step 3: Select a company: </p></br>';
echo '<select size=1 name="selectcompany" id="id_selectcompany" onChange="makeRequest(\'RepPhpAjax_showdom.php\',\'id_selectcompany\',\'list_type\',\'filter_type\',\'id_listdom\')">';
echo '<option>Select: </option>';
$result_recherche=mysql_query("SELECT distinct company_location FROM company_conf ORDER BY company_location" ) or die ("Error: ".mysql_error());
$nombre_enr=mysql_num_rows($result_recherche);
if (! $result_recherche) { echo "Erreur requete"; exit;}
while ($row=mysql_fetch_assoc($result_recherche)){
?>
<option value="<?php echo $row['company_location']?>">
<?php echo $row['company_location']?></option>
<?php
}
echo '</select><br><br>';
echo '</div>';
echo '<div id="id_listdom">';
echo '<!-- ici sera charge la reponse mode texte de PHP à la request AJAX -->';
echo '</div>';
echo '</form>';
mysql_close($conn);
?>
Fonction ajax
<script type="text/javascript">
// Requette AJAX
function makeRequest(url,id_selectcompany,list_type,filter_type,id_selectdom){
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_selectdom); } //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_selectcompany);
//on atteint par le name
var radios1 = document.getElementsByName(list_type);
for (i=0; i<radios1.length; i++)
if (radios1[i].checked)
var valsel1 = radios1[i].value;
var radios2 = document.getElementsByName(filter_type);
for (i=0; i<radios2.length; i++)
if (radios2[i].checked)
var valsel2 = radios2[i].value;
data="val_sel="+obj.value+"&radio1="+valsel1+"&radio2="+valsel2;
http_request.send(data);
}
function traitementReponse(http_request,id_selectdom) {
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_selectdom);
obj.innerHTML = affich_list;
}
else {
alert('Un problème est survenu avec la requête.');
}
}
}
</script>
Page PHP qui va interroger la BDD pour repondre a la requette AJAX
<?php
include ("db/mysql_db.php");
$compagny_choice=$_POST['val_sel'];
$list_type_choice=$_POST['val_sel1'];
$filter_type_choice=$_POST['val_sel2'];
//modifies et tu tiens compte de ces valeurs pour ta requette
$result_recherche=mysql_query("SELECT distinct $list_type_choice FROM Custom_URL where company_location='".$_POST['val_sel']."' and type='".$_POST['val_sel2']."' ORDER BY $list_type_choice" ) or die ("Error: ".mysql_error());
$aff="";
$aff=$aff."<select name='selectdom[]' id='id_selectdom' size='10'>";
while ($row=mysql_fetch_assoc($result_recherche)){
$aff.="<option value=\"$row[$list_type_choice]\">$row[$list_type_choice]</option>";
}
$aff=$aff."</select>
<br><br>";
echo $aff;
?>