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

Форум MySQL

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

 

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

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

тема: Как при multiple select внести данные в базу?
 
 автор: kis-kis   (22.10.2007 в 12:25)   письмо автору
 
 

Как при multiple select внести данные в базу через запятую?


<select name="category" multiple> 
<option value="1">Кафе</option> 
<option value="2">Бар</option> 
<option value="3">Ресторан</option> 
<option value="4">Кофейня</option> 
</select>


Спасибо.

   
 
 автор: mihdan   (22.10.2007 в 12:53)   письмо автору
 
   для: kis-kis   (22.10.2007 в 12:25)
 

Что из себя представляет дам базы?

   
 
 автор: kis-kis   (22.10.2007 в 13:08)   письмо автору
 
   для: mihdan   (22.10.2007 в 12:53)
 


CREATE TABLE `catalog` (
  `id` int(11) NOT NULL auto_increment,
  `category` varchar(100) NOT NULL default '0',
  `title` varchar(100) NOT NULL default '',
  `full_title` varchar(250) NOT NULL default '',
  `work_time` varchar(100) NOT NULL default '',
  `cuisine_type` varchar(50) NOT NULL default '0',
  `inform` text NOT NULL,
  `address` varchar(250) NOT NULL default '',
  `tel` varchar(50) NOT NULL default '',
  `www` varchar(50) NOT NULL default '',
  `sumvote` smallint(11) default '0',
  `numvote` smallint(11) default '0',
  PRIMARY KEY  (`id`),
  KEY `category` (`category`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=130 ;

INSERT INTO `catalog` (`id`, `category`, `title`, `full_title`, `work_time`, `cuisine_type`, `inform`, `address`, `tel`, `www`, `sumvote`, `numvote`) 
VALUES (1, '8', 'Картинная галерея', 'Областная картинная галерея', '', '0', '', 'ул. Советская, 97', '72-64-58', '', 1, 1);
INSERT INTO `catalog` (`id`, `category`, `title`, `full_title`, `work_time`, `cuisine_type`, `inform`, `address`, `tel`, `www`, `sumvote`, `numvote`) 
VALUES (2, '7', 'Краеведческий музей', 'Областной краеведческий музей', '', '0', '', 'ул. Державинская, 3', '72-63-43', '', 2, 1);

   
 
 автор: sim5   (22.10.2007 в 13:08)   письмо автору
 
   для: kis-kis   (22.10.2007 в 12:25)
 


<?
$sel 
'';
foreach (
$_POST["category"] as $val) {
 if(
$sel != ''$sel .=',';
 
$sel .= $val;
}
?>

И имя селекта укажите так - category[].

   
 
 автор: kis-kis   (22.10.2007 в 13:14)   письмо автору
 
   для: sim5   (22.10.2007 в 13:08)
 

Работает. Спасибо.
А как сделать чтобы при открытии формы редактировании данных категории, категории были уже выбраны, которые были указаны при добавлении в базу?

   
 
 автор: sim5   (22.10.2007 в 13:23)   письмо автору
 
   для: kis-kis   (22.10.2007 в 13:14)
 

Проверяйте при создании списка, и если значение опшена уже есть в базе, то указывайте для опшена значение selected, например:


<option value="1" selected>Кафе</option>


и т.д.

   
 
 автор: kis-kis   (22.10.2007 в 13:24)   письмо автору
 
   для: sim5   (22.10.2007 в 13:23)
 

А можно поподробнее? ))

   
 
 автор: sim5   (22.10.2007 в 13:33)   письмо автору
 
   для: kis-kis   (22.10.2007 в 13:24)
 

Вот тут затруднение, я ведь не знаю как у вас формируется страница. Если вы делаете запрос к базе, получаете ее записи, а потом выводите элеметы страницы, включая форму, то:
1. строку содержащую значение селекта преобразуйте в массив (например explode(','$str),
2. при формировании списка проверяйте - если формируемый опшен списка уже есть в полученном масииве, устанавливайте ему значение selected.

   
 
 автор: kis-kis   (22.10.2007 в 13:41)   письмо автору
 
   для: sim5   (22.10.2007 в 13:33)
 

1. Дамп таблицы сверху.
2. Дамп таблицы с категориями:


CREATE TABLE `cat_catalog` (
  `id` int(11) NOT NULL auto_increment,
  `name` varchar(50) NOT NULL default '',
  `en_name` varchar(50) NOT NULL default '',
  `subcat` int(11) NOT NULL default '0',
  PRIMARY KEY  (`id`),
  KEY `subcat` (`subcat`)
) ENGINE=MyISAM DEFAULT CHARSET=cp1251 AUTO_INCREMENT=30 ;
-- 
-- Дамп данных таблицы `cat_catalog`
-- 
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (16, 'Рестораны', 'restaurants', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (17, 'Бары', 'bars', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (18, 'Кафе', 'cafes', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (19, 'Кофейни', 'coffee_houses', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (21, 'Пиццерии', 'pizzerias', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (26, 'Детям', 'kids', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (27, 'Кондитерские', 'confectionery', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (28, 'Чайные', 'tea_houses', 3);
INSERT INTO `cat_catalog` (`id`, `name`, `en_name`, `subcat`) VALUES (29, 'Пабы', 'pubs', 3);


Кусок формы редактирования категории


<select name="cat" class=form style="width: 500 px;" multiple size="5">
<?php
$resultc
=mysql_query("SELECT * FROM cat_catalog WHERE id = '$row[category]'") or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
$rowcat mysql_fetch_array($resultc);
$tcat $rowcat['id'];
$result=mysql_query("SELECT * FROM cat_catalog where subcat='3' ORDER BY name ASC") or die("<B>Error ".mysql_errno()." :</B> ".mysql_error()."");
while(
$rowc mysql_fetch_array($result)) 

?>
                <option value="<?php echo $rowc['id']; ?><?php if ($rowc['id']== $tcat) echo "selected"?>
                <?php echo $rowc['name']; ?>
                </option>
                <?php 

?>
              </select>

   
 
 автор: sim5   (22.10.2007 в 13:58)   письмо автору
 
   для: kis-kis   (22.10.2007 в 13:41)
 

Мне трудно судить по этому, но если $rowc['id'] и $rowcat['id'] определяет это условие, то все правильно. Не понятно только, судя по дампу таблицы, что значит ваш первый вопрос - записать через запятую... В таблице 'Рестораны', 'Бары', 'Кафе' у вас - это раздельные записи ведь.

   
 
 автор: kis-kis   (22.10.2007 в 14:00)   письмо автору
 
   для: sim5   (22.10.2007 в 13:58)
 

<< что значит ваш первый вопрос - записать через запятую...

Через запятую записать категории к которым относится запись.

<< определяет это условие, то все правильно

К сожалению, так выводится только самая первая категория, а не все... ((

   
 
 автор: sim5   (22.10.2007 в 14:12)   письмо автору
 
   для: kis-kis   (22.10.2007 в 14:00)
 

Я не могу судить, по тому что вы представили, - что вы делаете, но, например:
Вы формируете список на основании записей в таблице, т.е., если у вас будет в таблице: один, два, три, то и селект будет состоять из трех опшенов. Как в этом случае можно говорить о том что они уже вибирались? Единственно правильно, это все отметить как выбранные.
Но если у вас в таблице: один, два, три, а вы еще добавляете - четыре, пять, шесть..., то здесь уже, можно сказать, вполне логично для первых трех опшенов указать, что они выбраны.

По каким критериям вы определяете выбор опшена - по тому, что он есть уже в базе, или по тому, что он чему-то соответсвует, а может по тому, что его ранее выбирали (отмечали). Поймите, я ведь не имею ни майлешего представляения, что к чему у вас, как я вам могу сказать в чем причина.

   
 
 автор: kis-kis   (22.10.2007 в 14:25)   письмо автору
 
   для: sim5   (22.10.2007 в 14:12)
 

Добавляем например в таблицу новое кафе-бар, выбираем для него категории к которой оно относится, т.к. это кафе-бар, следовательно оно относится к 2 категориям - кафе и бары. Добавили.

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

Так понятно? ))

   
 
 автор: sim5   (22.10.2007 в 14:56)   письмо автору
 
   для: kis-kis   (22.10.2007 в 14:25)
 

Чужая душа - потемки. Знаете такое?)
То есть вы хотите, чтобы при добавлении в базу, результатом был вывод списка с выбранными опшенами только что добавленного? Так не получится, вы ведь не записываете в базу признака того, что вы добавляли/выбирали. Чтобы такое сделать, сохраняйте ID добавленного в сессии, например. Вот с этими значениями из сессии и сравнивайте ID выводимых в список катагорий (или подкатегорий).

   
 
 автор: kis-kis   (22.10.2007 в 15:01)   письмо автору
 
   для: sim5   (22.10.2007 в 14:56)
 

Мы друг друга не понимаем ))

Посмотрите вложение там форма добавления и редактирования, может так ситуация прояснится... ))

   
 
 автор: sim5   (22.10.2007 в 15:14)   письмо автору
 
   для: kis-kis   (22.10.2007 в 15:01)
 

Вы думаете у меня уйма времени сидеть и разбирать с формами. Я не знаю что у вас и к чему. Но в чем собственно проблема. У вас есть таблица категорий: id категории, описание ее и прочее. Есть таблица субкатегорий: id субкатегории, родитель (id категории), описание категории и т.п. Вы в режиме админа хотите добавить субкатегорию - выбираете из списка ей родителя, описываете и прочее, вносите в базу. Ну а далее способов редактирования куча:

1. Выбираете из списка каонкретную категорию, субкатегорию и пр. - редактируйте, вносите в базу.
2. Выбираете вывод всего списка категорий/подкатегорий - вносите в соответсвующее поле кактегории/подкатегории изменения, а потом сохраняете, это групповой метод редактирования, можно так сказать.
3. ... и так пока фантазия не иссякнет.

Вам сейчас нужно просто обдумать идею, что и как, может вы делаете что-то лишнее?

   
 
 автор: kis-kis   (22.10.2007 в 15:48)   письмо автору
 
   для: sim5   (22.10.2007 в 15:14)
 

Вот что было нужно -


echo "<select name=\"cat[]\" multiple=\"multiple\">";
$result = mysql_query("SELECT * FROM cat_catalog where subcat='3' ORDER BY name ASC");
while($categ = mysql_fetch_object($result))
{
$categArray = explode(',', $row[category]); 
$selected = '';
if(in_array($categ->id, $categArray))
{
$selected = ' selected';
}
echo "<option value=\"".$categ->id."\"".$selected.">".$categ->name."</option>\n";
}
echo "</select>\n";

   
Rambler's Top100
вверх

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