0

我的数据库中不断出现“数组”这个词。我的表单中有复选框,并且很难使用它。我尝试了不同的东西,这是我拥有的最新编码。我究竟做错了什么?

在我的表单中,复选框的名称为“cats[]”。

我不知道第一部分是否重要(我在网上看到并尝试将其与其余部分一起使用以防万一)

if(count($cats) > 0)
{
 $str = implode(",", $cats);
}

然后是实际代码

$cats = array();

    // Not good?
    //if(isset($_POST['submit']))
    if($_SERVER['REQUEST_METHOD'] == 'POST')
    {
        if(isset($_POST['cats']))
        {
            $cats = $_POST['cats'];
        }
        $categories= $_POST['categories'];

        // This saves it aa a string, as you can only save those values as string.
        $str = $categories . ": " . implode(", ", $cats);
        var_dump ($str);
    }

这对于数据库

$sql="INSERT INTO form_corpo_test (compagnie)
VALUES
('$_POST[cats]')";

编辑:

这是正确的代码(谢谢你们的帮助!我希望我可以将您的两个答案标记为“最佳答案”)。希望这对其他人有所帮助(错误,尽管他们当然也需要研究 sql 注入)。

$cats = array();
if($_SERVER['REQUEST_METHOD'] == 'POST') {
if(isset($_POST['cats'])) {
$cats = implode(",", $_POST['cats'] );
}
$categories= $_POST['categories'];
$str = $categories . ": " . $cats;
}

    $sql="INSERT INTO form_corpo_test (categories)
    VALUES
    ('$str')";
4

5 回答 5

2

如果 $cats 是一个空数组,它仍然是一个数组。大概就是这样。

因此,您正在插入一个与数据库中的字符串连接的空数组。当您将数组转换为字符串时,字符串将包含单词 Array。

例子:

$var = new Array();
echo $var;

输出: Array

正如其他人评论的那样:您可能打算插入$str,而不是$_POST['cats']

于 2013-07-29T16:30:37.420 回答
2

这应该会生成用户输入的所有猫的逗号分隔列表,以添加到类别中。正如它所谓的类别,这是否意味着它也是一个数组?

if($_SERVER['REQUEST_METHOD'] == 'POST') {
    if(isset($_POST['cats'])) {
        $cats = implode(",", $_POST['cats'] );
    }
    $categories= $_POST['categories'];

    $str = $categories . ": " . $cats;
    echo $str;
}
于 2013-07-29T16:37:04.817 回答
0

为您的数据库使用此编码

$sql="INSERT INTO form_corpo_test (compagnie)
VALUES
('$str')";
于 2013-07-29T16:32:28.677 回答
0

您在数据库中存储类别的想法是错误的。

永远不要在数据库列中存储逗号分隔的值,而是创建另一个表来存储链接到帖子的类别。这就是数据库的工作方式。

于 2013-07-29T16:39:13.760 回答
-1

几个不同的事情:

如果您尝试插入连接的字符串,$str:

您正在将 $_POST['cats'] 插入到您的数据库中,您应该在其中插入 $str - 您正在构建的字符串。

如果您尝试插入每个 $cat:

您将需要多个数据库查询。尝试:

    foreach($cats as $category){
        $sql="INSERT INTO form_corpo_test (compagnie)
              VALUES
              (?)";
        //execute query in a prepared statement here
    }
于 2013-07-29T16:37:30.170 回答