Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/245.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 如何为“选择”下拉列表插入多个值_Php_Select_Smarty_Hidden Field - Fatal编程技术网

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

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

我似乎找不到解决这个问题的办法

我使用了一个基于smarty的脚本

我试图从我的提交帖子页面上的表单中提交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>

{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来为其创建超链接