gpt4 book ai didi

php - 检查表中的最新值并添加到其中

转载 作者:行者123 更新时间:2023-11-28 23:40:38 24 4
gpt4 key购买 nike

因为我有几个“项目”,每个项目都应该包含很多问题,所以我有一个问题页面,我在其中填写了一个视频链接、四个答案和四个下拉列表,用户可以在其中为每个答案设置分数。

但是,在数据库中我有两个表。

一个表,“问题”,包含以下列:pid(project-id)、qid(question-id) 和 question_link。另一个表“answer_det”包含以下列:pid、qid、aid、answer 和 points。

当我填写并执行我制作的问题页面时,每个答案都会得到一个 ID。在“answer_det”表中,设置了 Pid、Aid、answer 和 points。这是它的样子: enter image description here

当我为 Pid=1 的第一个项目插入第一个问题时的“问题”表:

enter image description here

我现在要做的是也设置 qid(question-id)。我不确定该怎么做,但我认为我应该有一个代码来检查 pid 的最大 qid 并将其加 1,以便同一项目的每个新问题都得到一个新的 qid。如果 pid 不在表中,则 qid 的值应为“1”。

因此,如果您查看第一张图片,显示的每一行的 qid 都应为 1,因为所有四个答案都属于同一个问题,即 pid=1 的项目的第一个问题。因此,如果我想向同一个项目添加一个问题,它看起来应该是一样的,但 qid=2 等等。如果我然后为项目 2 添加一个新的(第一个)问题,则 qid 应该从 1 开始,依此类推。然后,如果我想为第一个项目再次添加一个新问题,代码应检查最大 qid 为 2,其中 pid 为 1,然后插入一个包含答案但 qid=3 的新问题。

它应该以与您在第二张图片中看到的“问题”表几乎相同的方式工作。当创建第一个问题时,除了我描述的应该发生在“answer_det”表上之外,我希望第一个项目(pid=1 的项目)的第一个问题也有 qid=1 和我的链接填充。 pid=1 的项目的第二个问题应该得到 qid=2。如果我为新项目添加第一个问题,那么它应该是 pid=2 和 qid=1。然后,如果我想对第一个问题提出第三个问题,它应该看到 pid=1 有 2 个问题 (qid=2) 并将 1 添加到 is 所以第三个问题看起来像 pid=1 和 qid=3。

这是我现在的代码,它没有在两个表的 qid 中插入任何内容。

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

if(mysqli_connect_errno())
{
echo mysqli_connect_error();
}

$pid5 = $_POST['pid4'];

$video = $_POST['videolink1'];

$aid1 = $_POST['a1'];
$aid2 = $_POST['a2'];
$aid3 = $_POST['a3'];
$aid4 = $_POST['a4'];

$answ1 = $_POST['ans1'];
$answ2 = $_POST['ans2'];
$answ3 = $_POST['ans3'];
$answ4 = $_POST['ans4'];

$point1 = $_POST['pointset1'];
$point2 = $_POST['pointset2'];
$point3 = $_POST['pointset3'];
$point4 = $_POST['pointset4'];

$que = "INSERT INTO answer_det VALUES('$pid5','','$aid1','$answ1','$point1');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid2','$answ2','$point2');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid3','$answ3','$point3');";
$que .= "INSERT INTO answer_det VALUES('$pid5','','$aid4','$answ4','$point4');";

$que .= "INSERT INTO question VALUES('$pid5','','$video');";

$run = mysqli_multi_query($mysqli,$que);
if($run)
{
echo "<br>Information stored successfully";

}
else
{
echo mysql_error();
}


?>

最佳答案

我有一个答案和一个建议给你:]

回答:

如果你想将 qid 添加到每个 question_det 你需要在插入 question_det 之前插入 question 并使用 mysqli_last_insert() 函数获取 qid:

$que = "INSERT INTO question VALUES('$pid5','','$video');";

mysqli_query($mysqli,$que);

$qid = mysqli_insert_id($conn); // get last inserted ID of the question

$que = "INSERT INTO answer_det VALUES('$pid5','$qid','$aid1','$answ1','$point1');";
// and so on

我的建议:

我认为您可能需要以不同的方式构建数据库。

这是你的结构

// question table
| pid | qid | question_link |
|-----|-----|--------------------|
| 1 | 0 | http://example.com |

// question_det
| pid | qid | aid | answer | points |
|-----|-----|-----|--------|--------|
| 1 | | 1 | Yes | 10 |

使用完全不同的列作为 PRIMARY KEY 是不好的做法...例如,您的表问题 PRIMARY_KEY 应该是 qid 而不是 pid;对于 question_det 表同样的问题 PRIMARY_KEY 应该是 aid 而不是 pid 并且两者都应该设置为 AUTO_INCREMENT 所以每次你插入一个新的问题或 question_det 它会自动增加 qid 和援助专栏

你应该有这样的东西:

//create a table called 'project' to store them:
| pid | project_name |
|-----|------------------|
| 1 | project 1 |
| 2 | amazing project! |

//create a table called 'question':

| qid | pid | question | question_link |
|-----|-----|------------------|-------------------|
| 1 | 1 | super question | http:/example.com |
| 2 | 1 | question? | http:/example.com |
| 3 | 2 | more questions? | http:/example.com |

// and finally create a table called 'answer'

| aid | qid | answer | points |
|-----|-----|---------------|--------|
| 1 | 1 | Yes | 10 |
| 2 | 1 | No | 20 |
| 3 | 1 | Maybe | 30 |
| 4 | 1 | I do not know | 40 |

注意:每个表ID都应该设置为AUTO_INCREMENT

PHP 代码应该是这样的:

<?php
ini_set('display_errors',1);
error_reporting(E_ALL);

$pid = $_POST['pid']; // project ID
$question = $_POST['question']; // question may have a 'title' ?
$video = $_POST['videolink1'];

// the asnwers!
$answ1 = $_POST['ans1'];
$answ2 = $_POST['ans2'];
$answ3 = $_POST['ans3'];
$answ4 = $_POST['ans4'];

// the points!
$point1 = $_POST['pointset1'];
$point2 = $_POST['pointset2'];
$point3 = $_POST['pointset3'];
$point4 = $_POST['pointset4'];

// Create connection
$conn = mysqli_connect($servername, $username, $password, $dbname);
// Check connection
if (!$conn) {
die("Connection failed: " . mysqli_connect_error());
}

$query = "INSERT INTO question (pid,question,question_link) VALUES ({$pid},'{$question}','{$video}');";


if(mysqli_query($conn,$query)) {
echo "<br>Question Information stored successfully!";

$qid = mysqli_insert_id($conn); // get last inserted ID of the question

$query = "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ1}',{$point1});";
$query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ2}',{$point2});";
$query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ3}',{$point3});";
$query .= "INSERT INTO answer(qid, answer, points) VALUES ({$qid},'{$answ4}',{$point4});";

if(mysqli_multi_query($conn,$query)) {
echo "<br>Questions stored successfully!";
} else {
echo mysqli_errno($conn);
}
} else {
echo mysqli_errno($conn);
}

数据库SQL结构也应该是这样的:

CREATE TABLE `project` (
`pid` INT(11) NOT NULL AUTO_INCREMENT,
`project_name` VARCHAR(45) NULL DEFAULT NULL,
PRIMARY KEY (`pid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE TABLE `question` (
`qid` INT(11) NOT NULL AUTO_INCREMENT,
`pid` INT(11) NULL DEFAULT NULL,
`question` VARCHAR(60) NULL DEFAULT NULL,
`question_link` VARCHAR(300) NULL DEFAULT NULL,
PRIMARY KEY (`qid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

CREATE TABLE `answer` (
`aid` INT(11) NOT NULL AUTO_INCREMENT,
`qid` INT(11) NULL DEFAULT NULL,
`answer` VARCHAR(100) NULL DEFAULT NULL,
`points` INT(11) NULL DEFAULT NULL,
PRIMARY KEY (`aid`))
ENGINE = MyISAM
DEFAULT CHARACTER SET = utf8;

关于php - 检查表中的最新值并添加到其中,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34513809/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com