MYSQL,PHP和HTML SELECT-通过关系将数据添加到表

时间:2019-06-30 00:43:20

标签: php mysql

我在PHP方面并不擅长,我必须做的工作是PHP,因此,由于我仍在学习PHP,因此我寻求的帮助很少。

这是我的表格:

CREATE TABLE `posts` (
      `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `user_id` int(11) DEFAULT NULL,
      `title` varchar(255) NOT NULL,
      `slug` varchar(255) NOT NULL UNIQUE,
      `body` text NOT NULL,
      FOREIGN KEY (`user_id`) REFERENCES `users` (`id`) );

CREATE TABLE `topics` (
      `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `name` varchar(255) NOT NULL,
      `slug` varchar(255) NOT NULL UNIQUE );

CREATE TABLE `post_topic` (
      `id` int(11) NOT NULL AUTO_INCREMENT PRIMARY KEY,
      `post_id` int(11) DEFAULT NULL UNIQUE,
      `topic_id` int(11) DEFAULT NULL,
      FOREIGN KEY (`post_id`) REFERENCES `posts` (`id`),
      FOREIGN KEY (`topic_id`) REFERENCES `topics` (`id`) );

有“不进行更新”操作,但是我将其保留以保持其清洁。

现在,我添加了“管理”页面,可以在其中添加新帖子和脚本,以使我可以插入帖子的标题,子句和正文

这是 PHP

$id = "0";
$user_id = 3;
$title = "";
$slug = "";
$body = "";

if (isset($_POST['submit'])) {
    $title = $_POST['title'];
    $slug = $_POST['slug'];
    $body = $_POST['body'];

    mysqli_query($db, "INSERT INTO posts (title, slug, body) VALUES ('$title', '$slug','$body')");
}

这是 HTML表单

<form method="post" action="posts.php">

    <input type="text" name="title" placeholder="Title">
    <input type="text" name="slug" placeholder="Slug">
    <textarea name="body" rows="3" placeholder="Text"></textarea>

    <button type="submit" name="submit">Submit</button>

</form>

还存在具有DB连接的config.php文件,我的代码的这一部分工作正常。

现在如何使用选择框在帖子中添加类别?例如,我有三个类别,即“体育”,“技术”和“新闻”,在每个帖子上,我希望能够选择一个类别,以后可以在类别下找到。

我尝试了几件事,但只是将新ID添加到post_topic或topics表中。

非常感谢。

已编辑

例如,这就是插入方式:

INSERT INTO `posts` (`id`, `user_id`, `title`, `slug`, `body`) VALUES (1, 1, 'First post', 'first-post','First post text') 
INSERT INTO `topics` (`id`, `name`, `slug`) VALUES (1, 'Tech', 'tech')  
INSERT INTO `post_topic` (`id`, `post_id`, `topic_id`) VALUES (1, 1, 1)

1 个答案:

答案 0 :(得分:-1)

我建议使用数据库中所有可能的<select>条目填充HTML topic输入。然后,在提交表单时,通过向post添加一条记录,将topic与选定的post_topic关联起来。

这是一个使用mysqli程序样式的基本示例,因为这似乎就是您所使用的。

查询所有可用主题

$sql = "SELECT * FROM `topics` WHERE 1 ORDER BY `name` ASC;";
$topicsQ = mysqli_query($db, $sql);

用主题填充<select>

<form method="post" action="posts.php">

    <input type="text" name="title" placeholder="Title">
    <input type="text" name="slug" placeholder="Slug">
    <textarea name="body" rows="3" placeholder="Text"></textarea>

    <select name="topic_id"><?php

      while ($topic = mysqli_fetch_row($topicsQ)) {

        ?><option value="<?=$topic['id']?>"><?=$topic['name']?></option><?php

      }

    ?></select>

    <button type="submit" name="submit">Submit</button>

</form>

插入帖子

$user_id = 1; // this might come from whichever user is logged in, from the form, etc.

$title = $_POST['title'];
$slug = $_POST['slug'];
$body = $_POST['body'];
$topic_id = $_POST['topic_id'];

$sql = "INSERT INTO `posts` (`user_id`, `title`, `slug`, `body`) VALUES (?,?,?,?);";
$stmt = mysqli_prepare($db, $sql);
mysqli_stmt_bind_param($stmt, 'isss', $user_id, $title, $slug, $body);
mysqli_stmt_execute($stmt);

// get the id of the inserted post
$post_id = mysqli_insert_id($db);

将新帖子与所选主题相关联

$sql = "INSERT INTO `post_topic` (`post_id`, `topic_id`) VALUES (?,?);";
$stmt = mysqli_prepare($db, $sql);
mysqli_stmt_bind_param($stmt, 'ii', $post_id, $topic_id);
mysqli_stmt_execute($stmt);