Войти

Показать полную графическую версию : [решено] Проблема с селектом


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

Вывод списков

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

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

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";
}
}
}

Я сделал так:

$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'] = ячейка из второй таблицы, из которой формируется список

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

Sham
06-03-2012, 20:18
switch($_GET['firm']){
****case*$_GET['firm']: »

какой смысл в этом коде?

blackmane
07-03-2012, 14:19
Честно?, никакого. Но именно такой вариант я нашел на AJAX`e.
Но к делу это не относится.

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

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

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

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

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

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

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

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

$array['model'] определяется в первом файле: Вывод списков
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, и как его правильно передать в другой файл, я не понял.

blackmane
08-03-2012, 20:34
Передать можно при помощи $_POST и input (hidden), но основная проблема то остается, интерпритар считает что:
2=1
2=2
2=3
2=4.....
2=11
Это результат работы:

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

Sham
08-03-2012, 21:36
{echo*"<div>$array['model']*=*$model['model_p']</div>*";} »
тут ошибка: внутри двойных кавычек либо {$array['model']} либо $array[model] иначе не выведет.

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

blackmane
09-03-2012, 11:56
В первом списке таки получилось:

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>";


http://s1.ipicture.ru/uploads/20120309/k3D1Txzp.jpg

Во втором пока никак не получается ((((, плюс к этому нужно сделать так чтобы при обращении к странице сразу выводились selected во всех списках при совпадении, но обращение ко второму списку происходит только после выбора в первом списке ((((
Хотелось бы чтобы выглядело так:
http://s1.ipicture.ru/uploads/20120309/56dGVytK.jpg
Но такой результат я могу получить написав так:

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 не разбираетесь?

blackmane
12-03-2012, 15:57
Не нашел выхода в плане автоматической подгрузки при загрузке страницы, т.к. там используется onChange, сделал по другому:
Index.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

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, который они пишут (в исходном коде он стоит у нужного опшена), во втором списке????




© OSzone.net 2001-2012