2016-12-02 10 views
-1

挿入ボタンがあるHTMLテーブルがあります。これはうまく動作していました。しかし、最初の列がID列でなければなりませんでした。したがって、列の1つ、MR_IDをIDとして設定した後、スクリプトはテーブルとデータベースに挿入されなくなりました。コンソールでは、この列がIDに設定される前に「行が挿入された」と言ったときに「行を挿入できませんでした」と表示されます。誰かがここで何が起こっているか教えてもらえますか?私は多くのコードを持っていますが、私は問題を理解するのに必要なものを投稿しておきたいと思います。アイデンティティ列があるので、INSERTが機能しません

にループされているダイアログボックスとテーブル:

<div id="dialog-form" title="Add Vendor"> 
    <p class="validateTips">All form fields are required.</p> 

<!-- Dialog box displayed after add row button is clicked --> 
    <form> 
    <fieldset> 
     <label for="mr_name">Vendor</label> 
     <input type="text" name="mr_name" id="mr_name" class="text ui-widget-content ui-corner-all" value="test"> 
     <label for="buyer_id">Buyer ID</label> 
     <input type="text" name="buyer_id" id="buyer_id" class="text ui-widget-content ui-corner-all" value="99"> 
     <label for="poc_n">POC Name</label> 
     <input type="text" name="poc_n" id="poc_n" class="text ui-widget-content ui-corner-all" value="name"> 
     <label for="poc_p">POC Email</label> 
     <input type="text" name="poc_e" id="poc_e" class="text ui-widget-content ui-corner-all" value="[email protected]"> 
     <label for="poc_p">POC Phone</label> 
     <input type="text" name="poc_p" id="poc_p" class="text ui-widget-content ui-corner-all" value="5555555555"> 

     <!-- Allow form submission with keyboard without duplicating the dialog button --> 
     <input type="submit" id="submit" tabindex="-1" style="position:absolute; top:-1000px"> 
    </fieldset> 
    </form> 
</div> 



<div id="users-contain" class="ui-widget"> 
<table id="html_master" class="ui-widget ui-widget-content"> 
<thead> 
    <tr class="ui-widget-header"> 
    <td>ID</td> 
    <td>Vendor</td> 
    <td>Buyer ID</td> 
    <td>POC Name</td> 
    <td>POC Email</td> 
    <td>POC Phone</td> 
    <td>Edit</td> 
    </tr> 
</thead> 
<tbody> 


<?php 
    /* Foreach loop that brings in information to populate table */ 
    foreach ($dbh->query($sql) as $rows){ 
    ?> 
    <tr id="<?php echo intval ($rows['MR_ID'])?>"> 
     <td class="mr_id" id="<?php echo intval ($rows['MR_ID'])?>" contenteditable="false"><?php echo intval ($rows['MR_ID'])?></td> 
     <td class="mr_name" id="mr_name-<?php echo intval ($rows['MR_ID'])?>" name="field" contenteditable="false"><?php echo $rows['MR_Name']?></td> 
     <td class="buyer_id" id="buy_id<?php echo intval ($rows['MR_ID'])?>" contenteditable="false"><?php echo $rows['Buyer_ID']?></td> 
     <td class="poc_n" id="poc_n-<?php echo intval ($rows['MR_ID'])?>" contenteditable="false"><?php echo $rows['MR_POC_N']?></td>  
     <td class="poc_e" id="poc_e-<?php echo intval ($rows['MR_ID'])?>" contenteditable="false"><?php echo $rows['MR_POC_E']?></td> 
     <td class="poc_p" id="poc_p-<?php echo intval ($rows['MR_ID'])?>" contenteditable="false"><?php echo $rows['MR_POC_P']?></td> 
     <td><input type="button" class="edit" name="edit" value="Edit"> 
    </tr> 
<?php 
    } 
?> 
</tbody> 
</table> 

Javascriptを:

// ----- Dialog Box for adding a row ----- 

$(function() { 

    var dialog, form, 

     emailRegex = /^[a-zA-Z0-9.!#$%&'*+\/=?^_`{|}~-][email protected][a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?(?:\.[a-zA-Z0-9](?:[a-zA-Z0-9-]{0,61}[a-zA-Z0-9])?)*$/, 
     phoneRegex = /^(?:(?:\+?1\s*(?:[.-]\s*)?)?(?:\(\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\s*\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\s*(?:[.-]\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\s*(?:[.-]\s*)?([0-9]{4})(?:\s*(?:#|x\.?|ext\.?|extension)\s*(\d+))?$/, 
     mr_name = $("#mr_name"), 
     buyer_id = $("#buyer_id"), 
     poc_n = $("#poc_n"), 
     poc_e = $("#poc_e"), 
     poc_p = $("#poc_p"), 
     allFields = $([]).add(mr_name).add(buyer_id).add(poc_n).add(poc_e).add(poc_p), 
     tips = $(".validateTips"); 
    console.log(allFields); 

    function updateTips(t) { 
     tips 
     .text(t) 
     .addClass("ui-state-highlight"); 
     setTimeout(function() { 
     tips.removeClass("ui-state-highlight", 1500); 
     }, 500); 
    } 

    function checkRegexp(o, regexp, n) { 
     if (!(regexp.test(o.val()))) { 
     o.addClass("ui-state-error"); 
     updateTips(n); 
     return false; 
     } else { 
     return true; 
     } 
    } 

    function addVendor() { 
     var valid = true; 
     allFields.removeClass("ui-state-error"); 
// ----- Validation for each input in add row dialog box ----- 
     valid = valid && checkRegexp(mr_name, /^[a-z]([0-9a-z_\s])+$/i, "Please enter a valid vendor name"); 
     valid = valid && checkRegexp(buyer_id, /^(0|[1-9][0-9]*)$/, "Please enter a valid Buyer ID"); 
     valid = valid && checkRegexp(poc_n, /^[a-zA-Z ]*$/, "Please enter a valid name"); 
     valid = valid && checkRegexp(poc_e, emailRegex, "Please enter a valid email"); 
     valid = valid && checkRegexp(poc_p, phoneRegex, "Please enter a valid phone number"); 
     console.log(allFields); 
     if (valid) { 
     var $tr = $("#html_master tbody tr").eq(0).clone(); 
     var dict = {}; 
     var errors = ""; 
     $.each(allFields, function(){ 
      $tr.find('.' + $(this).attr('id')).html($(this).val()+"-"+buyer_id); 
      var type = $(this).attr('id'); 
      var value = $(this).val(); 
      console.log(type + " : " + value); 
      // ----- Switch statement that provides validation for each table cell ----- 
      switch (type) { 
      case "mr_id": 
       dict["MR_ID"] = value; 
       break; 
      case "mr_name": 
       dict["MR_Name"] = value; 
       break; 
      case "buyer_id": 
       dict["Buyer_ID"] = value; 
       break; 
      case "poc_n": 
       dict["MR_POC_N"] = value; 
       break; 
      case "poc_e": 
       dict["MR_POC_E"] = value; 
       break; 
      case "poc_p": 
       dict["MR_POC_P"] = value; 
       break; 
      } 
     }); 
     console.log(dict); 
     $tr.find('.mr_id').html($("#html_master tbody tr").length + 1); 
     $("#html_master tbody").append($tr); 
     dialog.dialog("close"); 


     var request = $.ajax({ 
      type: "POST", 
      url: "insert-copy.php", 
      data: dict 
     }); 

     request.done(function (response, textStatus, jqXHR){ 
      if(JSON.parse(response) == true){ 
      console.log("row inserted"); 
      } else { 
      console.log("row failed to insert"); 
      console.log(response); 
      } 
     }); 

     // Callback handler that will be called on failure 
     request.fail(function (jqXHR, textStatus, errorThrown){ 
      console.error(
       "The following error occurred: "+ 
       textStatus, errorThrown 
      ); 
     }); 

     // Callback handler that will be called regardless 
     // if the request failed or succeeded 
     request.always(function() { 

     }); 


     } 
     return valid; 
    } 

    var dialog = $("#dialog-form").dialog({ 
     autoOpen: false, 
     height: 400, 
     width: 350, 
     modal: true, 
     buttons: { 
     "Add Row": addVendor, 
     Cancel: function() { 
      dialog.dialog("close"); 
     } 
     }, 
     close: function() { 
     form[ 0 ].reset(); 
     allFields.removeClass("ui-state-error"); 
     } 
    }); 

    form = dialog.find("form").on("submit", function(event) { 
     event.preventDefault(); 
     addVendor(); 
    }); 

    $(".create-user").button().on("click", function() { 
     dialog.dialog({ 
      position: ['center', 'top'], 
      show: 'blind', 
      hide: 'blind' 
     }); 
     dialog.dialog("open"); 
    }); 
    }); 

は、Ajaxスクリプトと一緒に表関数に挿入します。コメントを収集

function insertIntoTable() { 

    var tableName = document.getElementById("tableNameInput").value; 

    var dict = { tableName: tableName, mrName: 'Temp Object' }; 

    request = $.ajax({ 
     type: "POST", 
     url: "insert-copy.php", 
     data: dict 
    }); 

    request.done(function (response, textStatus, jqXHR){ 
     if(JSON.parse(response) == true){ 
     console.log("row inserted"); 
     } else { 
     console.log("row failed to insert"); 
     } 
    }); 

    // Callback handler that will be called on failure 
    request.fail(function (jqXHR, textStatus, errorThrown){ 
     // Log the error to the console 
     console.error(
      "The following error occurred: "+ 
      textStatus, errorThrown 
     ); 
    }); 

    // Callback handler that will be called regardless 
    // if the request failed or succeeded 
    request.always(function() { 

    }); 

    } 



<?php 

    $MR_ID = $_POST['MR_ID']; 
    $MR_Name = $_POST['MR_Name']; 
    $Buyer_ID = $_POST['Buyer_ID']; 
    $MR_POC_N = $_POST['MR_POC_N']; 
    $MR_POC_E = $_POST['MR_POC_E']; 
    $MR_POC_P = $_POST['MR_POC_P']; 

    $host="xxxxxxxxxxx"; 
    $dbName="xxxxxx"; 
    $dbUser="xxxxxxxxxxxxxx"; 
    $dbPass="xxxxxxxxx"; 

    $pdo = new PDO("sqlsrv:server=".$host.";Database=".$dbName, $dbUser, $dbPass); 

    $sql = "INSERT INTO Stage_Rebate_Master (MR_ID, MR_Name, Buyer_ID, MR_POC_N, MR_POC_E, MR_POC_P) VALUES (?, ?, ?, ?, ?, ?)"; 
    $stmt = $pdo->prepare($sql); 
    $result = $stmt->execute(array($MR_ID, $MR_Name, $Buyer_ID, $MR_POC_N, $MR_POC_E, $MR_POC_P)); 
    echo json_encode($result); 

?> 
+0

あなたの 'Stage_Rebate_Master'テーブルの構造を投稿できますか? –

+0

テーブルに新しい列を追加しましたか? – RiggsFolly

+0

テーブルに6列... MR_ID(int、not null)、MR_NAME(nvarchar(255)、null)、BUYER_ID(int、null) 、MR_POC_N(varchar(25)、null)、MR_POC_E(varchar(25)、null)、MR_POC_P(varchar(25)、null).......それはあなたが探していたものですか? – Rataiczak24

答えて

0

を:

  • 列にはnot nullという制約がありますので、nullの値を挿入することはできません。
  • ユーザーがIDを指定しないようにするには、PHP(またはPHP)またはデータベースでNULL以外の列の値を生成する必要があります。
  • 自動インクリメント列がある場合、値はデータベースによって自動的に生成され、はその列にを挿入してはいけません。 (IDインサートがオンの場合は例外ですが、そうしないでください)
  • カラムが自動インクリメントでない場合は、すべてのインサートにnull以外の整数値を含める必要があります。
  • カラムがユニークの場合は、新しい値を挿入するようにしてください。
関連する問題