Помогите начинающему ! Массив из мультиселекта и записать в базу

Роман_13

Новичок
Помогите начинающему ! Массив из мультиселекта и записать в базу

Решил переделать доску объявлений чтобы добавлять одно объявление к нескольким категориям...

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

Вот сдесь выводится список категорий на странице добавления ...
name=\"catgforprocess_1[]\" должен ведь получатся массив из выбранных значений ...
PHP:
"<select name=\"catgforprocess_1[]\" multiple=\"multiple\" size=\"10\">";  
$applylanguage = sqlapplylanguage();  
$sql = "select id_catg,catg,parentid from ".$myprefix."_ads_catg ";     
$sql .= "where ".$applylanguage;      
$sql .= " order by parentid,catg";           
$result2=sql_query($sql, $dbi);          
$i = 0;  
while(list($id_catg2, $ccatg2, $parentid2) = sql_fetch_row($result2, $dbi)) {      
    if ($parentid2!=0) $ccatg2=getparent($parentid2,$ccatg2);    
       if ($postinmaincatg) {             
 echo "<option value=\"$id_catg2\" ";     
         if (($id_catg == $id_catg2) or ($id_catg == $parentid2)) {       
               if ($id_catg == $id_catg2) {             
             echo "selected";                          }          
            if ($id_catg == $parentid2) {                  
        if ($i == 0) {                              echo "selected";                              }        
                      $i++;                          }              
        }              echo ">$ccatg2</option>\n";      }
есть такие таблицы в базе ...
одна для объявлений
| id_ads | id_catg | title | ads_desc |

вторая для категорий с подкатегориями
| id_catg | catg | catg_desk | parent_id |

С первой таблицей я думаю всё правильно , первая колонка ид самого объявления , вторая это к какой категории принадлежит объявление , третья это заголовок , четвёртая это описание объявления ... ещё есть колонки ,но думаю нет смысла их описывать потому как они содержат всякие данные принадлежащие к объявлению всякие там е майлы и контакты , даты добавления и прочую муть... А вот во вторую таблицу в первую колонку пишется ид категорий и подкатегорий , но ... сначала для удобства я создаю главные и их ид начинается с 1 и так далее у главных категорий парент_ид всегда 0 и в главные категории добавлять объявления нельзя , уровня всего два и каждой главной категории хоть сколько подкатегорий добавляй ид_катг всегда +1 "автоинкремент" и вот все подкатегории которые принадлежат к главной с ид=1 будут иметь парент_ид =1 , главной с ид =2 будут иметь все парент_ид =2 и так далее , и даже если потом придётся добавить главную категорию и её ид будет =210 , то все принадлежащие ей подкатегории будут иметь парент_ид =210 , а ид у всех по порядку продолжается , а сортировка всё равно по названию , и вот теперь надо ещё одна таблица которая будет содержать ассоциации к каким подкатегориям принадлежит объявление , вид третьей таблицы должен быть примерно такой .... из первой таблицы можно поле id_catg вобще я так понимаю не использовать или удалить совсем , а просто теперь всё будет ассоциироваться по третьей таблице

| id_ads | id_catg |
----3----------55
----3----------66
----3----------77
----8----------80
----8----------85

Вот только у меня не получается создать массив выбранных из селекта значений и положить объявление в свою таблицу а ассоциацию в третью ... А хочется этот вопрос решить ... )))
А так как в PHP я начинающий потому к вам всем и обращаюсь ! )))
Соответственно и SQL запрос тоже сконструировать как , пока не понимаю , хоть уже и не мало информации прочитал .... а всё никак не осилю эту простую задачу...
заранее Спасибо за помощь !
 

Фанат

oncle terrible
Команда форума
прошу прощения у всех отвечавших, но давайте попробуем начать с чистого листа.
вполне возможно, что случай безднадежный, но я хочу убедиться в этом лично.

Роман_13
если ты начинающий, то согласен, что надо учиться? давай попробуем.
начинать надо с малого. тебе надо получить из мультиселекта массив в PHP? Отлично. давай этим займемся.
Сделай простую тестовую HTML форму с мультиселектом и попробуй посмотреть, что приходит в скрипт.
 

Роман_13

Новичок
Вот что я сделал ...

-~{}~ 09.05.09 11:55:

PHP:
<?php    
echo "<form method=\"post\">";  
echo "<select name=\"name[]\"  multiple=\"multiple\" size=\"10\">";    
$ss=1;  
while ( $ss <= 10 ) {  
echo "<option value=\"" . $ss . "\" >   Элемент " . $ss . "    </option>";  $ss++ ;  }    
echo "</select>";  echo "<input type=\"submit\" name=\"Send\" value=\"отправить\">";  
echo "</form>";   
 if (isset($_POST['name']))  {      
foreach($_POST['name'] as $katg)      
{   
$s = $katg.';' ;         
 echo   $s   ;      }  }
Получается сделать выборку нескольких пунктов для наглядности все циыры выводятся через ; ...
Но за фигурными скобками $s уже принимает либо большее из выбранных значений либо если ничего не выбирать
вместо того чтобы обнулился весь результат т.е. переменная становится пустой ... так вот вместо этого выдаёт ошибку
Notice: Undefined variable: s in T:\home\virtual\second\index.php on line 25 ... Вот воюю

... Кстати ВСЕХ С ДНЁМ ПОБЕДЫ !!!
 

iceman

говнокодер
*****
товарищ главнокомандующий, прошу разрешения на совершение поучительных действий в отношение рядового Роман_13?!
 

Роман_13

Новичок
Я же говорю только учусь потому много вопросов .....)))))
А как по другому ...

-~{}~ 09.05.09 12:31:

Товарищи я понимаю что для вас это смешно , но надо же уметь !!!! Или Вы родились знатоками PHP
 

Фанат

oncle terrible
Команда форума
что по-другому? никто не знает, что тебе нужно, поэтому никто не скажет, как это сделать.
ты говорил, что тебе в скрипте нужен массив. ты его получил. и даже перебрал в цикле.

зачем тебе переменная $s - никто не знает.
и непонятно, что тебя удивляет в ее поведении.
если ты раздаешь одноклассникам билеты в кино, на места с 1 по 20, то какой билет должен быть у последнего? разве у него должны быть все билеты? или только один, на 20 место?
 

Роман_13

Новичок
переменную $s ... это в качестве эксперимента ...
Мне нужно чтобы эти все цифры которые внутри скобок выводит $katg я мог записать в таблицу

| id_ads | id_catg |
----3----------55
----3----------66
----3----------77

где 3 это будет ид того объявления которое будет привязано к выбранным категориям 55 и 66 и 77 из первого сообщения это должно быть видно...

и непонятно, что тебя удивляет в ее поведении.
если ты раздаешь одноклассникам билеты в кино, на места с 1 по 20, то какой билет должен быть у последнего? разве у него должны быть все билеты? или только один, на 20 место?
Мне не понятен момент .... когда выводишь её внутри скобок у неё значение всех выбранных пунктов , а за скобками только наибольшее ... Мне надо определять сколько ей присвоено значений 4 или 8 или 15 и все эти значения записывать в базу
как указано выше чтобы все значения записывались в ид_катг ,
а чтобы в ид_адс записалось только ид того объявления к которому все эти категории относятся...
Вот в этом моя основная проблема ... там дальше ещё будут вопросы ...))))
 

Фанат

oncle terrible
Команда форума
что в этом непонятного? у нее каждый раз новое значение. но ТОЛЬКО ОДНО. ты вообще понимаешь, что такое цикл?
Если у тебя есть коробка с карандашами, и ты перекладываешь их по одному в пенал, то у тебя в руках побывают все карандаши. НО ТЕБЯ НЕ УДИВЛЯЕТ, ЧТО ПОСЛЕ ЭТОГО В РУКАХ КАРАНДАШЕЙ НЕ ОСТАЛОСЬ? Или удивляет?
 

Роман_13

Новичок
Вот меня интересует как мне все значения в таблицу записать так как я объяснил в предъидущем сообщении ???

-~{}~ 09.05.09 13:49:

Или я непонятно изяснился ?
 

Фанат

oncle terrible
Команда форума
тебе не в таблицу надо записать. тебе надо сначала понять базовые понятия программирования.
в таблицу записать внутри того же цикла допустим. ты разобрался, что такое цикл?

-~{}~ 09.05.09 14:09:

мне кажется, что ты не читаешь мои сообщения. а просто повторяешь один и тот же вопрос. почему ты так делаешь?
 

Роман_13

Новичок
Я не только Твои сообщения читаю Я ещё кучу всего читаю ... по ходу дела ... мне надо разобрать этот массив name[] в базу
так как я описал ... но я пока не пойму как это сделать потому что ни количества выбранных пунктов точно не известно и опшны одной переменной в цикле выводятся ... и создают весь список категорий ...
 

Фанат

oncle terrible
Команда форума
не только твои сообщения читаю Я ещё кучу всего читаю ...
ну тогда и пиши свои вопросы туда, где читаешь

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

Роман_13

Новичок
Вроде массив создаётся и работает
echo "<pre>";

print_r($name);

echo "</pre>"; проверяю так
а выводит сколько элементов выбрано всем присваивает индексы
Array
(
[0] => 2
[1] => 3
[2] => 4
[3] => 5
[4] => 6
[5] => 7
)
Теперь только правильно уложить в базу осталось...)))

-~{}~ 09.05.09 14:44:

ну тогда и пиши свои вопросы туда, где читаешь
А чё это цепляет что ли ...?
Интернет ведь большой !!! И Ты всего не объяснишь так как мне бы хотелось ...!
Понимаю только пока теоретически.... что каким то образом массив этот циклом в базу запихать а практически пока нихрена ладу не дам ......
 

Фанат

oncle terrible
Команда форума
цепляют меня твои разговоры не по делу. уж очень любишь ты других учить жизни и на свою жаловаться. мне это скоро надоест.

ты разобрался, что такое цикл?
 

grigori

( ͡° ͜ʖ ͡°)
Команда форума
>Интернет ведь большой !!!
А че ты тут остановился? Проходите дальше, не создавайте очередь!
 

Роман_13

Новичок
Практически....
А на жизнь не жалуюсь и других не учу... по понятиям живу сам....
А по делу на практике пока ничего хорошего у меня не получается...
мне теперь надо запросы выполнить таким образом...
Я пока не соображу... в первую таблицу мне ид_катг вобще писать получается не надо , потому что теперь должна ассоциация "таблица 3" за всё отвечать , но при создании запроса на запись надо знать какой ид_адс будет у данного добавляемого в текущий момент объявления и исходя из этого записать в ассоциационную таблицу соответственно ид_адс и все выбранные ид_катг потому что ид_адс база сама делает автоинкремент , НО если кто то из пользователей удалит свои объявления и не сбросить после этого автоинкремент , то может получится конкретная заморочка при добавлении следующего объявления нарушится вся ассоциация.... соответственно надо сначала записать объявление и следом запросить его ид_адс и в третью таблицу уже внести ассоциацию так чтобы всё было правильно .... Я правильно мыслю или всётаки есть способ по лучше ??? )))

-~{}~ 09.05.09 16:47:

>Интернет ведь большой !!!
А че ты тут остановился? Проходите дальше, не создавайте очередь!
А ты что только здесь !!! И в очереди стоиш!!!
 

Фанат

oncle terrible
Команда форума
Роман_13
Пиши не больше одного знака препинания подряд. И только по теме. Иначе тема будет закрыта, уже окончательно.
 

Роман_13

Новичок
Ладно ОК.
Так есть какое нибудь решение моего вопроса ?
или так как я описывал надо мудрить ?
 

Фанат

oncle terrible
Команда форума
я не понял пассаж про "если кто то из пользователей удалит свои объявления", но дальше все правильно
сначала записать объявление и следом запросить его ид_адс и в третью таблицу уже внести ассоциацию
 
Сверху