Независимая выборка с 3 селектов Ajax

  • Автор темы grenuy
  • Дата начала
G

grenuy

Есть три селекта которые записи которых подтягиваются с базы. После выбора в любом из селекта, в двух других должны подгружаться данные по определенному условию(взаимозависимость что выбрано) после выбора в другом селекте поля, подгружаеться третий незадействованный селект, и кнопочка сбросить выбор. В AJAX слабый, поэтому обращаюсь к Вам, спасибо! :)
 
V

vital

иии? где попытки решения и мечто конкретного претконовения? или вам стоимость сказать?
 
G

grenuy

Как и говорил в аджаксе 0-по этому сюда и обратился... , есть сайтик там нужно будет сделать эту фичу... ищу что то похоже готовое, делаю остальное... А потом если ничего не найду, и никто не поможет то буду как то сам выкручиваться...
Когда найду решения то обязательно выложу сюда... ) Но надеюсь умеющие помогут... Что касается пхп и мускула могу помочь и сам... )
 
E

etc

grenuy Ну начните с начала, если совсем 0 -
 
G

grenuy

Начал!!! ))
Короче создал два файла первый сам обработчик
PHP:
<?php
include_once('../moduls/bd.php');
header("Content-Type: text/xml; charset=windows-1251");
$request = $_GET["codes"];

if(isset($_GET["codes"])&& !isset($_GET["ress"])){
$ress='codes';
echo loadData($request,$ress);
}
elseif(isset($_GET["rayon"])&& !isset($_GET["ress"]))
{
$ress='rayon';
echo loadData($request,$ress);
}
elseif(isset($_GET["ress"])){
$ress='yes';
echo loadData($request,$ress);
}

function loadData($request,$ress){
if($ress=='yes')
{
//Район
$sql_rayon="SELECT * FROM `rayon_spisok` ORDER BY `name` ASC";

$whr="";
}
elseif($ress=='rayon')
{
$whr=" AND rayon='".$_GET['rayon']."'";
$sql_rayon="SELECT r.id,r.name FROM rayon_spisok AS r WHERE r.id='".$_GET['rayon']."'";

}
elseif($ress=='codes')
{
$whr=" AND id='".$_GET['codes']."'";
$sql_rayon="SELECT r.id,r.name FROM `salon` AS s, rayon_spisok AS r WHERE s.rayon=r.id AND s.id='".$_GET['codes']."'";

}
//code
$sql="SELECT code,id FROM `salon` WHERE code!='' ".$whr." ORDER BY `code` ASC";
$result1 = mysql_query($sql);
//echo $sql;
$result='<?xml version="1.0" encoding="windows-1251"?>'."\n<names>";
while ($myrow = mysql_fetch_array($result1))
{
$result.= '<code value="'.$myrow['id'].'">'.htmlspecialchars($myrow['code'])."</code>\n";
};

//name
$sql="SELECT name,id FROM `salon` WHERE name!='' ".$whr." ORDER BY `name` ASC";
$result1 = mysql_query($sql);
//echo $sql;
while ($myrow = mysql_fetch_array($result1))
{
$result.= '<name value="'.$myrow['id'].'">'.htmlspecialchars($myrow['name'])."</name>\n";
};
//rayon
$result1 = mysql_query($sql_rayon);
//echo $sql;
while ($myrow = mysql_fetch_array($result1))
{
$result.= '<rayon value="'.$myrow['id'].'">'.htmlspecialchars($myrow['name'])."</rayon>\n";
};
//adress
$sql="SELECT adress,id FROM `salon` WHERE adress!='' ".$whr." ORDER BY `adress` ASC";
$result1 = mysql_query($sql);
//echo $sql;
while ($myrow = mysql_fetch_array($result1))
{
$result.= '<adress value="'.$myrow['id'].'">'.htmlspecialchars($myrow['adress'])."</adress>\n";
};


$result.='</names>';
return $result;
}
?>
Другой Сам файл.
PHP:
<? 
include_once('../moduls/bd.php');
//include_once('moduls/for_all/init.php');
?>
<head>
<title>Связанные списки, пример № 5</title>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<style type="text/css">
fieldset{width:10em;display:block;padding:.5em}
select{width:10em}
</style>
<script type="text/javascript">

function loadXMLDoc(method,url){
if(window.XMLHttpRequest){
req = new XMLHttpRequest();
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
}else if(window.ActiveXObject){
req = new ActiveXObject("Microsoft.XMLHTTP");
if(req){
req.onreadystatechange = processReqChange;
req.open(method, url, true);
req.send(null);
}
}
}
function processReqChange(){
if(req.readyState == 4){
if(req.status == 200){
getRayon(req.responseXML.documentElement);
}else{
alert("There was a problem retrieving the XML data:\\n" + req.statusText);
}
}
}
function getRayon(xml){

var codes = xml.getElementsByTagName("code");
var _select = document.getElementById("code");
_select.innerHTML = ""; // Удаляем всех потомков.	
// Создаем список с доступными названиями.
for(i=0;i<codes.length;i++){
var option = document.createElement("option");
var optionText = document.createTextNode(codes[i].firstChild.data);
option.appendChild(optionText);
option.setAttribute("value",codes[i].getAttribute("value"));
_select.appendChild(option);
}

var names = xml.getElementsByTagName("name");
var _select = document.getElementById("name");
_select.innerHTML = ""; // Удаляем всех потомков.	
// Создаем список с доступными названиями.
for(i=0;i<names.length;i++){
var option = document.createElement("option");
var optionText = document.createTextNode(names[i].firstChild.data);
option.appendChild(optionText);
option.setAttribute("value",names[i].getAttribute("value"));
_select.appendChild(option);
}

var rayons = xml.getElementsByTagName("rayon");
var _select = document.getElementById("rayons");
_select.innerHTML = ""; // Удаляем всех потомков.	
// Создаем список с доступными районами.
for(i=0;i<rayons.length;i++){
var option = document.createElement("option");
var optionText = document.createTextNode(rayons[i].firstChild.data);
option.appendChild(optionText);
option.setAttribute("value",rayons[i].getAttribute("value"));
_select.appendChild(option);
}


var rayons = xml.getElementsByTagName("adress");
var _select = document.getElementById("adress");
_select.innerHTML = ""; // Удаляем всех потомков.	
// Создаем список с доступными Адресами.
for(i=0;i<rayons.length;i++){
var option = document.createElement("option");
var optionText = document.createTextNode(rayons[i].firstChild.data);
option.appendChild(optionText);
option.setAttribute("value",rayons[i].getAttribute("value"));
_select.appendChild(option);
}

}




function onChange(_this){
var url = "ajax.php?codes="+_this.value;
loadXMLDoc("get",url);
}
function onChange2(_this){
var url = "ajax.php?ress=yes";
loadXMLDoc("get",url);
}
function onChange3(_this){
var url = "ajax.php?rayon="+_this.value;
loadXMLDoc("get",url);
}
</script>

</head>
<body>
<form action="" method="post">
Код салона ---------------- название----------------район----------------адрес<br />
<select onchange="onChange(this)" name="code" id="code">
<?

//Код салона
$sql="SELECT `code`,id FROM `salon` WHERE code!='' ORDER BY `code` ASC";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
do
echo ' <option value="'.$myrow['id'].'">'.$myrow['code'].'</option>';
while ($myrow = mysql_fetch_array($result));
?>
</select>
<select onchange="onChange(this)" name="name" id="name">
<?
//Название
$sql="SELECT `name`,id FROM `salon` WHERE name!='' ORDER BY `name` ASC";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
do
echo ' <option value="'.$myrow['id'].'">'.$myrow['name'].'</option>';
while ($myrow = mysql_fetch_array($result));
?>
</select>
<select onchange="onChange3(this)" name="rayon" id="rayons" >
<?
//Район
$sql="SELECT * FROM `rayon_spisok` ORDER BY `name` ASC";
$result1 = mysql_query($sql);
//echo $sql;
while ($myrow = mysql_fetch_array($result1))
{
echo ' <option value="'.$myrow['id'].'">'.$myrow['name'].'</option>';
};
?>
</select>
<select onchange="onChange(this)" name="adress" id="adress">
<?
//Адрес
$sql="SELECT `adress`,id FROM `salon` WHERE adress!='' ORDER BY `adress` ASC";
$result = mysql_query($sql);
$myrow = mysql_fetch_array($result);
do
echo ' <option value="'.$myrow['id'].'">'.$myrow['adress'].'</option>';
while ($myrow = mysql_fetch_array($result));
?>
</select>
<input onClick="onChange2(this)" type="button" value="X">

<br /> 
</form>
</body>
Вопрос следующий Первую отборку сделать не проблема... А вот как быть с второй? Тоесть как запомнить какая форма была заполненная а какие остались, и как после того как выбрали другой селект отправить данные от первого и другого? Активного селекта понял как а вот что быть с пасивным и выбранным??
 
E

etc

Сервер и клиенты общаются между собой при помощи вопрос-ответ. В чем затруднения?
 
G

grenuy

Ну как передать перемены первого и второго селекта, после выбора во втором...
То есть клиент выбрал в каком-то селекте поле, все селекты обновились, потом выбрал во втором селекте поле, как передать данные о первого?
Напоминаю что в JS очень слабый, так что извините за ламерские вопросы.
 
E

etc

document.getElementById("тут ID ваших элементов").<тут свойства>...
 
G

grenuy

Ето я понимаю... а как получить свойста елемента с id=code когда я нажал на элемент с id=name к примеру??

Добавлено: Впринцыпи сделал, рабочий вариант обновил выше....
 
M

Magistr

Столько кода из-за трёх селектов?
Зачем аякс? сколько строк в селектах?
Делается это на голом javaScript.
 
G

grenuy

Тему можно закрывать.. Уже все сделал... И научился делать подобное, а также уже научился использовать фреймворк jqure. Короче все в мажоре. Можно тему закрывать.
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!