我有一个应用程序,您可以在这里查看:应用程序
请按照以下步骤正确使用该应用程序:
单击该
Add Question
按钮两次以在下面的表格中附加 2 个表格行。两个表行都有自己的文件输入。在两个文件输入中上传一个视频文件(我建议上传一个非常小的视频以加快上传速度)。您必须一次上传一个视频文件
您会看到,每次上传文件时,表格下方都会显示一个文本输入,文本输入中的值是与每个上传的视频文件关联的数据库中的视频 ID。
例如,如果我的视频表当前看起来像这样:
视频表:
VideoId (auto PK) VideoFiles
4 Files/video1.mp4
如果我分别上传 2 个视频文件 (video5.mp4
和video6.mp4
) 并且文本输入状态5
和6
,那么这意味着Video
在上传文件后表格现在看起来像 thi:
视频表:
VideoId (auto PK) VideoFiles
4 Files/video1.mp4
5 Files/video5.mp4
6 Files/video6.mp4
现在显示文本输入的代码如下:
上传完成并生成文本输入时的 Jquery:
function stopVideoUpload(success, videoID, videofilename){
var result = '';
if (success == 1){
result = '<span class="videomsg'+videocounter+'">The file was uploaded successfully</span>';
$('.hiddenvid').append('<input type="text" name="vidid[]" id="'+videoID+'" value="' + videoID + '" />');
}
$(sourceVideoForm).find('.videof1_upload_process').hide();
$(sourceVideoForm).find('.videomsg').html(result);
$(sourceVideoForm).find('.videof1_upload_form').show();
return true;
}
存储文本输入的 div 标签:
<div class="hiddenvid"><!-- All uploaded video file ids go here --></div>
现在问题如下,我想在数据库中存储哪个问题包含哪些视频。为此,我会将问题编号存储在Question
表格中,给它一个QuestionId
并希望VideoId
从表格中检索视频Video
。因此,在提交视频文件并将其插入数据库时,数据库表应如下所示:
问题表:
QuestionId (auto PK) QuestionNo
25 1
26 2
Video_Question 表:
VideoQuestionId (PK auto) VideoId QuestionId
7 5 25
8 6 26
我遇到的问题是我正在努力为Video_Question
表插入数据。插入Question
表格很好,但我想要做的是检索最后QuestionId
提交的每个QuestionId
,检索VideoId
属于该表格的任何内容QuestionId
并将其插入Video_Question
表格?
下面是我的尝试,但表中没有插入任何内容Video Question
,它给了我一个:
Notice: Undefined offset: 0 in .... on line 305 error
如何修复错误并获得 INSERTVideo_Question
才能正常工作?
下面是插入的代码(我已经注释了出现notce的行号):
// Prepare your statements ahead of time
$questionsql = "INSERT INTO Question (QuestionNo)
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;
}
$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 3;
}
$questionId = $mysqli->insert_id;
$question_ids[$questionNo] = $questionId;
}
$vidresults = $_POST['vidid'];
foreach($vidresults as $vidid => $vidvalue)
{
$video = $vidvalue;
$vidquesid = $question_ids[$vidid];
foreach($vidvalue as $video)
{
$insertvideoquestion->bind_param("ii",$video, $vidquesid);
$insertvideoquestion->execute();
if ($insertvideoquestion->errno) {
// Handle query error here
echo __LINE__.': '.$insertvideoquestion->error;
break 4;
}
}
}
通过执行以下 var_dumps:
var_dump($question_ids);
var_dump($vidid);
我得到这些结果:
array(2) {
[1]=> int(159)
[2]=> int(160)
} int(1)
更新:
我不明白的是,下面的代码非常相似,但是这是怎么工作的,而我用于视频的 mysqli 代码不起作用:
$results = $_POST['value'];
foreach($results as $id => $value)
{
$answer = $value;
$quesid = $question_ids[$id];
foreach($value as $answer)
{
$insertanswer->bind_param("is", $quesid, $answer);
$insertanswer->execute();
if ($insertanswer->errno) {
// Handle query error here
echo __LINE__.': '.$insertanswer->error;
break 5;
}
}
}
查询:
var $this, i = 0,
$row, $cell;
$('#optionAndAnswer .answers').each(function () {
$this = $(this);
if (i % 6 == 0) {
$row = $("<tr/>").appendTo($answer);
$cell = $("<td/>").appendTo($row);
}
var $newBtn = $(("<input class='answerBtnsRow answers' type='button' style='display:%s;' onclick='btnclick(this, " + gQuestionIndex + ");' />")
.replace('%s', $this.is(':visible') ? 'inline-block' : 'none')).attr('name', "value[" + gQuestionIndex + "][]")
.attr('value', $this.val()).attr('class', $this.attr('class')).attr('id', $this.attr('id') + 'Row');
$newBtn.appendTo($cell);
i++;
});