2015-04-18 16 views
0

我試圖動態添加主題和獲得的成績的字段,但在使用Java腳本發佈這些變量時出現「Undefined index:subject in ...」錯誤。 我的發佈機制可能會有什麼遺漏嗎?請注意,在表單數據中,我並沒有提供id =「subject」來避免僅爲一個主題選擇id,並且使用name =「subject []」來顯示數組,但我似乎不知道如何表示這個在java腳本中,我們將在下面看到。使用JavaScript發佈動態數組作爲獨特變量

表格數據如下;

  <tr> 
         <td colspan="6"><div align="center"><strong> 
          <p style="color:#930">Academic Qualification</p> 
         </strong></div></td> 
         </tr> 

           <?php 
        require_once("connection/connectPDO.php"); 
        $sql="CALL sp_getSubjects()"; 

         //Initiate and Call Stored Procedure Using PDO 
           $pdo = new PDOConfig(); 
           $resultsSubject = $pdo->query($sql); 
           foreach($resultsSubject as $rowSubject) 
             { 
        ?> 
           <tr> 
       <td width="35%" colspan="3"><div align="right"><?php echo $rowSubject['SubjectName']; ?>:<input name="subject[]" type="hidden" value="<?php echo $rowSubject['SubjectID']; ?>" /></div></td> 
         <td width="65%" colspan="3"><select name="grades[]" id="grades" class="validate[required]"> 
          <option value="">--Select Grade--</option> 
            <?php 

        $sql="CALL sp_grabGrades()"; 

           //Initiate and Call Stored Procedure Using PDO 
           $pdo = new PDOConfig(); 
           $resultset = $pdo->query($sql); 
           foreach($resultset as $row) 
             { 

        ?> 
         <option value="<?php echo $row['GradeObtainedID']; ?>"> <?php echo $row['Grade']; ?> </option> 
           <?php } ?> 
         </select></td> 
           <?php } ?> 
         </tr> 

形式看起來像這樣

學業

英語< - 選擇 - >

生物學< - 選擇 - >

科學< - 選擇 - >

的java腳本代碼如下;

  $(document).ready(function(){ 
       $("#submit").click(function(){ 
        //if invalid do nothing 
        if(!$("#formD").validationEngine('validate')){ 
        return false; 
         } 
        var vgrades = $("#grades").val(); 
        var vsubject = $("#subject").val(); 

        $.post("sendInitialApplication.php", 
         { 
          grades : vgrades, 
          subject : vsubject 
         /*Handles response from server*/ 
         function(response){ 
          alert(response); 
         }); 
        alert("You are here"); 
       }); 
      }); 

PHP代碼 「sendInitialApplication.php」 是如下

  <?php 
       $method = $_SERVER['REQUEST_METHOD']; 


       function connect(){ 
        try{ 
         $dbConn = new PDO('mysql:host=localhost; dbname=student', 'root', 'root'); 
         $dbConn->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION); 
         return $dbConn; 
        } 
        catch(PDOException $e){ 
         echo $e->getMessage(); 
        } 
       } 

       /*Checks if method is HTTP POST*/ 
       if(strtolower($method) == 'post'){ 

        $grades = addslashes($_POST['grades']); 
        $subjects = addslashes($_POST['subject']); 

        try { 

         $dbHandler = connect(); 
         $dbHandler->beginTransaction(); 

         //Saving Various subjects with distinct grade obtained 
         foreach($subjects as $key => $subject) 
         { 

         $setIndexSubject = 'CALL sp_sendIndexSubject(:vSubjectID,:vGradeObtainedID)'; 
         $stmt_subject = $dbHandler->prepare($setIndexSubject); 
         $stmt_subject->bindValue(':vSubjectID', $subject); 
         $stmt_subject->bindValue(':vGradeObtainedID', $grades[$key]); 
         $stmt_subject->execute(); 
         $stmt_subject->closeCursor(); 
         } 

         $dbHandler->commit(); 

         echo "The Operation was Successful!!!!!!"; 

        } catch (PDOException $e) { 
         $dbHandler->rollback(); 
         die($e->getMessage()); 
        } 

       }else{ 
        echo "Oops! Make sure Method is POST"; 
       } 
      ?> 
+0

@holodoc你能幫助我在這裏感謝 – mountain

回答

0

我期待的是$ _ POST [ '主題']和$ _ POST [ '等級']應該是數組。比你不能使用$ subject = addslashes($ _ POST ['subjects']),但$ subject = $ _POST ['subjects']。在數組上調用addslashes會引發PHP警告並返回NULL。

編輯: 我建議修改你的代碼的邏輯。 隱藏的輸入類型,帶有主題ID,將不起作用,正如您所期望的那樣。修改列表:在sendInitialApplication.php

grade = array (
    subjectID1 => selectedGradeId, 
    subjectID2 => selectedGradeId, 
    ... 
) 

和數據處理:

// ... obtaining subjects from db ... 
foreach($resultsSubject as $rowSubject) { 
?> 
    <tr> 
    <td> 
     <select name="grade[<?= $rowSubject['SubjectID']; ?>]"> 
     <option value="">--Select Grade--</option> 
     <?php 
     // ... obtaining grades from db ... 
     foreach($resultset as $row) { 
     ?> 
     <option value="<?php echo $row['GradeObtainedID']; ?>"> <?php echo $row['Grade']; ?> </option> 
     <?php 
     } 
     ?> 
     </select> 
    </td> 
    </tr> 
<?php 
} 

比序列化形式應該返回數組

// prepare db transaction 
$grades = $_POST['grade']; 
foreach ($grades as $subject => $grade) { 
    $setIndexSubject = 'CALL sp_sendIndexSubject(:vSubjectID,:vGradeObtainedID)'; 
    $stmt_subject = $dbHandler->prepare($setIndexSubject); 
    $stmt_subject->bindValue(':vSubjectID', $subject); 
    $stmt_subject->bindValue(':vGradeObtainedID', $grade); 
    $stmt_subject->execute(); 
    $stmt_subject->closeCursor(); 
} 
// close db transaction 
+0

但仍然沒有工作。主題沒有被定義,如何最好的我們可以顯示這篇文章 – mountain

+0

嘗試序列化表單數據提交如下所示:http://stackoverflow.com/questions/15173965/serializing-and-submitting-a-form-with-jquery -post-and-php – Kepi

+0

還沒有,我們發佈主題的問題 – mountain