Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/71.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php 2个不同的值存储在数据库的一列下_Php_Mysql_Sql_Drop Down Menu_Mysqli - Fatal编程技术网

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

Php 2个不同的值存储在数据库的一列下,php,mysql,sql,drop-down-menu,mysqli,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)

我有一张分类表

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>
问题是,当我选择一个类别时,catname和catid的值位于同一个参数下。数据库中的值是这样存储的

id  catname   catid  subcatname
1      C2        2     S1
id    catname   catid  subcatname
1      C2 2           S1

有人能告诉我如何正确地执行吗?

您所做的一切都是正确的,只需检查您的下拉名称可能是您没有发送到$_POST['catid']变量。

在下拉代码中,
$catid=$row['id']应该是
$catid=$row[“catid”]

只需更改您的
选择框
即可

<option value="<? echo $catname;?>$<? echo $catid;?>"><? echo $catname;?></option>
希望它能起作用。请检查
explode
语法,因为我不是php高手

但是我不想发送“
catname
”,因为发送“
catid
”就足够保存在数据库中了。在子类别表中同时保存“
catname
”和“
catid
”会导致数据冗余,从而影响数据库规范化


谢谢。

您应该在下拉列表中存储类别名称和类别Id,然后在传递到查询之前进行拆分。这样做:

将您的选项设置为:

<option value="<? echo $catname.'-'.$catid;?>"><? echo $catname;?></option>
并在
查询中传递变量
$catename和$catid


请让我知道更多帮助。

除非类别名称类似于“$$$CASHMONEY$$$$”并且会发生有趣的事情。混合使用用户输入数据和字符串映射可能是危险的。@rockerBOO,你说得对。但我不希望发送“catname”,因为发送“catid”就足以保存在数据库中。在子类别表中同时保存“catname”和“catid”会导致数据冗余,从而影响数据库规范化。我只是想问一下这个问题的答案。谢谢
$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]);
<option value="<? echo $catname.'-'.$catid;?>"><? echo $catname;?></option>
$catdetail = mysqli_real_escape_string($con, $_POST['catname']);
list($catname, $catid) = explode('-', $catdetail);