我似乎找不到解决方法。
我有一个基于智能的脚本,我正在使用。
我正在尝试以某种方式从我的提交帖子页面上的表单中提交 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>