2013-01-24 284 views
-1

我有一个应用程序,你可以查看这里:APPLICATION数据未插入到数据库表

请按照下面的步骤,以便使用正确的应用程序:在Add Question按钮

  1. 单击两次追加下表中的2个表格行。

  2. 这两个表行都会有自己的文件输入。在这两个文件输入上传一个视频文件(我建议一个非常小的视频上传速度快)。您将不得不一次性上传视频文件

  3. 您将看到每次上传文件时,在表格下方都会显示文本输入,文本输入中的值是来自数据库的视频ID为每个上传的视频文件关联。

因此,举例来说,如果我的视频表目前看起来是这样的:

视频表:

VideoId (auto PK) VideoFiles 
4     Files/video1.mp4 

如果我上传2个视频文件(video5.mp4video6.mp4)和文本输入状态分别为56,则表示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 class="hiddenvid"><!-- All uploaded video file ids go here --></div> 

现在问题在于,我想在数据库中存储哪个问题包含哪些视频。为此,我会将问题编号存储在Question表中,并为其提供QuestionId,并且想要从Video表中检索VideoId视频。所以,下面是数据库中的表应该是什么提交和插入您的视频文件导入到数据库时,如:

问表:

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

我如何解决这个错误,并得到了Video_Question的INSERT工作?

下面是插入的代码(我评论过行号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; 
     } 
    } 
} 

的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++; 
    }); 
+0

本来会喜欢JSFiddle的。 – Srinivas

+0

你可以发布标记请 –

+0

@ user1881090 HTML :) –

回答

1

$question_ids是一个索引数组。你没有发布初始化该数组的代码,所以我不是为什么它是一个索引数组,但是无论如何。另一方面,$vidresults来自一个POST数组,除非您指定键(您不是),否则该数组是零索引。从$vidresults

$vidquesid = $question_ids[$vidid]; 

但是,由于该通知说,第一个关键,零:你再通过$vidresults重复,分配密钥(从零开始)到$vidid,然后尝试使用该线路上的按键来访问$question_ids ,不存在于$question_ids。如果由于某种原因$question_ids必须是单索引的,您可以更改迭代,向关键字添加一个或者更改html以指定索引(由于生成输入元素的方式,这可能会产生问题)。

我不知道这种东西是否有官方消息来源。 This question描述HTTP数组语法。

编辑:您登载:

$questionNo = $_POST['numQuestion'][$i]; 

但你并没有发布相关的HTML/jQuery的。在HTML看起来喜欢这样的:

<th colspan="2"> 
    Question Number <span class="questionNum">1</span> 
    <input type="hidden" class="num_questions" name="numQuestion" value="1"> 
</th> 

而jQuery的(没有关系,只是为了表明它是不会改变的输入类型的数组):

function insertQuestion(form) { 
    if (qnum > 5) { 
    return; 
    } 
    var $tbody = $('#qandatbl_onthefly > tbody'); 
    var $tr = $("<tr class='optionAndAnswer' align='center'>"); 
    var $qid = $("<td width='5%' class='qid'></td>").text(qnum); 
    var $video = $("<td width='17%' class='video'></td>"); 
    var $questionType = ''; 

    $('.num_questions').each(function() { 
    var $this = $(this); 
    var $questionNumber = $("<input type='hidden' 
    class='num_questionsRow'>").attr('name',$this.attr('name')+"[]") 
     .attr('value',$this.val()); 
    $qid.append($questionNumber);        
    ++qnum; 
    $(".questionNum").text(qnum); 
    $(".num_questions").val(qnum); 
    --qremain; 
    $(".questionRemain").text(qremain); 
}); 

所以,我是第一次是错误的,尽管我指出的问题可能仍需要修正。但问题是您正在从0手动迭代到count($_POST['numQuestions'])。但是$_POST['numQuestions']是一个整数,而不是一个数组,并且this page在返回值部分指出,count将返回1的值不是数组。因此,您正尝试在第一次迭代中访问$_POST['numQuestions'][0],从而触发索引零不存在的通知。

注:我看到引用了赏金协议的一些早期问题的评论。我希望这不适用于此。

编辑2:您添加的代码使用foreach循环,永远不会尝试访问未设置的索引。话虽如此,你仍然试图迭代一个整数的for循环,没有循环构造会解决这个问题。也就是说,你的方法出了问题,你必须重新考虑你决定如何解决问题的意图。我想我已经回答了这个问题,但如果您想重新设计设计问题,我会很乐意回应一个单独发布的新问题。

+0

我包括必要的代码有问题,所以你知道'$ questionids '来自 – user1881090

+0

我不明白的是,我有更新中包含的类似代码,并且工作正常,代码位于我拥有的mysqli视频代码的下面,为什么这些代码没有问题?我需要包含哪些代码才能解决此问题? – user1881090

+0

好的,这是公平的,我会把你连接到单独的问题。希望你可以回答单独的问题,因为你已经了解这个 – user1881090