Php 如何为“选择”下拉列表插入多个值
我似乎找不到解决这个问题的办法 我使用了一个基于smarty的脚本 我试图从我的提交帖子页面上的表单中提交2个值。实际上,我已经从当前表单成功地将几个字段发布到“posts”表中 然而,这里是我的问题所在,我需要将类别名称和类别id都放入它们自己的列中。现在我只能选择其中一个 我的表格包括:Php 如何为“选择”下拉列表插入多个值,php,select,smarty,hidden-field,Php,Select,Smarty,Hidden Field,我似乎找不到解决这个问题的办法 我使用了一个基于smarty的脚本 我试图从我的提交帖子页面上的表单中提交2个值。实际上,我已经从当前表单成功地将几个字段发布到“posts”表中 然而,这里是我的问题所在,我需要将类别名称和类别id都放入它们自己的列中。现在我只能选择其中一个 我的表格包括: <select name="category" id="category" > {section name=i loop=$msgcat} <option valu
<select name="category" id="category" >
{section name=i loop=$msgcat}
<option value="{$msgcat[i].catname|stripslashes}">{$msgcat[i].catname|stripslashes}</option>
{/section}
</select>
{section name=i loop=$msgcat}
{$msgcat[i].catname | stripslashes}
{/section}
这将以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
有没有更好的方法来做我想做的事
现在,“category”下拉字段被正确地提交到“posts”表的“category”列中。分别,我需要catid进入同一个表中的“catid”列
catid是每个类别的定义值,例如:汽车=1,卡车=2,船=3
其中1是“Car”的catid,以此类推。只需将信息放在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>
{section name=i loop=$msgcat}
{$msgcat[i].catname | stripslashes}
{/section}
那么您的posts
表中既有类别
又有catid
列?你应该规范化你的表格。只有catid
在posts
表中,并在categories
表中引用它
如果您以后不进行规范化,如果您决定将您的类别汽车
重命名为轿车
,该怎么办。然后您必须更改posts
表中的每个类别
列。如果进行规范化,您只需在类别
表中更改一行,然后将汽车
更改为轿车
,您的所有帖子都将显示更新的类别名称
示例posts
表:
id | catid | title | content | date
1 | 1 | something about cars | the content of the post | 2013-10-01
id | name
1 | Car
2 | Truck
3 | Boat
示例类别
表格:
id | catid | title | content | date
1 | 1 | something about cars | the content of the post | 2013-10-01
id | name
1 | Car
2 | Truck
3 | Boat
如果不需要标准化数据库,那么在select下拉列表中,传递catid
,并在PHP脚本中,从categories
表中获取ID并查找相应的类别名称
更新
使用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
然后,在显示帖子时,您只需执行以下操作:
echo$post['category']
并将打印出类别名称
更新2
然后按照@jeff说的去做。在“选择选项”值中放置管道
<select name="category">
<option value="1|Car">
<option value="2|Truck">
</select>
阅读我确实有一个分类表,它是独立的,有分类名称和catid,但我在另一个页面上遇到了一个问题,当我试图获取我需要的信息时,因为我试图在帖子上显示分类名称,并使用超链接来拉取该分类下的所有帖子。它工作不正常。所以,我不得不这样做,尽管我同意应该更好。在这一点上,我只需要一个黑客使其工作。更新了我的答案使用Join我真的很感谢你的建议。但我似乎真的不明白。如果我可以将catid添加到posts表中,并保持类别不变(目前)…那么我就可以完成我需要实现的目标。我只需要了解如何根据选择传递cat id。我不明白如何加入你所说的。我正在显示带有类别名称的所有帖子,单击类别名称后,使用catid显示该类别中的所有帖子。我只需要在同一个表中使用catid。如果您打算在
posts
表中同时使用catid
和categoryname
,那么为什么还要有一个category
表呢?因为它本来是要以不同的方式工作的,直到我遇到这个问题。因此,创建此黑客将使该表暂时无用。但是,我以后必须修复。现在,我只需要完成。那么如何将catid输入到该表中它自己的列中呢?这是需要的,因为我在网站的前端显示类别。所以我不希望它显示为一辆车。我希望能够显示我当前的“类别名称”,并能够通过像这样抓取catid来为其创建超链接