如何为选择下拉列表插入多个值


How to insert more than one value for a select dropdown

我似乎找不到解决方法。

有一个基于智能的脚本,我正在使用。

我正在尝试以某种方式从我的提交帖子页面上的表单中提交 2 个值。实际上,我已经成功地将几个字段从当前表单发布到"帖子"表中。

但是,这就是我的问题所在,我需要将类别名称和类别 ID 都放入它们自己的列中。现在我只能选择一个或另一个。

我的表格包含这个:

<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?

有没有更好的方法来做我想做的事情?

现在,"类别">

下拉字段已正确提交到"帖子"表中的"类别"列中。分别,我需要 catid 进入同一表中的"catid"列。

catid 是每个类别的定义值,例如汽车=1,卡车=2,船=3...

其中 1 是"汽车"的猫...等等。

所以你的posts表中既有category列,又有catid列?您应该规范化您的表。仅在posts表中具有catid,并在categories表中引用它。

如果您

不规范化,稍后,如果您决定将类别Car重命名为 Sedan 怎么办。然后,您必须更改posts表中的每一category列。如果您规范化,则只需更改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

如果您不想要规范化数据库,则在 select 下拉列表中传递 catid ,并在 PHP 脚本中获取 ID 并从categories表中查找相应的类别名称。

更新

使用 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 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

只需将信息放在 value 属性中即可。我使用 |以分离数据,并在服务器端将此信息拆分出来。假设您使用 $msgcat[i].catid 作为您的 id 变量

<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>