1

我似乎找不到解决方法。

我有一个我正在使用的基于 smarty 的脚本。

我正在尝试以某种方式从我的提交帖子页面上的表单提交 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 是每个类别的定义值,例如 Car=1、Truck=2、Boat=3...

其中 1 是“汽车”的 catid ...等等。

4

2 回答 2

3

所以你的表中有category一个catidposts?您应该规范化您的表格。只有catid在你的posts表中并在表中引用它categories

如果您不规范化,稍后,如果您决定将您的类别重命名CarSedan. 然后,您将不得不更改表category中的每一列postscategories如果您进行规范化,您只需要更改表格中的一行,然后将其更改CarSedan,您的所有帖子都会显示更新后的类别名称。

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

如果您不想要规范化的数据库,那么在您的选择下拉列表中,传递您的, 并在您的 PHP 脚本中,获取 ID 并从表中catid查找相应的类别名称。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

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

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

于 2013-10-08T10:33:54.183 回答
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>
于 2013-10-08T10:32:14.023 回答