Имя пользователя:
Пароль:  
Помощь | Регистрация | Забыли пароль?  | Правила  

Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Проблема с селектом

Ответить
Настройки темы
[решено] Проблема с селектом

Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0


Конфигурация

Профиль | Отправить PM | Цитировать


Изменения
Автор: blackmane
Дата: 06-03-2012
Как сделать так, чтобы при загрузке страницы проверялось бы совпадение значений и если совпадает поставить в option selected="true"???

Вывод списков
PHP код: Выделить весь код

echo "<select id=\"firm\" name=\"firm\" style=\"width:100px\" onchange=\"getFirm(this)\">

<option value='{$mod_fetch['id_firm']}'>{$mod_fetch_sel['firm']}</option>"
;

$r_firm=mysql_query("SELECT * FROM firm_print") or die (mysql_error());
    while (
$firm=mysql_fetch_array($r_firm))
    {
    echo 
'<option value="'.$firm['id'].'">'.$firm['firm'].'</option>';
    }
echo 
'</select>';
echo '

<select id="model" name="model" style="width:100px" onchange="getModel(this)">
<option value="all">Select</option>
</select> 

Обработчик JS
PHP код: Выделить весь код

var ajax = new Array();

function 
getFirm(sel)
{
    var 
firm sel.options[sel.selectedIndex].value;
    
document.getElementById('model').options.length 0;
    if(
firm.length>0){
        var 
index ajax.length;
        
ajax[index] = new sack();
        
        
ajax[index].requestFile 'ajax.php?firm='+firm;    
        
ajax[index].onCompletion = function(){ createRegions(index) };    
        
ajax[index].runAJAX();        
    }
}
function 
createRegions(index)
{
    var 
obj document.getElementById('model');
    eval(
ajax[index].response);    


Обрабочик второго списка PHP
PHP код: Выделить весь код

if(isset($_GET['firm'])){

include_once 
'../../data/dbconfig.php'
  switch(
$_GET['firm']){
    case 
$_GET['firm']:
    
$r_model=mysql_query("SELECT * FROM mod_print WHERE id_firm='".$_GET['firm']."' ");
    while (
$model=mysql_fetch_array($r_model))
    {
    echo 
"obj.options[obj.options.length] = new Option('".$model['model_p']."','".$model['model_p']."');\n";
    }
  }


Я сделал так:
PHP код: Выделить весь код

$sel 'selected=selected';

    if (
$array['model'] == $model['model_p']) {$sel=true;} else {$sel=false;}
    while (
$model=mysql_fetch_array($r_model))
    {
    echo 
"obj.options[obj.options.length] = new Option('".$model['model_p']."','".$model['model_p']."','".$sel."');\n";
    }
  }


По крайней мере, мне так показалось более логичным, но выставлет всем selected = true, так это же еще и второй список, а не первый, в первом он всем дает false (((((
$array['model'] = ячейка из выбранной строки из первой таблицы
$model['model_p'] = ячейка из второй таблицы, из которой формируется список

Может я плохо объясняю, но ответа в просторах интернета я пока не нашел (((((

Отправлено: 15:11, 06-03-2012

 

Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Цитата blackmane:
switch($_GET['firm']){
****case*$_GET['firm']: »
какой смысл в этом коде?

Отправлено: 20:18, 06-03-2012 | #2



Для отключения данного рекламного блока вам необходимо зарегистрироваться или войти с учетной записью социальной сети.

Если же вы забыли свой пароль на форуме, то воспользуйтесь данной ссылкой для восстановления пароля.


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Честно?, никакого. Но именно такой вариант я нашел на AJAX`e.
Но к делу это не относится.

Отправлено: 14:19, 07-03-2012 | #3


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата blackmane:
По крайней мере, мне так показалось более логичным, но выставлет всем selected = true, так это же еще и второй список, а не первый, в первом он всем дает false ((((( »
Как я понял из собственного опыта в случае указания в логическом выражении оператора if:
PHP код: Выделить весь код

$array['model'] == $model['model_p'

Выражение принимается как TRUE в любом случае (((
Попробовал так
PHP код: Выделить весь код

$array['model'] = $model['model_p'];

if (
$array['model']) {$sel='selected=true';} else {$sel='';} 

Опять тоже.((((
Не понимаю...

Отправлено: 16:09, 07-03-2012 | #4


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Цитата blackmane:
if ($array['model'] == $model['model_p']) {$sel=true;} else {$sel=false;} »
а чего вы их сравниваете, если они еще не определены. $model внутри while определяется. $array не вижу.

сравнивайте внутри цикла, где создается option

Отправлено: 23:04, 07-03-2012 | #5


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Цитата Sham:
Цитата blackmane: if ($array['model'] == $model['model_p']) {$sel=true;} else {$sel=false;} »
а чего вы их сравниваете, если они еще не определены. $model внутри while определяется. $array не вижу.
сравнивайте внутри цикла, где создается option »
$array['model'] определяется в первом файле:
Цитата blackmane:
Вывод списков
PHP код:
echo "<select id=\"firm\" name=\"firm\" style=\"width:100px\" onchange=\"getFirm(this)\">
<option value='{$mod_fetch['id_firm']}'>{$mod_fetch_sel['firm']}</option>";
$r_firm=mysql_query("SELECT * FROM firm_print") or die (mysql_error());
while ($firm=mysql_fetch_array($r_firm))
{
echo '<option value="'.$firm['id'].'">'.$firm['firm'].'</option>';
}
echo '</select>';
echo '
<select id="model" name="model" style="width:100px" onchange="getModel(this)">
<option value="all">Select</option>
</select>
»[/post]
В самом начале. По идее она должна передаваться, чего не происходит.
Дело в том что $array['model'] выбирается из БД по выбранному ID, и как его правильно передать в другой файл, я не понял.

Отправлено: 10:09, 08-03-2012 | #6


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Передать можно при помощи $_POST и input (hidden), но основная проблема то остается, интерпритар считает что:
2=1
2=2
2=3
2=4.....
2=11
Это результат работы:
PHP код: Выделить весь код

if ($array['model'] == $model['model_p']) {echo "<div>$array['model'] = $model['model_p']</div> ";} 


Следовательно при
Цитата blackmane:
Цитата Sham: Цитата blackmane: if ($array['model'] == $model['model_p']) {$sel=true;} else {$sel=false;} » »
Значение $sel будет true всегда.
Только array_key_exists мне вывел 2=2, но его, как мне кажется, невозможно использовать, так как результат функции тоже постоянно истинный (
Условный оператор я поместил в цикл while, но создается ощущение что он исполняется только один раз, или он сравнивает не значения???

Отправлено: 20:34, 08-03-2012 | #7


Deadooshka


Сообщения: 2482
Благодарности: 671

Профиль | Отправить PM | Цитировать


Цитата blackmane:
{echo*"<div>$array['model']*=*$model['model_p']</div>*";} »
тут ошибка: внутри двойных кавычек либо {$array['model']} либо $array[model] иначе не выведет.

Багов в if быть не может.

Отправлено: 21:36, 08-03-2012 | #8


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


В первом списке таки получилось:
PHP код: Выделить весь код

echo "<select id=\"firm\" name=\"firm\" style=\"width:100px\" onchange=\"getFirm(this)\">";

$r_firm=mysql_query("SELECT * FROM firm_print") or die (mysql_error());
while (
$firm=mysql_fetch_array($r_firm))
    {if ( 
$firm['id'] == $mod_fetch['id_firm'])
{
$sel='selected="selected"';}    else {$sel='';}
    echo 
'<option value="'.$firm['id'].'" '.$sel.'>'.$firm['firm'].'</option>';
    }    
echo 
'</select>';
echo 
'
<select id="model" name="model" style="width:100px" onchange="getModel(this)">'
;
echo 
"<option value='all'>Select</option>
</select>"




Во втором пока никак не получается ((((, плюс к этому нужно сделать так чтобы при обращении к странице сразу выводились selected во всех списках при совпадении, но обращение ко второму списку происходит только после выбора в первом списке ((((
Хотелось бы чтобы выглядело так:

Но такой результат я могу получить написав так:
PHP код: Выделить весь код

echo "<select id=\"firm\" name=\"firm\" style=\"width:100px\" onchange=\"getFirm(this)\">";

$r_firm=mysql_query("SELECT * FROM firm_print") or die (mysql_error());
while (
$firm=mysql_fetch_array($r_firm))
    {if ( 
$firm['id'] == $mod_fetch['id_firm'])
{
$sel='selected="selected"';}    else {$sel='';}
    echo 
'<option value="'.$firm['id'].'" '.$sel.'>'.$firm['firm'].'</option>';
    }    
echo 
'</select>';
echo 
'
<select id="model" name="model" style="width:100px" onchange="getModel(this)">'
;
echo 
"<option value='{$array['model']}'>{$array['model']}</option>
</select>"


Предпоследняя строчка. В-принципе ближе к телу, но остается другая проблема, чтобы посмотреть другие принтеры фирмы Xerox, нужно выбрать сначала другую фирму, а уж потом снова Xerox. (
Вы часом в AJAX не разбираетесь?

Отправлено: 11:56, 09-03-2012 | #9


Аватара для blackmane

Пользователь


Сообщения: 69
Благодарности: 0

Профиль | Отправить PM | Цитировать


Не нашел выхода в плане автоматической подгрузки при загрузке страницы, т.к. там используется onChange, сделал по другому:
Index.php
PHP код: Выделить весь код

echo '<script type="text/javascript" src="js/ajax.js"></script>';

echo 
'<script type="text/javascript" src="js/changes.js"></script>';
echo 
"<select id=\"firm\" name=\"firm\" style=\"width:100px\" onchange=\"getFirm(this)\">";
$r_firm=mysql_query("SELECT * FROM firm_print") or die (mysql_error());
while (
$firm=mysql_fetch_array($r_firm))
    {    if ( 
$firm['id'] == $mod_fetch['id_firm'])
{
$sel='selected="selected"';}    else {$sel='';}
    echo 
'<option value="'.$firm['id'].'" '.$sel.'>'.$firm['firm'].'</option>';
    }    
echo 
'</select>';
echo 
'
<select id="model" name="model" style="width:100px">'
;
$mod_r=mysql_query("SELECT * FROM mod_print WHERE id_firm='".$mod_fetch['id_firm']."' ");
$fetch_mod_r mysql_fetch_array ($mod_r);

do {if (
$fetch_mod_r['model_p'] ==  $array['model']){$sel='selected="selected"';}    else {$sel='';}
 
printf ("<option value='%s' %s>%s</option>"
,$fetch_mod_r['model_p'], $sel,$fetch_mod_r['model_p']);}
while (
$fetch_mod_r mysql_fetch_array ($mod_r)); 
echo
"</select>"

ajax.php
PHP код: Выделить весь код

if(isset($_GET['firm'])){

include_once 
'../../data/dbconfig.php'
    
$r_model=mysql_query("SELECT * FROM mod_print WHERE id_firm='".$_GET['firm']."' ");
    while (
$model=mysql_fetch_array($r_model))
    {if (
$model['model_p'] ==  $mod_arr){$sel='defaultSelected';}    else {$sel='';}
    echo 
"obj.options[obj.options.length] = new Option('".$model['model_p']."','".$model['model_p']."','".$sel."');\n";
    }



Т.е. я настроил первый список на значение по умолчанию, а второй в первый раз я выгружаю из БД (со значением по умолчанию), при выборе другой фирмы, а потом возврате на первую selected=true работает во втором списке в Opera, FF, IE, в Safari и Chrome - не работает, как сделать так чтобы они понимали, selected, который они пишут (в исходном коде он стоит у нужного опшена), во втором списке????

Отправлено: 15:57, 12-03-2012 | #10



Компьютерный форум OSzone.net » Компьютеры + Интернет » Вебмастеру » [решено] Проблема с селектом

Участник сейчас на форуме Участник сейчас на форуме Участник вне форума Участник вне форума Автор темы Автор темы Шапка темы Сообщение прикреплено

Похожие темы
Название темы Автор Информация о форуме Ответов Последнее сообщение
Разное - Динамические списки php+AJAX + Mysql dominion86 Программирование и базы данных 1 18-12-2008 01:12
Ajax & PHP Костэн Вебмастеру 7 20-04-2008 13:35
Проблема с регистром букв (PHP+MySQL) soundofa Вебмастеру 6 06-10-2006 23:19
[решено] PHP+MySQL=Проблема... помогите решить пожалуйста! programmist72 Вебмастеру 2 03-06-2006 15:50
Проблема с PHP MySQl ilan Вебмастеру 6 08-07-2003 22:06




 
Переход