Модераторы: Sardar, Aliance

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Связка двух Combo Box в форме с помощь Ajax или .. 
:(
    Опции темы
NetJunky
Дата 22.5.2009, 17:20 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Всем привет!
У меня есть форма заказа товара электронных изделий.
В зависимости от того что выбранно в одном Combo Box хотел чтобы выводилось соотношение. Тоесть например:
Если выбран в главном клмбобоксе: Laptops
То чтобы в нижнем выходило, не чёрт знает что мр3 плееры всякие, а например: Asus Eee PC

Это сообщение отредактировал(а) NetJunky - 22.5.2009, 17:22


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Nigel
Дата 22.5.2009, 17:34 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


познаю мир
**


Профиль
Группа: Участник
Сообщений: 515
Регистрация: 20.11.2007

Репутация: нет
Всего: 19



Т.е. хотите выводить подразделы в зависимости от выбранного раздела? Почитайте про деревья и используйте любой удобный для вас способ.
PM MAIL   Вверх
NetJunky
Дата 22.5.2009, 18:09 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



А какими вообще способами помимо Ajax можно это реализовать?


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Sanchezzz
  Дата 22.5.2009, 18:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



Варианты как делать:
  •  Выбрал нажал на кнопку прошелся по БД вывел на страницу. 
  •  И аяксом это будет легко сделать...
  •  Если не хочется перегружать страницу то все данные сперва получить, потом на голимом JS делать.



--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
NetJunky
Дата 22.5.2009, 19:11 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Sanchezzz, а можно пример для второго или третьего варианта?


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Sanchezzz
  Дата 22.5.2009, 20:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



только на JS фреймфорк на mootools пойдет?  где взять MooTools
подрубишь это mootools.js
далее где нибуть JS функцию на странице где селект.

Код

function ajaxPrepare(body){
var param_str="";
    if(typeof(body) == "string"){
        param_str = body.replace(/^\?/, "");
    }else if(typeof(body) == "object"){
        for(var name in body){
            if (!body.hasOwnProperty(name)) continue;
            if (name != '')
                param_str += "&" + name + "=" + escape(body[name]).replace(/\+/g, '%2B');
        }
    }
return param_str;
}

// Параметры в JSON второй куда вставить
function AjaxSend(Parms , idDiv){

 var loader = new Element('div',{'class':'ajaxload'}); //создать элемент ? 
 loader.set('html','L O A D I N G...'); //если не нужно убрать
    var dealogdata = new Request.HTML({
            method: 'post',            //метод отправки
            url:'/ajaxcatalog.php', //путь до скрипта php
            evalScripts:true,         // погружать JS ?
            data:ajaxPrepare(Parms),  //отправка данных я люблю делать JSON
            onRequest: function(){ 
            $(idDiv).adopt(loader);      //вставляем див, если первую строку убрали где создать, это тоже убрать
            },
            onSuccess: function(a,b,c){ //прием ответа
            $(idDiv).set('html',c);
            },
            onFailure: function() {}

            }).send();
}


! примечание структура 
JSON {
'peremenay':'значение' ,
'peremenay':'значение' итд.
}
Код


<select onchange="AjaxSend({'idcatalog':this.value,'comand':'getcatalog'},'myselectdiv')">
<option value="">Выберите группу товаров<joption>
<option value="1">товар<joption>
<option value="23">товар<joption>
</select>

<div id="myselectdiv">
<select>
<option value="">пусто<joption>
</select>
</div>


Самое сладкое php:

Код

<?
if(!empty($_POST['comand']) and $_POST['comand']=='getcatalog'): 
$idcatalog = intval($_POST['idcatalog']);
//обязательно данные проверяем, так как это запрос к БД... строковые данные экронировать mysql_real_escape();
//запрос к товарам.
$sql = "SELECT * FROM `tovar` WHERE `category_id` = idcatalog";
//далее отправляем запрос через БД строем <select></select> с выбранными данными из БД
//выводим а JS сам уже вставит в див (myselectdiv) готовый селект
endif;

?>

вот в принципе краткий инструктаж...
я все не писал так как человек должен чему то научится 









Это сообщение отредактировал(а) Sanchezzz - 22.5.2009, 20:07


--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
NetJunky
Дата 22.5.2009, 20:19 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Sanchezzz, неужели только так сложно можно? Я просто не спец в этом всём. Но нету какого-то короче и проще способа?... smile 


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Sanchezzz
  Дата 22.5.2009, 20:59 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
***


Профиль
Группа: Завсегдатай
Сообщений: 1670
Регистрация: 19.11.2006
Где: Voronezh

Репутация: 3
Всего: 60



все намного проше чем ты думаешь.
часть задачи я за тебя уже решил со стороны клиента, а вот серверную сам.  smile 




--------------------
Понравился ответ "+" по репе, не забываем закрывать тему, заказы в LS.
PM MAIL Skype GTalk   Вверх
NetJunky
Дата 23.5.2009, 01:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



Не стал я всё усложнять и всётаки нашёл вроде не плохой образец.
Файл с запросами для БД:
Код

-- phpMyAdmin SQL Dump
-- version 2.6.1
-- http://www.phpmyadmin.net
-- 
-- Host: localhost
-- Generatie Tijd: 07 Aug 2005 om 10:02
-- Server versie: 4.1.9
-- PHP Versie: 4.3.10
-- 
-- Database: `jeugdfuif`
-- 

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `hoofd_akt`
-- 

CREATE TABLE `hoofd_akt` (
  `idnumber` int(11) NOT NULL auto_increment,
  `akt_groep` varchar(30) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`idnumber`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=7 ;

-- 
-- Gegevens worden uitgevoerd voor tabel `hoofd_akt`
-- 

INSERT INTO `hoofd_akt` VALUES (1, 'sport');
INSERT INTO `hoofd_akt` VALUES (2, 'gezelschapsspelen');
INSERT INTO `hoofd_akt` VALUES (4, 'concerten');
INSERT INTO `hoofd_akt` VALUES (5, 'tentoonstelling');
INSERT INTO `hoofd_akt` VALUES (6, 'fuif');

-- --------------------------------------------------------

-- 
-- Tabel structuur voor tabel `sub_akt`
-- 

CREATE TABLE `sub_akt` (
  `idnumber` int(11) NOT NULL auto_increment,
  `vr_sleutel` int(11) NOT NULL default '0',
  `akt_titel` varchar(30) collate latin1_general_ci NOT NULL default '',
  PRIMARY KEY  (`idnumber`)
) ENGINE=MyISAM DEFAULT CHARSET=latin1 COLLATE=latin1_general_ci AUTO_INCREMENT=17 ;

-- 
-- Gegevens worden uitgevoerd voor tabel `sub_akt`
-- 

INSERT INTO `sub_akt` VALUES (1, 2, 'schaken');
INSERT INTO `sub_akt` VALUES (2, 2, 'kaarten');
INSERT INTO `sub_akt` VALUES (3, 2, 'monopolie');
INSERT INTO `sub_akt` VALUES (4, 2, 'bingo');
INSERT INTO `sub_akt` VALUES (5, 1, 'zwemmen');
INSERT INTO `sub_akt` VALUES (6, 1, 'voetbal');
INSERT INTO `sub_akt` VALUES (7, 1, 'paarden');
INSERT INTO `sub_akt` VALUES (8, 1, 'atletiek');
INSERT INTO `sub_akt` VALUES (9, 4, 'klassiek');
INSERT INTO `sub_akt` VALUES (10, 4, 'modern');
INSERT INTO `sub_akt` VALUES (11, 5, 'kunst');
INSERT INTO `sub_akt` VALUES (12, 5, 'hobby');
INSERT INTO `sub_akt` VALUES (13, 5, 'historisch');
INSERT INTO `sub_akt` VALUES (14, 5, 'museum');
INSERT INTO `sub_akt` VALUES (15, 6, '<16 jaar');
INSERT INTO `sub_akt` VALUES (16, 6, 'volksfeest');


Файл с подключением к БД:
Код

<?php
/* conexxion data*/

$dbhost='localhost';
$loginname='db_user_name';
$loginpass='db_user_pass';
$dbname='db_name';
$id_link = @mysql_connect($dbhost, $loginname, $loginpass);
        if( ! $id_link ){
        echo 'Cannot login';
        }else{
        //echo 'Succesfull conected to db';
        }
        mysql_select_db($dbname, $id_link) or die(mysql_error);
        
?>


А также файл в котором можно посмотреть работу.
Код

<html>
<head>
<title>Linked comboboxes with php-mysql</title>
<meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
</head>
<?php 
/**
we need to have the previously made choice from a database
or not if this form is accessed the first time
change $passed_value and $passed_value2 to see the effect of the code 'ON LOAD'
**/
if (!isset($passed_value)){ $passed_value=2;}// example
if (!isset($passed_value2)){ $passed_value2=3;}// example
// in the body onload sequence we call a function 'redirect' to set our comboboxes
?>
<body onload="redirect(<?php echo $passed_value.','.$passed_value2?>,2)">
<?php 

// standard conexxion  see the included file conexxion.php
include('conexxion.php');
// select the data from table 'hoofd_akt' for the main aktivities for the first combobox called "example"
$sql="select * from hoofd_akt";
//  select the data from 'sub_akt' for the linked sub category for the second combo box stage 2
$sql2="select * from sub_akt WHERE vr_sleutel=".$passed_value;
$result=mysql_query($sql,$id_link) or die (mysql_error());
$result2=mysql_query($sql2,$id_link) or die (mysql_error());
?>
<!-- --><form name="doublecombo">
<select name="example" size="1"  onChange="redirect(this.options.selectedIndex,<?php echo $passed_value.','.$passed_value2?>)">
<option>-select-</option>

<?php
// echo the options for box 1 and 2
// as the idnumber is stored in the table with all results, here we compare to set SELECTED
// this is a standard formula for retrieving stored info about a box selection
  while ($newarray=mysql_fetch_array($result)) {
    echo '<option value="'.$newarray['idnumber'].'" ';
     if ($newarray['idnumber']==$passed_value) {echo "SELECTED";};
     echo '>'.$newarray['akt_groep'].'</option>'.'\n';
   } ?>  
</select>
<select name="stage2" size="1">
<?php 
// here we do the same for the second box
        
        while ($newarray=mysql_fetch_array($result2)) {    
    echo '<option value="'.$newarray['idnumber'].'" ';
     if ($newarray['idnumber']==$passed_value2) {echo "SELECTED";};
     echo '>'.$newarray['akt_titel'].'</option>';
     $x=$x+1;} ?>
</select>



<script>
<!--
/*
The original JScript can be found in nearly every JScript website
I'm just mentioning one :)
Courtesy of SimplytheBest.net - http://simplythebest.net
*/
var groups=document.doublecombo.example.options.length
var group=new Array(groups)
for (i=0; i<groups; i++){
group[i]=new Array

}
<?php 
//Here comes the data from the two linked tables in a format suited for JScripting
// into the script mentioned here above

$sql="select * from hoofd_akt";

$result=mysql_query($sql,$id_link) or die (mysql_error());
$x=0;$y=0;$m=0;$z=1;

 while ($newarray=mysql_fetch_array($result)) { 
    echo "group[0][$m]=new Option(\"".$newarray['akt_groep'].'","'.$newarray['idnumber'].'")'."\n";
    $sql2="select * from sub_akt WHERE vr_sleutel=".$newarray['idnumber']." order by idnumber asc";
    $result2=mysql_query($sql2,$id_link) or die (mysql_error());
    
    
    while ($newarray2=mysql_fetch_array($result2)) {
        echo "group[$z][$y]=new Option(\"".$newarray2['akt_titel'].'","'.$newarray2['idnumber'].'")'."\n";
        $y=$y+1;
        
        }
    $z=$z+1;
    $y=0;
    $m=$m+1;
    }
?>


var temp=document.doublecombo.stage2
function redirect(x,d,f){

for (m=temp.options.length-1;m>0;m--)

temp.options[m]=null

for (i=0;i<group[x].length;i++){
temp.options[i]=new Option(group[eval(x)][i].text,group[eval(x)][i].value)
}
temp.options[d].selected=true

}

//-->
</script>
</form><!-- -->
</body>
</html>


уже потестил: http://test.art-coder.com/linked-combo4.php

Добавлено через 40 секунд
Осталось только в этом разобраться... smile 


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
bazzjr
Дата 23.5.2009, 03:27 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



Я бы сделал наааамного проще  smile  без грамоздких функций и пр. 

Просто чистым JavaScript.

Если все еще интересно, то могу примерчик накатать.
PM MAIL ICQ   Вверх
NetJunky
Дата 23.5.2009, 11:10 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



bazzjr, конечно интересно. Простота всегда приветствуется.


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
NetJunky
Дата 27.5.2009, 18:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



bazzjr, ну и чего там с примерчиком? smile 


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
bazzjr
Дата 28.5.2009, 08:14 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 460
Регистрация: 27.12.2007
Где: Россия, Пермь

Репутация: нет
Всего: 6



NetJunky на этой неделе очень сильно занят, но ближе к выходным обязательно накатаю.

PM MAIL ICQ   Вверх
NetJunky
Дата 28.5.2009, 09:52 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



bazzjr, ок. Понимаю. У самого сессия... smile  smile 


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
NetJunky
Дата 4.6.2009, 11:47 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Опытный
**


Профиль
Группа: Участник
Сообщений: 277
Регистрация: 11.5.2008
Где: Tallinn

Репутация: нет
Всего: 0



bazzjr, быть или не быть коду от тебя?... smile  smile 


--------------------
Sleep, those little slices of death; Oh how I loathe them. © Edgar Allan Poe
Таллиннцы http://vingrad.ru/groups.php?action=group_...mp;group_id=139

Для записи данных объёмом 1 Терабайт на бумагу, нужно срубить 50000 деревьев.
PM MAIL WWW ICQ Skype MSN   Вверх
Ответ в темуСоздание новой темы Создание опроса
Форум для вопросов, которые имеются в справочниках, но их поиск вызвал затруднения, или для разработчика требуется совет или просьба отыскать ошибку. Напоминаем: 1) чётко формулируйте вопрос, 2) приведите пример того, что уже сделано, 3) укажите явно, нужен работающий пример или подсказка о том, где найти информацию.
 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | JavaScript: Общие вопросы | Следующая тема »


 




[ Время генерации скрипта: 0.0790 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.