2013-10-08 1 views
1

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

У меня есть сценарий на основе smarty, который я использую.

Я пытаюсь как-то представить 2 значения из формы, которая находится на моей странице отправки сообщения. Я действительно успешно опубликовал несколько полей в таблице «posts» уже из моей текущей формы.

Однако, вот моя проблема: мне нужно получить как имя категории, так и идентификатор категории в свои собственные столбцы. Сейчас я могу выбрать только тот или другой.

Моя форма содержит следующее:

<select name="category" id="category" > 
    {section name=i loop=$msgcat} 
     <option value="{$msgcat[i].catname|stripslashes}">{$msgcat[i].catname|stripslashes}</option> 
    {/section} 
</select> 

Что сделает это в HTML как:

<select id="category" name="category"> 
<option value="Car">Car</option> 
<option value="Truck">Truck</option> 
<option value="Boat">Boat</option> 
<option value="Motorcycle">Motorcycle</option> 
<option value="RV">RV</option> 
<option value="Other">Other</option> 
</select> 

Есть ли способ в этой же форме, что я могу иметь скрытое поле ввода под названием CatID, который мог присвоить присвоенное значение категории id «значение», на основе которого выпадающий выбор категории «категория» сделан?

Что-то вроде «если выбор категории = автомобиль, то скрытый вход значение = 1» (должен был бы включать в себя правила для каждого выбора ниспадающего)

Будет ли это быть сделано в PHP? JavaScript?

Есть ли лучший способ сделать то, что я пытаюсь сделать?

В настоящее время раскрывающееся поле категории «Категория» правильно отправляется в таблицу «posts» в столбец «категория». Соответственно, мне нужно, чтобы catid перешел в столбец «catid» в той же таблице.

Катализатор представляет собой определенное значение для каждой категории, например. Автомобиль = 1, Грузовик = 2, Лодка = 3 ...

Где 1 является кошкой для «Автомобиля» ... и так далее.

ответ

3

Таким образом, вы оба category и catid столбец в вашей таблице posts? Вы должны нормализовать свою таблицу. У вас есть только catid в вашей таблице posts и укажите его в таблице categories.

Если вы не нормализуете, то позже, если вы решите переименовать свою категорию Car в Sedan. Затем вам нужно будет изменить каждый столбец category в таблице posts. Если вы нормализуетесь, вам нужно будет только изменить одну строку в таблице categories и изменить ее на Car на Sedan, и все ваши сообщения покажут обновленное название категории.

Пример posts таблица:

id | catid | title | content | date 
1 | 1  | something about cars | the content of the post | 2013-10-01 

Пример categories таблица:

id | name 
1 | Car 
2 | Truck 
3 | Boat 

http://en.wikipedia.org/wiki/Database_normalization

Если вы не хотите, нормированную базы данных, то в вашем выберите в раскрывающемся списке, вы передаете ваш catid, и в вашем скрипте PHP получите идентификатор и найдите соответствующее имя категории из categories стол.

UPDATE

Использование MySQL JOIN, чтобы получить название категории, вытягивая свой пост.

Чтобы получить все сообщения:

SELECT posts.*, categories.name as category FROM posts p JOIN categories c ON p.catid = c.id 

Чтобы получить сообщение от ID:

SELECT posts.*, categories.name as category FROM posts p JOIN categories c ON p.catid = c.id WHERE posts.id = YOUR_ID 

Затем, когда отображать ваш пост, вы можете просто сделать:

эхо $post['category'], и он будет распечатать название категории

ОБНОВЛЕНИЕ 2

Затем выполните, как @jeff говорит. Поместите трубку в свои значения SELECT OPTION.

<select name="category"> 
<option value="1|Car"> 
<option value="2|Truck"> 
</select> 

В вашем PHP, выполните следующие действия:

$category = $_POST['category']; 
//Explode the category, this will generate an array 
$category = explode('|', $category); 
//the $category will result in array('1', 'Car') 
$cat_id = $category[0]; 
$cat_name = $category[1]; 
//Now you have both your category ID and Name 

Читайте на PHP Explode

+0

У меня есть таблица категорий, которая является отдельной, которая имеет название категории и catid, но я столкнулся с проблемой на другой странице, пытаясь получить нужную мне информацию, потому что я пытался показать на посту название категории и иметь эту гиперссылку, чтобы вытащить все сообщения под этой категорией, что она не работает должным образом , Итак, я должен был сделать это, хотя я согласен, что должно быть лучше. На данный момент мне просто нужен хак, чтобы он работал. –

+0

Обновлен мой ответ для использования JOINS – WebNovice

+0

Я по-настоящему ценю ваш совет. Но я действительно не могу следовать. Если бы я мог просто добавить catid в таблицу posts и сохранить категории там как это (на данный момент) .... тогда я могу завершить то, что мне нужно достичь. Мне просто нужно выяснить, как я могу передать идентификатор cat на основе выбора. Я не понимаю, как присоединиться, как вы проиллюстрировали. Я показываю все сообщения с именем категории на них, после нажатия на название категории отображаются все сообщения в этой категории с помощью catid. Мне просто нужен котик в одном столе. –

0

Просто поместите информацию в атрибут value. Я использую | для разделения данных и на стороне сервера разделить эту информацию. Assumming, что вы используете $ msgcat [я] .catid в качестве идентификатора переменной

<select name="category" id="category" > 
    {section name=i loop=$msgcat} 
     <option value="{$msgcat[i].catid}|{$msgcat[i].catname|stripslashes}">{$msgcat[i].catname|stripslashes}</option> 
    {/section} 
</select> 
+0

то как бы я вхожу только CATID в свою собственную колонку в этой таблице? Это то, что необходимо, потому что я показываю категорию на переднем конце веб-сайта. Поэтому я не хочу, чтобы он отображался как 1 Автомобиль. Я хочу, чтобы иметь возможность отображать, как у меня в настоящее время есть это «название категории», и иметь возможность создать гиперссылку для этого, захватив catid, как этот '{$posts[i].category|stripslashes}' –