За последние 24 часа нас посетили 222211 программистов и 2172 робота. Сейчас ищут 1790 программистов ...

Мультивыбор Select при выборке из БД через цикл

Тема в разделе "PHP для новичков", создана пользователем allforweb, 11 окт 2010.

  1. allforweb

    allforweb Активный пользователь

    С нами с:
    18 сен 2010
    Сообщения:
    72
    Симпатии:
    0
    Задача такая. Есть меню и в нем список категорий. При редактировании контента категории к которым принадлежит новость должны быть отмечены selected в списке SELECT, чтобы при редактировании видеть к какой категории принадлежит новость.
    Вот код функции, но эта функция почему то делат активными все категории, подскажите где ошибка:

    PHP:
    1. function multicat()
    2.             {
    3.               $multicat = '';
    4.               $rescat = mysql_query("SELECT id, name FROM `category`");
    5.               $resnews = mysql_query("SELECT category FROM `news`");
    6.               while($row = mysql_fetch_assoc($rescat))
    7.               {
    8.                if ($resnews['category'] == $rescat['id'])
    9.                {
    10.                 $multicat .='<option value="'. $row['id'] .'" selected>'. $row['name'] .'</option>';
    11.                 }
    12.  
    13.                 else {
    14.                $multicat .='<option value="'. $row['id'] .'">'. $row['name'] .'</option>';
    15.                }
    16.               }
    17.               return $multicat;
    18.             }
    Первая выборка id и название всех категорий из базы выводится в меню SELECT, вторая выборка поле категории из таблицы новости. Также пробовал указывать id новости, но результат тот же. Все категории отмечены selected – т.е. получаются активными. Может в цикле что-то неправильно сделано.
     
  2. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
    толи я забыл все что знали, толи тут бред написан =)

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

    Хз. Давай структуру бд и связи.
     
  3. allforweb

    allforweb Активный пользователь

    С нами с:
    18 сен 2010
    Сообщения:
    72
    Симпатии:
    0
    Ну вот так переписал но все равно не сработало

    PHP:
    1.  
    2. function multicat()
    3.             {
    4.               $multicat = '';
    5.               $rescat = mysql_query("SELECT id, name FROM `category`");
    6.               $resnews = mysql_query("SELECT category FROM `news`");
    7.               $row2 = mysql_fetch_assoc($resnews);
    8.               while($row = mysql_fetch_assoc($rescat))
    9.               {
    10.                if ($row2['category'] == $row['id'])
    11.                {
    12.                 $multicat .='<option value="'. $row['id'] .'" selected>'. $row['name'] .'</option>';
    13.                 }
    14.  
    15.                 else {
    16.                $multicat .='<option value="'. $row['id'] .'">'. $row['name'] .'</option>';
    17.                }
    18.               }
    19.               return $multicat;
    20.             }
    21.  
     
  4. igordata

    igordata Суперстар
    Команда форума Модератор

    С нами с:
    18 мар 2010
    Сообщения:
    32.408
    Симпатии:
    1.768
     
  5. allforweb

    allforweb Активный пользователь

    С нами с:
    18 сен 2010
    Сообщения:
    72
    Симпатии:
    0
    Все, разобрался с ошибкой, балбес я конечно. Там нужно просто указывать ID новости из которой выбираешь категории.

    Но вот у меня теперь еще одна проблема выскочила.
    Я сделал мультивыбор категорий при добавлении и массив преобразую через impode в строку. Получается 1,2 запись в базу. А как же теперь для редактирования сделать возврат. Мне же нужно получить снова эти строки как массив и уже не просто обрабатывать переменную с номером категории, а обрабатывать вложенный массив.

    Например:
    Новость ID 1 принадлежит category 1,2 (эту строку же в массив нужно занести и обработка опять не сработает)