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

时间:2013-10-08 10:24:51

标签: php select smarty hidden-field

我似乎无法为此找到解决方法。

我有一个基于智能的脚本即时使用。

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

但是,这就是我的问题所在,我需要将类别名称和类别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“值”?

类似于“如果类别选择= Car,则隐藏输入值= 1”(必须包含每个下拉选择的规则)

这会在php中完成吗? JavaScript的?

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

现在,“类别”下拉字段已正确提交到“posts”表中的“category”列。我需要catid进入同一个表中的“catid”列。

catid是每个类别的定义值,例如Car = 1,Truck = 2,Boat = 3 ......

其中1是“Car”的catid ......依此类推。

2 个答案:

答案 0 :(得分:3)

您的category表中是否包含catidposts列?你应该规范你的表。仅在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脚本中获取ID并从{{1}中查找相应的类别名称} table。

<强>更新

使用MySQL JOIN在提取帖子时获取类别名称。

获取所有帖子:

categories

按ID获取帖子:

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

然后在显示你的帖子时,你可以这样做:

echo SELECT posts.*, categories.name as category FROM posts p JOIN categories c ON p.catid = c.id WHERE posts.id = YOUR_ID ,它将打印出类别名称

更新2

然后像@jeff那样做。将管道放入SELECT OPTION值。

$post['category']

在PHP中,执行以下操作:

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

阅读PHP Explode

答案 1 :(得分:0)

只需将信息放在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>