因为我有几个"项目"每个应该包含很多问题,我有一个问题页面,我填写视频链接,四个答案和四个下拉列表,用户可以为每个答案设置点数。
但是,在数据库中我有两个表。
一个表,"问题",列:pid(项目ID),qid(问题ID)和问题链接。另一个表" answer_det"有以下列:pid,qid,aid,answer和points。
当我填写并执行我的问题页面时,我已经做了所以每个答案都有一个id。在表格#34; answer_det"中,正在设置Pid,Aid,answer和points。这是它的样子:
"问题"当我插入Pid = 1的第一个项目的第一个问题时的表格:
我现在要做的是设置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" -table之外,我想第一个项目的第一个问题(pid = 1的那个)也有qid = 1以及我填写的链接。 pid = 1的项目的第二个问题应该是qid = 2。如果我为新项目添加第一个问题,那么它应该是pid = 2和qid = 1。然后,如果我想对第一个问题提出第三个问题,它应该看到pid = 1有2个问题(qid = 2)并且加1是因此第三个问题看起来像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();
}
?>
&#13;
答案 0 :(得分:1)
我有一个答案和建议:]
如果你想在每个question_det中添加qid,你需要在插入 question_det 之前插入问题并使用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应该援助而不是 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;