我有一个类别表
id catname
1 C1
2 C2
从下拉菜单中我尝试将所选值的名称和ID带到后端并保存在数据库中。
下拉菜单的代码是:
<select name="catname">
<?php
require 'connection.php';
$sql = "SELECT * FROM category";
$result = mysqli_query($con, $sql);
if (mysqli_num_rows($result) > 0) {
while($row = mysqli_fetch_assoc($result))
{
$catname=$row["catname"];
$catid=$row["id"];
?>
<option value="<? echo $catname;?> <? echo $catid;?>"><? echo $catname;?></option>
<?}
}?>
</select>
后端代码:
<?php
require 'connection.php';
$subcatname = mysqli_real_escape_string($con, $_POST['subcatname']);
$catname = mysqli_real_escape_string($con, $_POST['catname']);
$catid = mysqli_real_escape_string($con, $_POST['catid']);
$sql="INSERT INTO subcategory(catname,catid,subcatname) VALUES ('$catname','$catid','$subcatname')";
if (!mysqli_query($con,$sql))
{
die('Error: ' . mysqli_error($con));
}
mysqli_close($con);
?>
存储值后子类表的视图应该是这样的
id catname catid subcatname
1 C2 2 S1
问题是,当我选择一个类别时,catname和catid的值将在同一参数下。例如。数据库中的值就像这样存储
id catname catid subcatname
1 C2 2 S1
任何人都可以告诉我如何以适当的方式做到这一点
答案 0 :(得分:0)
你正在做的事情是正确的只是检查你下拉名字可能是你没有发送到$ _POST [&#39; catid&#39;]变量。
答案 1 :(得分:0)
似乎在下拉代码$catid=$row["id"];
中应为$catid=$row["catid"];
答案 2 :(得分:0)
只需改变你selectbox
,
<option value="<? echo $catname;?>$<? echo $catid;?>"><? echo $catname;?></option>
'$'用于分隔'catname'和'catid',因为当'catname'有空格时,使用空格会产生问题。
在php中,将catname的值拆分为分别获取catname和id,
$subcatname = mysqli_real_escape_string($con, $_POST['subcatname']);
$catname = mysqli_real_escape_string($con, explode('$', $_POST['catname'])[0]);
$catid = mysqli_real_escape_string($con, explode('$', $_POST['catname'])[1]);
希望它有效。请检查explode
语法,因为我不是一个php人。
但我不想发送“catname
”,因为发送“catid
”足以保存在数据库中。在子类别表中保存“catname
”和“catid
”会导致数据冗余,从而影响数据库规范化。
感谢。
答案 3 :(得分:0)
您应该存储类别名称&amp;下拉列表中的类别ID,然后在传递给查询之前拆分。这样做:
设置您的选项:
<option value="<? echo $catname.'-'.$catid;?>"><? echo $catname;?></option>
所以你在post&amp;中获得了这个价值然后拆分如:
$catdetail = mysqli_real_escape_string($con, $_POST['catname']);
list($catname, $catid) = explode('-', $catdetail);
并在$catename & $catid
中传递变量query
。
让我知道更多帮助。