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

时间:2015-03-13 06:36:25

标签: php mysql sql drop-down-menu mysqli

我有一个类别表

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

任何人都可以告诉我如何以适当的方式做到这一点

4 个答案:

答案 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

让我知道更多帮助。