ここで表示できるアプリケーションがあります:アプリケーション
アプリケーションを正しく使用するには、以下の手順に従ってください。
ボタンを2回クリックして、
Add Question
下のテーブルに2つのテーブル行を追加します。両方のテーブル行には、独自のファイル入力があります。両方のファイル入力で、ビデオファイルをアップロードします(アップロードを迅速に行うために、非常に小さなビデオをお勧めします)。ビデオファイルを一度に1つずつアップロードする必要があります
ファイルがアップロードされるたびに、テーブルの下にテキスト入力が表示されます。テキスト入力の値は、アップロードされた各ビデオファイルに関連付けられたデータベースのビデオIDです。
たとえば、私のビデオテーブルが現在次のようになっている場合:
ビデオテーブル:
VideoId (auto PK) VideoFiles
4 Files/video1.mp4
2つのビデオファイル(video5.mp4
とvideo6.mp4
)をアップロードし、テキスト入力の状態5
とを6
それぞれVideo
アップロードすると、ファイルのアップロード後、テーブルが次のようになります。
ビデオテーブル:
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
エラーを修正して、のINSERTを機能させるにはどうすればよいVideo_Question
ですか?
以下は挿入のコードです(ノッチが表示される行番号にコメントしました):
// 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;
}
}
}
Jquery:
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++;
});