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

Форум PHP

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

 

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

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

тема: Как передать информацию?
 
 автор: Андрон   (13.07.2004 в 22:29)
 
 

Есть такая штука:

            <select name = "rubr_name"class=reg-left size=15 >
<?php
 
include "config.php";

 
$ath mysql_query("select * from $tbname");

if(
$ath)
{
  while(
$List mysql_fetch_array($ath))
  {
    echo 
"<option>".$List['description']."<br>";
  }

}
else
{
  echo 
"<p><b>Error: ".mysql_error()."</b><p>";
  exit();

}
?>
</select>


Как теперь передать например в add_rec.php что выбрали?

   
 
 автор: cheops   (13.07.2004 в 23:07)   письмо автору
 
   для: Андрон   (13.07.2004 в 22:29)
 

Форме нужно назначить обработчик, а тегу option значение, лучше если это будет первичный ключ таблицы $tbname, а не описание description, как у меня в примере (просто я не знаю структуру вашей таблицы).
<form action="add_rec.php" method="post">
<select name = "rubr_name" class=reg-left size=15 > 
<?php 
 
include "config.php"

 
$ath mysql_query("select * from $tbname"); 

if(
$ath

  while(
$List mysql_fetch_array($ath)) 
  { 
    echo 
"<option value=".$List['description']. // В качестве значения select
                                                // следует передать чего-то
                                                // наверняка в $tbname есть первичный ключ
                                                // или еще что-то
    
">".$List['description']."<br>"
  } 


else 

  echo 
"<p><b>Error: ".mysql_error()."</b><p>"
  exit(); 


?> 
</select> 
<input type=submit value="Отправить в add_rec.php">
</form>

   
 
 автор: Andron   (14.07.2004 в 00:11)   письмо автору
 
   для: cheops   (13.07.2004 в 23:07)
 

То, что мне нужно. Спасибо!

   
 
 автор: Andron   (14.07.2004 в 02:07)   письмо автору
 
   для: Andron   (14.07.2004 в 00:11)
 

Да, а вот как сделать так, чтобы в следующий select грузилась информация соответственно тому, на что нажали в первом select'е?
Помогите, с меня пиво.

   
 
 автор: cheops   (14.07.2004 в 09:31)   письмо автору
 
   для: Andron   (14.07.2004 в 02:07)
 

Встречный вопрос: оба select в одной форме, или сначала идёт одна форма, а сразу за ней вторая?

   
 
 автор: Andron   (14.07.2004 в 16:09)   письмо автору
 
   для: cheops   (14.07.2004 в 09:31)
 

Формы идут отдельно....
Я думаю надо как-то пользоваться такой штукой:
ONCHANGE=
".... = this.options[this.selectedIndex].value"
То есть то что мы выделили, нужно передать в функцию, и там уже делать обновление для другого селекта.

Если есть другие варианты - пож скажите.

   
 
 автор: Andron   (14.07.2004 в 17:04)   письмо автору
 
   для: Andron   (14.07.2004 в 16:09)
 

Дело вот в чём- хочу создать каталог веб ресурсов.
Есть много разных категорий: "Автомобили", "Финансы"...
У каждой из них есть свои подкатегории:
"Автомобили"---"Мотоцыклы","Легковые"...
В подкатегориях - ссылки на сайты, связанные с определенной подкатегорией.

Я думаю создать 1 бд, в ней 3 таблицы:
1. Категории (id_theme, name) primary key id_theme;
2. Подкатегории (id_theme,id_subtheme, name) primary key id_subtheme;
3. Ссылки (...)

Поэтому все вопросы-связанные с этим.
Только как пользоваться первичными, вторичными ключами? Может сама структура бд неправильная?
Спасибо, жду ответа.

   
 
 автор: Andron   (14.07.2004 в 20:08)   письмо автору
 
   для: Andron   (14.07.2004 в 17:04)
 

Хммммммм
Пожалуйста подскажите что делать с двумя селектами.
Жду.

   
 
 автор: cheops   (14.07.2004 в 22:26)   письмо автору
 
   для: Andron   (14.07.2004 в 17:04)
 

>Я думаю создать 1 бд, в ней 3 таблицы:
> 1. Категории (id_theme, name) primary key id_theme;
> 2. Подкатегории (id_theme,id_subtheme, name) primary key
>id_subtheme;
> 3. Ссылки (...)
Ага... а ссылки для чего? Мы обычно создаём две таблицы:
1) Каталоги (бесконечновложенные каталоги), создаётся поле id_parent. Если оно равно 0, следовательно каталог находится в корневом каталоге, если поле равно первичному ключу другого подкаталога - данный каталог является его подкаталогом.
2) Таблица под тованые позиции, которое имеет поле id_catalog, определяющее к какому каталогу оно относится...

PS Всё руки не доходят выложить каталог риэлтерских услуг в downloads - много проще было бы разговаривать...

   
 
 автор: Andron   (14.07.2004 в 22:50)   письмо автору
 
   для: cheops   (14.07.2004 в 22:26)
 

Например на yarcity.ru есть такое. Хотелось бы похожее.

>1) Каталоги (бесконечновложенные каталоги), создаётся поле
>id_parent. Если оно равно 0, следовательно каталог находится
>в корневом каталоге, если поле равно первичному ключу
>другого подкаталога - данный каталог является его
>подкаталогом.

Да тут имеет значение что к чему относится...

Если можно подробнее раскажите про то, какая должна быть бд и таблицы.

   
 
 автор: cheops   (14.07.2004 в 22:16)   письмо автору
 
   для: cheops   (14.07.2004 в 09:31)
 

Вот чего я понял... Есть форма, в ней есть селект, нажимает на кнопку, данные отправляются обработчику, который являтся тоже формой, в которой расположен второй селект...
Тогда всё просто - первая форма:

<form action=second.php method=post>
<select name=id_category>
  <option value=car>Машины
  <option value=motocicle>Мотоциклы
  <option value=helicopter>Вертолёты
</select>
<input type=submit value="Выбрать категорию">
</form>

Всё это хозяйство отравляется во вторую форму second.php

<form action=handler.php method=post>
<select name=id_category>
<?php
  
switch($_POST['id_category'])
  {
    case(
'car'): // Глупый юзер хочет машинки
    
{
       echo 
"<option value=car_volga>Волга";
       echo 
"<option value=car_lada>Жигули";
       echo 
"<option value=car_kamaz>Камаз";
       break;
     }
    case(
'motocicle'): // Выбраны мотоциклы
    
{
       echo 
"<option value=harley>Харли-Девидсон";
       echo 
"<option value=honda>Хонда";
       echo 
"<option value=ural>Урал";
       break;
     }
    case(
'motocicle'): // Хочет человек вертолёт
    
{
       echo 
"<option value=first>Ну не знаю я марки вертолётов"
       
echo "<option value=second>Второй"
       
echo "<option value=thirdl>Третий"
     
}
  }
?>
</select>
<input type=submit value="Выбрать конкрентый товар">
</form>

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

   
 
 автор: Andron   (14.07.2004 в 22:43)   письмо автору
 
   для: cheops   (14.07.2004 в 22:16)
 

В первый селект данные грузятся из бд. Во второй - тоже из бд, но относительно того, что выбрали в первом....
Хотелось бы без дополнительных кнопок.

Как например здесь:
http://uk.europe.creative.com/support/manuals/welcome.asp

Думаю так же можно замутить на phр. Спасибо.

   
 
 автор: cheops   (14.07.2004 в 23:30)   письмо автору
 
   для: Andron   (14.07.2004 в 22:43)
 

Единственное что мне в ASP нравится - это технология (есть и серверная и клиентская части), но если посмотреть на код HTML-странички: там же всё на VBasic написано... значит надо тоже самое на JavaScript сделать, чтоб мелкомягким неповадно было :))) так как задача эта для клиентской стороны. Вот примерно как это должно выглядить в HTML(JavaScript):

<form name=form action=second.php method=post> 
<select multiple size="3" name=id_category onClick="javascript:click_first()"> 
  <option value=car>Машины 
  <option value=motocicle>Мотоциклы 
  <option value=helicopter>Вертолёты 
</select> 
<select name=second_list multiple size="3" name=id_category showempty> 
</select> 
<br><input type=submit value="Выбрать категорию"> 
</form> 
<script language='JavaScript1.1' type='text/javascript'>
<!--
  function click_first()
  {
    if(this.form.id_category.options[0].selected)
    {
      this.form.second_list.options[0] = new Option("car1","0");
      this.form.second_list.options[1] = new Option("car2","1");
      this.form.second_list.options[2] = new Option("car3","2");
    }
    if(this.form.id_category.options[1].selected)
    {
      this.form.second_list.options[0] = new Option("moto1","0");
      this.form.second_list.options[1] = new Option("moto2","1");
      this.form.second_list.options[2] = new Option("moto3","2");
    }
    if(this.form.id_category.options[2].selected)
    {
      this.form.second_list.options[0] = new Option("coper1","0");
      this.form.second_list.options[1] = new Option("coper2","1");
      this.form.second_list.options[2] = new Option("coper3","2");
    }
  }
//-->
</script>

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

   
 
 автор: Andron   (14.07.2004 в 23:43)   письмо автору
 
   для: cheops   (14.07.2004 в 23:30)
 

2 таблицы:
1. LIST (id_theme, name); id_theme - pr key
2. SUBLIST (id_theme, id_subtheme, name);
id_subtheme - pr key, id_theme - sec key.

(Может мне поменять как-то структуру?)
В первый селект загружаю из первой таблицы (делаю сам),
во второй - ...
Если можно, примерчик, как подружить php c javascript.

Cпасибы.

   
 
 автор: cheops   (15.07.2004 в 00:26)   письмо автору
 
   для: Andron   (14.07.2004 в 23:43)
 

Ну... мне это видится так :)))

<form name=form action=second.php method=post> 
<?php
  
// Это уже сделано, но для полноты картины приведём
  
$query "SELECT * FROM LIST";
  
$lst mysql_query($query);
  if(!
$lst)
  {
    echo 
"Ошибка при выполенении выборки из таблицы LIST";
    exit();
  }
  
// Если в таблице есть хоть одна запись - формируем список
  
if(mysql_num_rows($lst)>0)
  {
    echo 
"<select multiple size=".mysql_num_rows($lst)."
          name=id_theme onClick=\"javascript:click_first()\">"
;
    while(
$list mysql_fetch_array($lst))
    {
      
// Формируем элементы списка
      
echo "<option value=".$list['id_theme'].">".$list['name'];
    }
  }
?>
</select> 
<select name=second_list multiple size="3" name=id_category showempty> 
</select> 
<br><input type=submit value="Выбрать категорию"> 
</form> 
<script language='JavaScript1.1' type='text/javascript'>
<!--
  function click_first()
  {
    <?php
      
// Формируем тело скрипта JavaScript средствами PHP
      
$query "SELECT * FROM LIST";
      
$lst mysql_query($query);
      if(!
$lst)
      {
        echo 
"Ошибка при выполенении выборки из таблицы LIST";
        exit();
      }
      
// Если в таблице есть хоть одна запись - формируем список
      
if(mysql_num_rows($lst)>0)
      {
        while(
$list mysql_fetch_array($lst))
        {
          
// Тут нужно быть внимательным: массивы в JavaScript начинаются
          // с 0, а в таблице нумерация первичного ключа может начинаться
          // с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
          
echo "if(this.form.id_theme.options[".$list['id_theme']."].selected){";
          
// Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
          
$query "SELECT * FROM SUBLIST WHERE id_theme=".$list['id_theme'];
          
$sbl mysql_query($query);
          if(!
$sbl)
          {
            echo 
"Ошибка при выполенении выборки из таблицы SUBLIST";
            exit();
          }
          
//
          
if(mysql_num_rows($sbl)>0)
          {
            
$tmpnum 0;
            while(
$sublist mysql_fetch_array($sbl))
            {
              echo 
"this.form.second_list.options[$tmpnum] = new Option(\"car1\",\"".$sublist['id_subtheme']."\");";
              
$tmpnum++;
            }
          }
          echo 
"}";
        }
      }
    
?>
  }
//-->
</script>

Честно скажу, не больно тестировал, так как поленился возиться с табличками (спать хочу :) - так что если что не так - завтра добивать будем...

   
 
 автор: Andron   (15.07.2004 в 00:30)   письмо автору
 
   для: cheops   (15.07.2004 в 00:26)
 

ОГО. 8-)
Спасибо, сорри что так мучаю.
Посмотрю тоже завтра. Идем спать. Еще раз спасибо.

   
 
 автор: Andron   (15.07.2004 в 02:24)   письмо автору
 
   для: cheops   (15.07.2004 в 00:26)
 

Попробовал... (Не скажу что ;-))
С первым селектом все ок. Но функция не делает то что надо...

Может не пашет
 
if(this.form.id_theme.options[".$list['id_theme']."].selected){"; 


Хммм.
Задумка прикольная.
Что не так?

   
 
 автор: cheops   (15.07.2004 в 11:08)   письмо автору
 
   для: Andron   (15.07.2004 в 02:24)
 


<form name=form action=second.php method=post> 
<?php
  
//////////////////////////////////////////////////
  // Здесь соединение с базой данных
  //////////////////////////////////////////////////

  // Это уже сделано, но для полноты картины приведём
  
$query "SELECT * FROM LIST";
  
$lst mysql_query($query);
  if(!
$lst)
  {
    echo 
"Ошибка при выполенении выборки из таблицы LIST";
    exit();
  }
  
// Если в таблице есть хоть одна запись - формируем список
  
if(mysql_num_rows($lst)>0)
  {
    echo 
"<select multiple size=".mysql_num_rows($lst)."
          name=id_theme onClick=\"javascript:click_first()\">"
;
    while(
$list mysql_fetch_array($lst))
    {
      
// Формируем элементы списка
      
echo "<option value=".$list['id_theme'].">".$list['name'];
    }
  }
?>
</select> 
<select name=second_list multiple size="3" name=id_category showempty> 
</select> 
<br><input type=submit value="Выбрать категорию"> 
</form> 
<script language='JavaScript1.1' type='text/javascript'>
<!--
  function click_first()
  {
    <?php
      
// Формируем тело скрипта JavaScript средствами PHP
      
$query "SELECT * FROM LIST";
      
$lst mysql_query($query);
      if(!
$lst)
      {
        echo 
"Ошибка при выполенении выборки из таблицы LIST";
        exit();
      }
      
// Если в таблице есть хоть одна запись - формируем список
      
if(mysql_num_rows($lst)>0)
      {
        while(
$list mysql_fetch_array($lst))
        {
          
// Тут нужно быть внимательным: массивы в JavaScript начинаются
          // с 0, а в таблице нумерация первичного ключа может начинаться
          // с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
          
echo "if(this.form.id_theme.options[".($list['id_theme']-1)."].selected){\n";
          
// Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
          
$query "SELECT * FROM SUBLIST WHERE id_theme=".$list['id_theme'];
          
$sbl mysql_query($query);
          if(!
$sbl)
          {
            echo 
"Ошибка при выполенении выборки из таблицы SUBLIST";
            exit();
          }
          
//
          
if(mysql_num_rows($sbl)>0)
          {
            
$tmpnum 0;
            echo 
"this.form.second_list.length = 0;";
            while(
$sublist mysql_fetch_array($sbl))
            {
              echo 
"this.form.second_list.options[$tmpnum] =
                                new Option(\""
.$sublist['name']."\",\"".$sublist['id_subtheme']."\");\n";
              
$tmpnum++;
            }
          }
          echo 
"}";
        }
      }
    
?>
  }
//-->
</script>

Та строка как раз нормальная была - со вторым списком траблы были...

   
 
 автор: Andron   (15.07.2004 в 20:21)   письмо автору
 
   для: cheops   (15.07.2004 в 11:08)
 

Cпасибо.
Я поменял реакцию на клик: вместо onclick - onchange
и в начае ф-ии добавил

 echo "this.form.second_list.length = 0;";

----------------------------------------------------------
Если в таблице List все по порядку:
id_theme name
1 text1
2 text2
3 text3

И если в таблице SubList все по порядку:
id_theme id_subtheme name
1 1 text11
1 2 text22
2 1 text33

То всё показывает нормально.

Но если в таблице List НЕ по порядку:
id_theme name
1 text1
5 text2
6 text3

То показывает только то, что связано с первым значением в List'e. И внизу пишет script error.

??? Что не так? Хмм Жду ответа.

   
 
 автор: cheops   (15.07.2004 в 20:38)   письмо автору
 
   для: Andron   (15.07.2004 в 20:21)
 

А можете выложить дамп базы данных, если не хотите здесь выкладывать - пошлите почтой.

   
 
 автор: Andron   (15.07.2004 в 20:48)   письмо автору
 
   для: cheops   (15.07.2004 в 20:38)
 

:-)
Ну я только начал учиться работать с MySql.
Что такое дамп? Лог? Или сами бд?
Вот такой я ламер. 8-)

   
 
 автор: cheops   (15.07.2004 в 21:33)   письмо автору
 
   для: Andron   (15.07.2004 в 20:48)
 

Это не сложно, нужно найти в дистрибутиве утилиту mysqldump, и выполнить в командной строке:
mysqldump basa>basa.sql 

где basa - имя базы данных, а basa.sql - имя файла куда запишется дамп базы данных, потом если что-то случится c базой данных или нужно будет переместить её на другой сервер, можно будет выполнить команду:
mysql basa<basa.sql

Последнее я и собираюсь сделать с файлом, который вы пришлёте :)

PS Кстати, почему вы себя ламером называете? Ламер, в первоначальном понимании этого слова, человек который ничего не знает и не понимает, но считает, что знает очень много, даёт всем советы и убедить его в его неправоте не представляется возможным. А вы очень восприимчивы к советам :)

   
 
 автор: Andron   (15.07.2004 в 21:35)   письмо автору
 
   для: cheops   (15.07.2004 в 21:33)
 

:-)
Вот еще 1 вопросик созрел: что-то не нашел инфо о типах бд (в примерах вы/мы писали type=MyIsam) а какие они есть и для чего их писать?
Или может я пропустил где-то?

PS. А интересная штука mysqldump!

   
 
 автор: Кузнецов М.В.   (15.07.2004 в 21:51)   письмо автору
 
   для: Andron   (15.07.2004 в 21:35)
 

Cheops'у отключили свет, так что ждите :) (У нас очень сильные грозы). А по типам БД я постараюсь Вам ответить в отдельном топике, чтобы не нарушать вашу беседу :)

   
 
 автор: Andron   (15.07.2004 в 22:02)   письмо автору
 
   для: Кузнецов М.В.   (15.07.2004 в 21:51)
 

>Cheops'у отключили свет, так что ждите :)
8-(

> А по типам БД я постараюсь Вам ответить в
>отдельном топике, чтобы не нарушать вашу беседу :)

Ок. Спасибо.

   
 
 автор: cheops   (15.07.2004 в 22:12)   письмо автору
 
   для: Andron   (15.07.2004 в 22:02)
 

>8-(
Вот и я так же сидел :) - уже темно, даже не почитаешь, завтра же UPS куплю...

   
 
 автор: Andron   (15.07.2004 в 22:31)   письмо автору
 
   для: cheops   (15.07.2004 в 22:12)
 

УПС -прикольная штука. У меня где-то 4 года. А то пару раз вырубили свет, и вся робота пошла к... Ок.

Я вот что хотел спросить (:-))-как с функцией? Где может быть ошибка? Грррррр. Забить на неё?

   
 
 автор: cheops   (15.07.2004 в 22:32)   письмо автору
 
   для: Andron   (15.07.2004 в 21:35)
 

Вот правильный вариант, массивы JavaScript - это настоящие массивы здесь за 0 должна следовать 1 и т.д. Поэтому введём ещё одну временную переменную $counter:

<form name=form action=second.php method=post> 
<?php
  
//////////////////////////////////////////////////
  // Здесь соединение с базой данных
  //////////////////////////////////////////////////

  // Это уже сделано, но для полноты картины приведём
  
$query "SELECT * FROM list";
  
$lst mysql_query($query);
  if(!
$lst)
  {
    echo 
"Ошибка при выполенении выборки из таблицы LIST";
    exit();
  }
  
// Если в таблице есть хоть одна запись - формируем список
  
if(mysql_num_rows($lst)>0)
  {
    echo 
"<select multiple size=".mysql_num_rows($lst)."
          name=id_theme onClick=\"javascript:click_first()\">"
;
    while(
$list mysql_fetch_array($lst))
    {
      
// Формируем элементы списка
      
echo "<option value=".$list['id_theme'].">".$list['name'];
    }
  }
?>
</select> 
<select name=second_list multiple size="3" name=id_category showempty> 
</select> 
<br><input type=submit value="Выбрать категорию"> 
</form> 
<script language='JavaScript1.1' type='text/javascript'>
<!--
  function click_first()
  {
    <?php
      
// Формируем тело скрипта JavaScript средствами PHP
      
$query "SELECT * FROM list";
      
$lst mysql_query($query);
      if(!
$lst)
      {
        echo 
"Ошибка при выполенении выборки из таблицы LIST";
        exit();
      }
      
// Если в таблице есть хоть одна запись - формируем список
      
if(mysql_num_rows($lst)>0)
      {
        
$counter 0;
        while(
$list mysql_fetch_array($lst))
        {
          
// Тут нужно быть внимательным: массивы в JavaScript начинаются
          // с 0, а в таблице нумерация первичного ключа может начинаться
          // с 1 - в этом случае от значения $list['id_theme'] нужно вычесть 1
          
echo "if(this.form.id_theme.options[".($counter++)."].selected){\n";
          
//echo "if(this.form.id_theme.options[".$list['id_theme']."].selected){\n";
          // Формируем и выполняем SQL-зарос на выборку из таблицы SUBLIST
          
$query "SELECT * FROM sublist WHERE id_theme=".$list['id_theme'];
          
$sbl mysql_query($query);
          if(!
$sbl)
          {
            echo 
"Ошибка при выполенении выборки из таблицы SUBLIST";
            exit();
          }
          
//
          
if(mysql_num_rows($sbl)>0)
          {
            
$tmpnum 0;
            echo 
"this.form.second_list.length = 0;\n";
            while(
$sublist mysql_fetch_array($sbl))
            {
              echo 
"this.form.second_list.options[$tmpnum] = new Option(\"".$sublist['name']."\",\"".$sublist['id_subtheme']."\");\n";
              
$tmpnum++;
            }
          }
          echo 
"}";
        }
      }
    
?>
  }
//-->
</script>

   
 
 автор: Andron   (15.07.2004 в 22:44)   письмо автору
 
   для: cheops   (15.07.2004 в 22:32)
 

ВОТ! ОНО! :))))))))
Пашет!!!!
Спасибо! Mille grazie! Danke!
AAAAAAAAAAA!
:-)))))

   
 
 автор: Andron   (15.07.2004 в 21:37)   письмо автору
 
   для: cheops   (15.07.2004 в 21:33)
 

Да, я бы вас попросил вставит в учебник выше написанное. Очень пригодится для начинающих!

   
 
 автор: Кузнецов М.В.   (15.07.2004 в 21:51)   письмо автору
 
   для: Andron   (15.07.2004 в 21:37)
 

Возможно, так и сделаем.

   
Rambler's Top100
вверх

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