[英]2 different values getting stored under one column of database
我有一张分类表
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
谁能告诉我我该如何正确地做
您所做的一切都是正确的,只需检查您的下拉名称,也许是您没有发送到$ _POST ['catid']变量。
似乎在下拉代码$catid=$row["id"];
应该是$catid=$row["catid"];
只需更改您的选择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
”都保存在子类别表中会导致数据冗余 ,从而影响数据库规范化。
谢谢。
您应该在下拉菜单中存储类别名称和类别ID,然后在传递给查询之前进行拆分。 这样做:
将您的选项设置为:
<option value="<? echo $catname.'-'.$catid;?>"><? echo $catname;?></option>
因此,您可以在post中获得该值,然后按以下方式拆分:
$catdetail = mysqli_real_escape_string($con, $_POST['catname']);
list($catname, $catid) = explode('-', $catdetail);
并在query
传递变量$catename & $catid
。
让我知道更多帮助。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.