Форум: Форум PHPФорум ApacheФорум Регулярные ВыраженияФорум MySQLHTML+CSS+JavaScriptФорум FlashРазное
Новые темы: 0000000
PHP на примерах (2 издание). Авторы: Кузнецов М.В., Симдянов И.В. Объектно-ориентированное программирование на PHP. Авторы: Кузнецов М.В., Симдянов И.В. C++. Мастер-класс в задачах и примерах. Авторы: Кузнецов М.В., Симдянов И.В. PHP Puzzles. Авторы: Кузнецов М.В., Симдянов И.В. PHP. Практика создания Web-сайтов (второе издание). Авторы: Кузнецов М.В., Симдянов И.В.
ВСЕ НАШИ КНИГИ
Консультационный центр SoftTime

Форум PHP

Выбрать другой форум

 

Здравствуйте, Посетитель!

вид форума:
Линейный форум Структурный форум

тема: Есть выпадающий список,который позволяет выбирать либо первый массив
 
 автор: usik   (25.11.2008 в 19:41)   письмо автору
 
 

Ситуация такая есть выпадающий список,который позволяет выбирать либо первый массив данных либо второй.Количество элементов в каждом массиве равно двум, по этой причине внизу этого списка есть две гипперсылки "1" и "2". Сценарий должен делать следующее:пусть из выпадающего списка я выбираю первый массив. Тогда по нажатию гипперсылок должно происходить следующее : если я нажму на гипперссылку "1", то должно вывестись значение нулевого элемента первого массива(т.к. в списке выбран первый массив), если я нажму "2", то должно вывестись значению первого элемента массива. Если же я выбиру из спика массив второй , то соответственно при нажатии гипперсылок должно выводиться значения элементов второго массива. Ниже представлен код моих трудов, помогите плиз.

<
HTML> 

<table> 
  <tr> 
   <td width=150><b>Выбирете массив</b></td> 
   <td><select arr size=1> 
       <option value=1 selected>Первый массив</option> 
       <option value=2>Второй массив</option> 
       </select></td> 
   </tr> 
 </table> 
   <a href="Ex.php?Element=0">1</a> 
   <a href="Ex.php?Element=1">2</a><br> 


 <?php 
   $first
[0]="f_1"
   
$first[1]="f_2"

   
$second[0]="s_1"
   
$second[1]="s_2"

   
Если в списке выбран "Первый массив"то выводим то что в нем 
    

     if (isset(
$_GET['Element'])) 
      echo 
$first[$_GET['Element']]; 
    } 

   
Если в списке выбран "Второй массив"то выводим то что в нем 
    

     if (!isset(
$_GET['Element'])) 
         echo 
$second[$_GET['Element']]; 
    
     } 

?> 
</HTML>


Помогите пожалуйста.

  Ответить  
 
 автор: BinLaden   (25.11.2008 в 19:49)   письмо автору
 
   для: usik   (25.11.2008 в 19:41)
 

Для решения нужно выучить как создавать HTML-формы.

  Ответить  
 
 автор: mikha   (26.11.2008 в 04:32)   письмо автору
 
   для: usik   (25.11.2008 в 19:41)
 

<?php
$arr 
= array(
    
"1"    =>    "first",
    
"2"    =>    "second"
);
$first = array(
    
"0"    =>    "f_1",
    
"1"    =>    "f_2"
);
$second = array(
    
"0"    =>    "s_1",
    
"1"    =>    "s_2"
);
if(isset(
$_REQUEST['select'])) $select intval($_REQUEST['select']); else $select '';
if(isset(
$_REQUEST['submit'])) $submit intval($_REQUEST['submit']); else $submit '';
if(
$select and $submit) {
    if(
$submit == 1$submit 0; else $submit 1;
    if(isset(
$arr[$select])) {
        
$arr2 = $$arr[$select];
        echo 
$arr2[$submit];
    }else echo 
"гулять отдыхать";
}
?>
<style type="text/css">
<!--
.zzz {
    text-decoration: underline;
    border-style: none;
    background-color: #FFFFFF;
    margin-right: 12px;
    color: #0000FF;
}
-->
</style>
<form action="" method="post" name="form_">
  <table>
    <tr>
      <td width="150"><strong>Выбирете массив</strong></td>
      <td><select name="select" size="1">
          <option value="1" selected="selected">Первый массив</option>
          <option value="2">Второй массив</option>
        </select></td>
    </tr>
  </table>
  <input class="zzz" type="submit" name="submit" value="1" />
  <input class="zzz" type="submit" name="submit" value="2" />
</form>

  Ответить  
 
 автор: mikha   (26.11.2008 в 04:33)   письмо автору
 
   для: usik   (25.11.2008 в 19:41)
 

<?php
$arr 
= array(
    
"1"    =>    "first",
    
"2"    =>    "second"
);
$first = array(
    
"0"    =>    "f_1",
    
"1"    =>    "f_2"
);
$second = array(
    
"0"    =>    "s_1",
    
"1"    =>    "s_2"
);
if(isset(
$_REQUEST['select'])) $select intval($_REQUEST['select']); else $select '';
if(isset(
$_REQUEST['hidden'])) $hidden intval($_REQUEST['hidden']); else $hidden '';
if(
$select and $hidden) {
    if(
$hidden == 1$hidden 0; else $hidden 1;
    if(isset(
$arr[$select])) {
        
$arr2 = $$arr[$select];
        echo 
$arr2[$hidden];
    }else echo 
"гулять отдыхать";
}
?>
<script language="JavaScript1.2">
<!--
function doSel(n){
    document.getElementById('hidden').value = n;
    form_.submit();
}
//-->
</script>
<form action="" method="post" name="form_">
  <table>
    <tr>
      <td width="150"><strong>Выбирете массив</strong></td>
      <td><select name="select" size="1">
          <option value="1" selected="selected">Первый массив</option>
          <option value="2">Второй массив</option>
        </select></td>
    </tr>
  </table>
  <a href="#" onClick="doSel('1')">1</a> <a href="#" onClick="doSel('2')">2</a>
  <input name="hidden" type="hidden" id="hidden" value="" />
</form>

  Ответить  
 
 автор: usik   (29.11.2008 в 02:35)   письмо автору
 
   для: mikha   (26.11.2008 в 04:33)
 

Спаибо за код, но тут есть один моментик, который я не знаю как исправить:
-Когда в списке выбран "первый массив" , и я щелкаю на гипперсылки ,то все нормально.

-Когда в списке выбран "второй массив" то происходит следующее:
По нажатии на любую из гипперсылок выводится правильное значение содержимого элемента второго массива, но....Допустим я нажал на гипперсылку "1". Мне выводится содержимое нулевого элемента второго массива с последующей перезагрузкой страницы. После перезагрузки страницы
в списке стоит "первый массив". Т.е. для второго массива я могу просмотреть только один элемент. Я так понимаю нужно сделать, так чтобы если был выбран "второй массив" то после нажатия на любую из гипперсылок и после перезагрузки страницы в списке должен стоять второй массив. Как с этим быть ? Как решить такую задачу? Помогите плиз.

  Ответить  
 
 автор: usik   (29.11.2008 в 02:39)   письмо автору
 
   для: usik   (29.11.2008 в 02:35)
 

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

  Ответить  
 
 автор: mikha   (29.11.2008 в 05:38)   письмо автору
 
   для: usik   (29.11.2008 в 02:39)
 

<?php
$arr 
= array(
    
"1"    =>    "first",
    
"2"    =>    "second"
);
$first = array(
    
"0"    =>    "f_1",
    
"1"    =>    "f_2"
);
$second = array(
    
"0"    =>    "s_1",
    
"1"    =>    "s_2"
);
$style "";
if(isset(
$_REQUEST['select'])) $select intval($_REQUEST['select']); else $select '';
if(isset(
$_REQUEST['hidden'])) $hidden intval($_REQUEST['hidden']); else $hidden '';
if(
$select and $hidden) {
    if(
$hidden == 1) {
        
$style 1;
        
$hidden 0;
    }else{
        
$style 2;
        
$hidden 1;
    }
    if(isset(
$arr[$select])) {
        
$arr2 = $$arr[$select];
        echo 
$arr2[$hidden];
    }else echo 
"гулять отдыхать";
}
?>
<script language="JavaScript1.2">
<!--
function doSel(n){
    document.getElementById('hidden').value = n;
    form_.submit();
}
//-->
</script>
<form action="" method="post" name="form_">
  <table>
    <tr>
      <td width="150"><strong>Выбирете массив</strong></td>
      <td><select name="select" size="1">
          <option value="1"<?php if($select == 1) echo ' selected="selected"'?>>Первый массив</option>
          <option value="2"<?php if($select == 2) echo ' selected="selected"'?>>Второй массив</option>
        </select></td>
    </tr>
  </table>
  <a href="#" onClick="doSel('1')"<?php if($style == 1) echo " style=\"color:#FF0000;\""?>>1</a>  
  <a href="#" onClick="doSel('2')"<?php if($style == 2) echo " style=\"color:#FF0000;\""?>>2</a>
  <input name="hidden" type="hidden" id="hidden" value="" />
</form>

  Ответить  
 
 автор: mikha   (29.11.2008 в 05:40)   письмо автору
 
   для: usik   (29.11.2008 в 02:39)
 

Вникай)))
<?php
function selectDropDown($options$name$selected) {
    
$out "<select name=\"$name\">\r\n";
    foreach(
$options as $value => $description) {
        
$out .= "<option value=\"$value\"";
        if(
$selected == $value$out .= " selected=\"selected\"";
        
$out .= ">$description</option>\r\n";
    }
    
$out .= "</select>\r\n";
    return 
$out;
}
function 
linc($linc_arr$linc_a) {
    
$out "";
    foreach(
$linc_arr as $value => $description) {
        if(
$value == $linc_a$style " style=\"color:#FF0000;\""; else $style "";
        
$out .= "<a href=\"#\" onClick=\"doSel('$value')\"$style>$description</a> ";
    }
    return 
$out;
}
$selected false;
$linc_a false;
$options_arr = array(
    
"0"    =>    "Первый массив",
    
"1"    =>    "Второй массив"
);
$linc_arr = array(
    
"0"    =>    "элемент 0",
    
"1"    =>    "элемент 1"
);
$arr = array(
    
"0"    =>    "first",
    
"1"    =>    "second"
);
$first = array(
    
"0"    =>    "f_1",
    
"1"    =>    "f_2"
);
$second = array(
    
"0"    =>    "s_1",
    
"1"    =>    "s_2"
);
if(isset(
$_REQUEST['select']) and isset($_REQUEST['hidden'])) {
    
$select $_REQUEST['select'];
    
$hidden $_REQUEST['hidden'];
    if(!isset(
$arr[$select[0]]) or !isset($linc_arr[$hidden[0]])) {
        echo 
"гулять отдыхать";
    }else{
        
$arr2 = $$arr[$select[0]];
        
$selected $select[0];
        
$linc_a $hidden[0];
        echo 
$arr2[$hidden[0]];
    }
}
?>
<script language="JavaScript">
<!--
function doSel(n){
    document.getElementById('hidden').value = n;
    form_name.submit();
}
//-->
</script>
<form action="" method="post" name="form_name">
  <table>
    <tr>
      <td width="150"><strong>Выбирете массив</strong></td>
      <td><?php echo selectDropDown($options_arr"select[]"$selected?></td>
    </tr>
  </table>
  <?php echo linc($linc_arr$linc_a); ?>
  <input name="hidden[]" type="hidden" id="hidden" value="" />
</form>

  Ответить  
 
 автор: usik   (01.12.2008 в 23:16)   письмо автору
 
   для: mikha   (29.11.2008 в 05:40)
 

mikha, спасибо тебе огромное все работает. А ты не мог бы сделать еще один малненький штрих: в общем как сделать так чтобы при смене массива из списка показывался только список и гипперсылки ,т.е. как бы перезагрузка что ли. Т.е. пусть в списке первый массив и я щелкаю на гипперсылку "элемент 0" , как результат выводится нулевой элемент. Потом в списке я выбираю второй массив и...в этот момент должна отобразиться исходная страница (типа псевдо перезагрузка,псевдо потому что она отличается от простой тем ,,что в простой перезагрузке страницы будет стоять первый массив в списке, но я то выбрал второй , поэтому все должно быть как при простой перезагрузке ,но только в спике должен быть второй элемент ) , т.е. только список и две гипперсылки, а нулевой элемент первого массива убрался. Если не затруднит помоги(те), пожалуйста.

  Ответить  
 
 автор: usik   (01.12.2008 в 23:17)   письмо автору
 
   для: mikha   (29.11.2008 в 05:40)
 

mikha, спасибо тебе огромное все работает. А ты не мог бы сделать еще один малненький штрих: в общем как сделать так чтобы при смене массива из списка показывался только список и гипперсылки ,т.е. как бы перезагрузка что ли. Т.е. пусть в списке первый массив и я щелкаю на гипперсылку "элемент 0" , как результат выводится нулевой элемент. Потом в списке я выбираю второй массив и...в этот момент должна отобразиться исходная страница (типа псевдо перезагрузка,псевдо потому что она отличается от простой тем ,,что в простой перезагрузке страницы будет стоять первый массив в списке, но я то выбрал второй , поэтому все должно быть как при простой перезагрузке ,но только в спике должен быть второй элемент ) , т.е. только список и две гипперсылки, а нулевой элемент первого массива убрался. Если не затруднит помоги(те), пожалуйста.

  Ответить  
 
 автор: mikha   (02.12.2008 в 02:02)   письмо автору
 
   для: usik   (01.12.2008 в 23:17)
 

Честно говоря не совсем пойму что нужно.
А ещё больше для чего.

  Ответить  
 
 автор: usik   (02.12.2008 в 16:23)   письмо автору
 
   для: mikha   (02.12.2008 в 02:02)
 

Ну это мне нужно например для этого: Пусть у нас есть список с городами. В этом списке есть два города Питер и Москва (наша аналогия -массив первый и массив второй). Далее есть гипперсылки "А","Б"В","Г"Д" и т.д. (наша аналогия гипперсылка элемент 0 и элемент 1), по нажатию которых будет идти запрос к базе и выводить соответствующие улицы,у которых первая буква начинается с нажатой гипперсылки (наша аналогия-вывод элементов массива). Не буду же я сюда пихать свою базу ... Вот по этому и придумал такую задачу с массивами. А суть в последней просьбы в том что ,пусть я выбрал в списке городов (наша аналогия -массив первый и массив второй) город Питер (наша аналогия массив первый). Щелкаю на гипперсылку "А" (у нас-элемент 0) и мне выводятся все улицы Питера на букву "А". Потом я вдруг вспоминаю ,что мне нужны улицы москвы на "А". Для этого я меняю в списке городов Питер на Москву , и (в этом суть моей последней просьбы) улицы Питера на "А" которые вывелись при смене на новый город (в данном случае Москва), должны исчезнуть , а в броузере должно остаться только список с городами, в которм выбрана Москва и гипперсылки букв. Т.е. все что ты писал мне до этого так и должно рабоать, только + еще то что я сказал выше. Попробую написать на псевдо языке то что нужно подправить

Когда запустился первый раз сценарий видим список и гипперсылки ,т.е.
show_List();
showl_inks();

Когда щелкаю на гипперсылки имеем:
show_List();
showl_inks();
show_Соответствующую информацию.
Это у нас есть остался один пунктик:

Когда выставляю новое значение в списке
show_List();
showl_inks();

Ну вроде объяснил ,что и для чего нужно, теперь на тебя надежда.

  Ответить  
 
 автор: mikha   (02.12.2008 в 17:36)   письмо автору
 
   для: usik   (02.12.2008 в 16:23)
 

Ну более или мененее понятно.
Только надо подумать, во первых всё должно работать при отключеном javascript (вообще весь сайт должен сохранять полную работоспособность, не только в данном случае),
ну и во вторых у нас уже ночь, да я ещё на работе)))
В общем надо бы поспать, завтра, на свежую голову подумаю.
Мне всё равно решать подобную проблему, только с регионами, областями и городами.
Надо было сразу объяснить что нужно, мне кажется надо было подойти к решению задачи совершенно с другой стороны.

  Ответить  
 
 автор: mikha   (03.12.2008 в 11:33)   письмо автору
43.2 Кб
 
   для: usik   (25.11.2008 в 19:41)
 

Вот. Сначало сделал для себя, потом внёс некоторые изменения для вас.
Выкинете лишнее и будет счастье. Со ссылками не советую замарачиваться.
ЗЫ. Больше вам помогать не смогу. Всё , что необходимо, у вас есть, разбирайте, изучайте и т.д.
ЗЫЫ. Дамп базы данных в прикрепленном файле.
<?php
$db_host 
"localhost"$db_name "test15"$db_user "test15"$db_pass "1111";
mysql_connect($db_host$db_user$db_pass) or die (mysql_error());
mysql_select_db($db_name) or die (mysql_error());
mysql_query ("/*!40101 SET NAMES 'cp1251' */");
$tpl = array ('stop' => '''select_country' => '''select_areal' => '''select_stadt' => '''select_letter' => '');
$country_id false$areal_id false$letter_id false$stadt_id false;
if (isset (
$_REQUEST['select_country'])) $country $_REQUEST['select_country']; else $country '';
if (isset (
$_REQUEST['select_areal'])) $areal $_REQUEST['select_areal']; else $areal '';
if (isset (
$_REQUEST['select_stadt'])) $stadt $_REQUEST['select_stadt']; else $stadt '';
if (isset (
$_REQUEST['select_letter'])) $letter $_REQUEST['select_letter']; else $letter '';
$sql "SELECT * FROM `m_country` ORDER BY `name` ASC";
$result mysql_query ($sql) or die (mysql_error());
if (!
mysql_num_rows($result)) $tpl['stop'] .= "Нет стран.<br />";
else {
    
$tpl['select_country'] .= '<select name="select_country" style="width: 95%;" onChange="NoneCountry();">';
    
$tpl['select_country'] .= '<option value="">Выбор страны</option>';
    while (
$row mysql_fetch_assoc ($result)) {
        if (
$country == $row['numer']) {
            
$selected ' selected="selected"';
            
$country_id $row['numer'];
        } else 
$selected '';
        
$tpl['select_country'] .= '<option value="'.$row['numer'].'"'.$selected.'>'.$row['name'].'</option>';
    }
    
$tpl['select_country'] .= '</select>';
}
if (
$country_id) {
    
$sql "SELECT * FROM `m_areal` WHERE `country`='".$country_id."' ORDER BY `name` ASC";
    
$result mysql_query ($sql) or die (mysql_error());
    if (!
mysql_num_rows($result)) $tpl['stop'] .= "Нет областей.<br />";
    else {
        
$tpl['select_areal'] .= '<select name="select_areal" style="width: 95%;" onChange="NoneAreal();">';
        
$tpl['select_areal'] .= '<option value="">Выбор области</option>';
        while (
$row mysql_fetch_assoc ($result)) {
            if (
$areal == $row['numer']) {
                
$selected ' selected="selected"';
                
$areal_id $row['numer'];
            } else 
$selected '';
            
$tpl['select_areal'] .= '<option value="'.$row['numer'].'"'.$selected.'>'.$row['name'].'</option>';
        }
        
$tpl['select_areal'] .= '</select>';
    }
}
if (
$areal_id) {
    
$sql "SELECT SUBSTRING(`name`, 1, 1) AS `result` FROM `m_stadt` WHERE areal='".$areal_id."' GROUP BY `result` ORDER BY `name` ASC";
    
$result mysql_query ($sql) or die (mysql_error());
    if (!
mysql_num_rows($result)) $tpl['stop'] .= "Нет букв.<br />";
    else {
        
$tpl['select_letter'] .= '<select name="select_letter" style="width: 95%;" onChange="NoneLetter();">';
        
$tpl['select_letter'] .= '<option value="">Выбор буквы</option>';
        while (
$row mysql_fetch_assoc ($result)) {
            if (
$letter == $row['result']) {
                
$selected ' selected="selected"';
                
$letter_id $row['result'];
            } else 
$selected '';
            
$tpl['select_letter'] .= '<option value="'.$row['result'].'"'.$selected.'>'.$row['result'].'</option>';
        }
        
$tpl['select_letter'] .= '</select>';
    }
}
if (
$letter_id) {
    
$sql "SELECT * FROM `m_stadt` WHERE MID(`name`, 1, 1) = '".$letter_id."' and `areal`='".$areal_id."' ORDER BY `name` ASC";
    
$result mysql_query ($sql) or die (mysql_error());
    if (!
mysql_num_rows($result)) $tpl['stop'] .= "Нет городов.<br />";
    else {
        
$tpl['select_stadt'] .= '<select name="select_stadt" style="width: 95%;">';
        
$tpl['select_stadt'] .= '<option value="">Выбор города</option>';
        while (
$row mysql_fetch_assoc ($result)) {
            if (
$stadt == $row['numer']) {
                
$selected ' selected="selected"';
                
$stadt_id $row['numer'];
            } else 
$selected '';
            
$tpl['select_stadt'] .= '<option value="'.$row['numer'].'"'.$selected.'>'.$row['name'].'</option>';
        }
        
$tpl['select_stadt'] .= '</select>';
    }
}
if (isset (
$_REQUEST['send_data'])) {
    if (!
$country_id$tpl['stop'] .= "Необходимо выбрать страну.<br />";
    if(
$country_id and !$areal_id$tpl['stop'] .= "Необходимо выбрать область.<br />";
    if(
$country_id and $areal_id and !$letter_id$tpl['stop'] .= "Необходимо выбрать букву.<br />";
    if(
$country_id and $areal_id and $letter_id and !$stadt_id$tpl['stop'] .= "Необходимо выбрать город.<br />";
}
if (
$tpl['stop']) $tpl['stop'] = '<div style="border:2px solid #FF0000;">'.$tpl['stop'].'</div>';
?>
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=windows-1251" />
<title>-</title>
<style type="text/css">
<!--
-->
</style>
</head>
<body>
<script type="text/javascript">
<!--
function NoneCountry(){
document.getElementById('select_areal').style.display = 'none';
document.getElementById('select_letter').style.display = 'none';
document.getElementById('select_stadt').style.display = 'none';
}
function NoneAreal(){
document.getElementById('select_letter').style.display = 'none';
document.getElementById('select_stadt').style.display = 'none';
}
function NoneLetter(){
document.getElementById('select_stadt').style.display = 'none';
}
//-->
</script>
<?php echo $tpl['stop']; ?>
<form action="" method="post" name="name_form">
  <table cellspacing="10">
    <tr>
      <td nowrap="nowrap">Выбирете страну:</td>
      <td><?php echo $tpl['select_country']; ?></td>
    </tr>
    <tr id="select_areal">
      <td nowrap="nowrap">Выберете область:</td>
      <td><?php echo $tpl['select_areal']; ?></td>
    </tr>
    <tr id="select_letter">
      <td nowrap="nowrap">На какую букву город:</td>
      <td><?php echo $tpl['select_letter']; ?></td>
    </tr>
    <tr id="select_stadt">
      <td nowrap="nowrap">Выберете город:</td>
      <td><?php echo $tpl['select_stadt']; ?></td>
    </tr>
    <tr>
      <td nowrap="nowrap">&nbsp;</td>
      <td><input name="send_data" type="submit" value="Отправить данные" /></td>
    </tr>
  </table>
</form>
</body>
</html>

  Ответить  
Rambler's Top100
вверх

Rambler's Top100 Яндекс.Метрика Яндекс цитирования