Компьютерный форум OSzone.net  

Компьютерный форум OSzone.net (http://forum.oszone.net/index.php)
-   Вебмастеру (http://forum.oszone.net/forumdisplay.php?f=22)
-   -   [решено] Проблема с селектом (http://forum.oszone.net/showthread.php?t=229678)

blackmane 06-03-2012 15:11 1873522

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

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

Sham 06-03-2012 20:18 1873795

Цитата:

Цитата blackmane
switch($_GET['firm']){
****case*$_GET['firm']: »

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

blackmane 07-03-2012 14:19 1874230

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

blackmane 07-03-2012 16:09 1874304

Цитата:

Цитата 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='';} 

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

Sham 07-03-2012 23:04 1874498

Цитата:

Цитата blackmane
if ($array['model'] == $model['model_p']) {$sel=true;} else {$sel=false;} »

а чего вы их сравниваете, если они еще не определены. $model внутри while определяется. $array не вижу.

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

blackmane 08-03-2012 10:09 1874682

Цитата:

Цитата 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, и как его правильно передать в другой файл, я не понял.

blackmane 08-03-2012 20:34 1875060

Передать можно при помощи $_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, но создается ощущение что он исполняется только один раз, или он сравнивает не значения???

Sham 08-03-2012 21:36 1875116

Цитата:

Цитата blackmane
{echo*"<div>$array['model']*=*$model['model_p']</div>*";} »

тут ошибка: внутри двойных кавычек либо {$array['model']} либо $array[model] иначе не выведет.

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

blackmane 09-03-2012 11:56 1875377

В первом списке таки получилось:
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 не разбираетесь?

blackmane 12-03-2012 15:57 1877739

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


Время: 18:39.

Время: 18:39.
© OSzone.net 2001-