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
これで、各ビデオはビデオ テーブルに独自の 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 は以下のように 124 ではなく 126 に属すべきであるため、上記は正しくありません。
Video_Question テーブル:
VideoQuestionId (auto pk) QuestionId VideoId
4 124 12
5 126 13
6 126 14
私の質問は、上記の例を見て、videoid を正しい QuestionId で挿入するにはどうすればよいですか? 問題は、質問にビデオがない可能性があることを認識していないことだと思いますが、よくわからないため、なぜ助けを求めているのですか>
以下は、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
がVideoId
である場合、非表示の入力では、アプリケーション内のそのビデオの非表示の入力32
の番号が表示されます。32
次に、多次元配列を使用し、videocounter
which を 0 から始まり、++
, - を使用して質問ごとに増分する変数を使用するとname="vidid[' + videocounter + '][]"
、各入力は、ビデオがアップロードされた質問に応じて質問番号に属します。たとえば、ビデオがアップロードされた場合質問 2 では、入力は、取得したビデオ ID が質問 2 に属していることを認識します。質問 4 でこれを行うと、入力が質問 4 に属していると認識されます。
これがどのように機能するかを確認するために使用できるデモです(何が起こっているかを見ることができるように、非表示の入力をテキスト入力に変更しました):DEMO
アップデート:
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>');
}
....
}