繁体   English   中英

在数据库的一列下存储2个不同的值

[英]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.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM