PHP:从一个表单自动插入两个连接表的数据

时间:2017-12-26 11:11:50

标签: php mysql

所以,我一直在寻找一个解决方案来解决我的问题,但我一直在寻找部分而不是解决问题的答案。

首先,让我描述一下我想要实现的目标。

在我的数据库中,我有两个表:PLACES和PLACES_CATEGORIES,它们由多个实体中的第三个表PLACES_A_CATEGORIES连接。这是因为PLACE可以用一个或多个类别来表征(但它也可以没有任何类别)。

我想将以一种形式发送的数据添加到两个表中:PLACES和PLACES_A_CATEGORIES。用户列出了带有复选框的所有类别,他可以(但不必)检查其中的一个或多个。

我自动显示了这些复选框,因此它会对数据库中的更改做出相应的反应(比如添加或删除类别)。这部分工作正常,但让我为您展示代码,因为它可能有助于解决实际问题:

$query = "SELECT name FROM places_categories";
$result = $connection->query($query);
$category_no = $result->num_rows;
echo "Categories of places:";
for ($j = 0; $j < $category_no; ++$j)
{
    $category = $result->fetch_assoc()['name'];
    echo '<br><input type="checkbox" id="'.$category.'" name="places_categories" value="'.$category.'"><label for="'.$category.'">'.$category.'</label><br>';
}

所以,让我们回到问题所在。我想:

  • 始终将数据(仅一行)添加到表PLACES
  • 向表PLACES_A_CATEGORIES添加尽可能多的数据行,因为已选中多个复选框

所以,现在让我告诉你我是如何尝试解决这个问题的,下面我将解释我做了什么以及为什么做了。

if ($everything_OK==true)//Hurra, everything is ok, lets add the place to the database
    {
        mysqli_query($connection, "SET NAMES utf8");//need it for special characters

        //Adding multiple rows of data to database
        $query = "SELECT name FROM places_categories";
        $result = $connection->query($query);
        $category_no = $result->num_rows;
        for ($j = 0; $j < $category_no; ++$j)
        {
            $category[$j] = $result->fetch_assoc()['name'];
            if ($_POST['places_categories'] == $category[$j])
            {                                   
                //counts number of records in table PLACES
                $query1 = "SELECT name FROM places";
                $result1 = $connection->query($query1);
                $places_no = $result1->num_rows;
                $places_no += 1;

                //looks for category_id in table places_categories where the name matches the current value from form
                $query2 = "SELECT category_id FROM places_categories WHERE name='$category[$j]'";
                $result2 = $connection->query($query2);
                $what_category_id = mysqli_fetch_array($result2);

                $connection->query("INSERT INTO places_a_categories VALUES ('$places_no', '$what_category_id')");
            }
        }   



        if ($connection->query("INSERT INTO places VALUES (NULL, 0, 0, 0, '$name', '$wysokosc', '$zajawka', '$zatloczenie', '$data_dodania', '$data_edycji', '$szer_geo', '$dlu_geo', '$tytul', '$opis', '$adres', '$tresc')"))
        {           
            echo "Test!";
        }
        else
        {
            throw new Exception($connection->error);
        }
    }

好的,解释:

  • 将数据插入表PLACES的部分工作得很好。它 根据用户在表单中添加的内容将数据添加到数据库。 这里没有任何帮助。
  • 由于前面提到的自动化 table CATEGORIES我想查看实际有多少类别 在数据库中。代码的第一部分应该这样做。
  • with instruction FOR我将每个现有类别分配给一个数值等于数据库中类别名称的数组
  • 然后使用指令如果我想将多行数据添加到表PLACES_A_CATEGORIES中,则检查了多个复选框
  • 第一个值$ places_no等于要添加到另一个表的地方的ID
  • 第二个值$ what_category_id在表PLACES_CATEGORIES中查找category_id,其中名称与从复选框中获取的当前值匹配

结果如何?数据被添加到表PLACES完全没有问题。但是第二张表中没有添加任何内容。此外,我没有收到任何错误消息。它可能是一些我无法看到的愚蠢错误......任何想法?我做错了什么?

0 个答案:

没有答案