假设我有3个问题:
QuestionNo Video
1
2 wildlife.mp4
3
4 colors.mp4
sports.mp4
现在我正在做的是将每个问题插入数据库,为每个问题提供自己的自动 QuestionId,所以它现在在技术上看起来像这样:
QuestionId QuestionNo Video
123 1
124 2 wildlife.mp4
125 3
126 4 colors.mp4
sports.mp4
现在下面是db中的问题表:
QuestionId (pk auto) QuestionNo
123 1
124 2
125 3
126 4
现在每个视频都存储在 Video Table 中自己的 id 中:
VideoId (auto pk) VideoFile
12 wildlife.mp4
13 colors.mp4
14 sports.mp4
现在终于,这就是问题所在,我有一个 Video_Question 表,我们用它来了解哪个视频进入哪个问题。现在的问题是我为此设置插入的方式是它检索最后一个 QuestionId 插入,然后找到它找到的第一个 videoId 并使用该 QuestionId 显示它。这是不正确的,因为这意味着视频存储在错误的问题中。在上述示例的 db 中,它将像这样显示:
Video_Question 表:
VideoQuestionId (auto pk) QuestionId VideoId
4 123 12
5 124 13
6 124 14
以上不正确,因为 VideoId 12 不应该属于 QuestionId 123,它应该在 124 中,VideoId 13 和 14 应该在 126 中,而不是像下面的 124:
Video_Question 表:
VideoQuestionId (auto pk) QuestionId VideoId
4 124 12
5 126 13
6 126 14
我的问题是,看看上面的例子,我怎样才能用正确的 QuestionId 插入 videoid?我认为问题在于它没有认识到问题可能没有视频,但我不确定,因此我为什么要寻求帮助>
下面是插入 Question 表和 Video_Question 表的代码:
// Prepare your statements ahead of time
$questionsql = "INSERT INTO Question (SessionId, QuestionNo,
QuestionContent, NoofAnswers, ReplyId, QuestionMarks, OptionId)
VALUES (?)";
if (!$insert = $mysqli->prepare($questionsql)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
$videoquestionsql = "INSERT INTO Video_Question (VideoId, QuestionId)
VALUES (?, ?)";
if (!$insertvideoquestion = $mysqli->prepare($videoquestionsql)) {
// Handle errors with prepare operation here
echo __LINE__.': '.$mysqli->error;
}
//make sure both prepared statements succeeded before proceeding
if( $insert && $insertvideoquestion)
{
$c = count($_POST['numQuestion']);
$question_ids = array();
for($i = 0; $i < $c; $i++ )
{
$questionNo = $_POST['numQuestion'][$i];
$insert->bind_param("i", $questionNo);
$insert->execute();
if ($insert->errno)
{
// Handle query error here
echo __LINE__.': '.$insert->error;
break 1;
}
$questionId = $mysqli->insert_id;
$question_ids[$questionNo] = $questionId;
}
$vidresults = $_POST['vidid'];
foreach($vidresults as $videoid => $vidvalue)
{
$video = $vidvalue;
$vidquesid = (int)$question_ids[$videoid];
foreach($vidvalue as $video)
{
$insertvideoquestion->bind_param("ii",$video, $vidquesid);
$insertvideoquestion->execute();
if ($insertvideoquestion->errno) {
// Handle query error here
echo __LINE__.': '.$insertvideoquestion->error;
break 5;
}
}
}
$insertvideoquestion->close();
$insert->close();
}
更新:
以下是与上述示例匹配的 var_dumps,唯一的区别是文件名和 id 号。上面提到的例子有4个问题:
var_dump($question_ids);
array(4) {
[1]=> int(277)
[2]=> int(278)
[3]=> int(279)
[4]=> int(280)
}
var_dump($_POST['vidid']);
array(3) {
[1]=> array(1) {
[0]=> string(3) "148"
}
[2]=> array(1) {
[0]=> string(3) "149"
}
[3]=> array(1) {
[0]=> string(3) "150"
} }
将上面的 var_dumps 组合在一起看起来像这样:
array(4) {
[1]=> int(289)
[2]=> int(290)
[3]=> int(291)
[4]=> int(292)
}
array(3) {
[1]=> array(1) {
[0]=> string(3) "148"
}
[2]=> array(1) {
[0]=> string(3) "149"
}
[3]=> array(1) {
[0]=> string(3) "150"
} }
额外细节:
通过使用这行代码:
$('.hiddenvid').append('<input type="hidden" name="vidid[' + videocounter + '][]" id="'+videoID+'" value="' + videoID + '" />');
它能够为每个上传的视频检索并显示VideoId
插入到表格中的内容。Video
因此,例如,如果Wildlife.mp4
has VideoId
which is 32
,那么在隐藏输入中,它将显示32
应用程序中该视频的隐藏输入中的数字。
然后通过使用多维数组并使用videocounter
which 是一个以 0 开头并使用++
, - 为每个问题递增的变量name="vidid[' + videocounter + '][]"
,每个输入都属于一个问题编号,具体取决于上传视频的问题。例如,如果上传了视频在问题 2 中,输入识别检索到的视频 id 属于问题 2。如果我为问题 4 执行此操作,那么它将识别出输入属于问题 4,依此类推。
这是一个演示,你可以用它来看看它是如何工作的(我将隐藏的输入更改为文本输入,这样你就可以看到发生了什么):演示
更新:
目前在 Video_QuestionId 中插入数据时,QuestionId 显示为 0,以下代码是否正确:
function stopVideoUpload(success, videoID, videofilename){
var result = '';
videocounter++;
var questionNum = $(this).closest('td').siblings('.qid').find('input.num_questionsRow').val();
if (success == 1){
result = '<span class="videomsg'+videocounter+'">The file was uploaded successfully</span>';
$('.hiddenvid').append('<input type="text" name="vidid['+questionNum+'][]" id="'+videoID+'" value="' + videoID + '" />');
$('.listVideo').eq(window.lastUploadVideoIndex).append('<div>' + htmlEncode(videofilename) + '<button type="button" class="deletefilevideo" data-videoID="'+videoID+'" data-video_file_name="' + videofilename + '" value="'+videoID+'">Remove</button><br/><a href="previewvideo.php?filename='+ videofilename +'" title="Click to view in New window" target="_blank">Test Video<hr/></div>');
}
....
}