2017-01-09 10 views
0

私のウェブページにはドロップダウンボックスと3つの入力ボックスがあります。ドロップダウンボックスで選択するたびに、テキストボックスに情報が自動入力されます。また、各テキストボックスの横に[保存]ボタンがあります。これにより、保存ボタンを押すと変更が必要な場合、そのフィールドを更新することができます。たとえば、私は私の更新ステートメントにドロップダウンボックスの値をハードコーディングしても機能しますが、ハードコーディングを行わずに動作させることはできません。だから私はちょうど私のドロップダウンボックスで選択されている値を読み取るためにJavaScriptを取得する必要があると思う。これをどうすれば解決できますか?入力値に基づいてデータベースを更新してください

ドロップダウンボックスコード:

<div> 
<div id="vendor"> 
<strong>Vendor:</strong> 
</div> 

<div class="align"> 
<select name="vendor_dropdown" id="ven" onChange="updateinput();"> 
    <option value="">Choose a Vendor</option> 
     <?php foreach($users->fetchAll() as $user): ?> 
      <option 
        data-name="<?php echo $user['MR_POC_N'];?>" 
        data-email="<?php echo $user['MR_POC_E'];?>" 
        data-phone="<?php echo $user['MR_POC_P'];?>" 
      > 
       <?php echo $user['MR_Name'];?> 
      </option> 
     <?php endforeach; ?> 
</select> 
</div> 

</div> 

自動移入される連絡先コード:

<div> 
<div id="contact_info"> 
<strong>Contact Information:</strong><br> 
</div> 

<div class="align1"> 
<table align="left" id="contact"> 
    <tr> 
     <td align="left">Name:</td> 
     <td><input type="text" id="name" class="name" name="name" style="margin-left: 5px"></td> 
     <td><input type="button" class="edit" name="edit" value="Save"></td> 
    </tr> 
    <tr> 
     <td align="left">Email:</td> 
     <td><input type="email" id="email" class="email" name="email" style="margin-left: 5px"></td> 
     <td><input type="button" class="edit" name="edit" value="Save"></td> 
    </tr> 
    <tr> 
     <td align="left">Phone Number:</td> 
     <td><input type="tel" id="tel" class="tel" name="number" style="margin-left: 5px"></td> 
     <td><input type="button" class="edit" name="edit" value="Save"></td> 
    </tr> 
</table> 
</div> 

</div> 

Javascriptの情報を編集する:

// ----- Edit Contact Info ----- 

$(document).on("click", "#contact .edit", function() { 
    var $this = $(this); 
    var tds = $this.closest('tr').find('td').filter(function() { 
    return $(this).find('.edit').length === 0; 
    }); 
    if ($this.val() === 'Edit') { 
    /*if($this.id !== '.mr_id') { 
     tds.not('.mr_id').not('.mr_name').prop('contenteditable', true); 
    }*/ 
    } else { 
    var isValid = true; 
    var errors = ''; 
    $('#myDialogBox').empty(); 
    var elements = tds; 
    if (tds.find('input').length > 0) { 
     elements = tds.find('input'); 
    } 
    var dict = {}; 
    elements.each(function (index, element) { 
     var type = $(this).attr('class'); 
     var value = (element.tagName == 'INPUT') ? $(this).val() : $(this).text(); 
     console.log(type); 
     // ----- Switch statement that provides validation for each table cell ----- 
     switch (type) { 
     case "ven": 
       dict["MR_Name"] = value; 
      break; 
     case "name": 
      if (value == value.match(/^[a-zA-Z\s]+$/)) { 
       dict["MR_POC_N"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Name\n"; 
      } 
      break; 
     case "email": 
      if (value == value.match(/^[\w\-\.\+]+\@[a-zA-Z0-9\.\-]+\.[a-zA-z0-9]{2,4}$/)) { 
       dict["MR_POC_E"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Email\n"; 
      } 
      break; 
     case "tel": 
      if (value == value.match('^[0-9()+/-]{10,}$')) { 
       dict["MR_POC_P"] = value; 
      break; 
      } 
      else { 
      isValid = false; 
      errors += "Please enter a valid Phone Number\n"; 
      } 
      break; 
     } 
    }) 

    if (isValid) { 
     console.log(dict); 
     //$this.val('Save'); 
     //tds.prop('contenteditable', false); 
     var request = $.ajax({ 
      type: "POST", 
      url: "update.php", 
      data: dict 
     }); 

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

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

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

     }); 
    } else { 
     alert(errors); 
    } 
    } 
}); 

update.phpを:

<?php 

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

    $host="xxxxxxx"; 
    $dbName="xxxxxxxxx"; 
    $dbUser="xxxx"; 
    $dbPass="xxxxxxxx"; 

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

    $sql = "UPDATE Stage_Rebate_Master SET MR_POC_N = :MR_POC_N, MR_POC_E = :MR_POC_E, MR_POC_P = :MR_POC_P WHERE MR_Name = :MR_Name"; 

    $stmt = $pdo->prepare($sql); 
    $stmt->bindValue(':MR_Name', $MR_Name); 
    $stmt->bindValue(':MR_POC_N', $MR_POC_N); 
    $stmt->bindValue(':MR_POC_E', $MR_POC_E); 
    $stmt->bindValue(':MR_POC_P', $MR_POC_P); 
    $result = $stmt->execute(); 
    echo json_encode($result); 

?> 

答えて

0

私は更新フォームを作るためにこれらのすべてを行う必要はないと思います。これを処理する最善の方法は、特別IDに基づいてDBから選択クエリを作成し、そのIDからすべてのデータを取得し、そのデータでフォーム値を入力することです。

その後、データベースのデータがいっぱいになっています。ページの最後に送信ボタンを押します(1つだけ)。希望する各フィールドを編集し、[更新]をクリックします。

変更された形式のすべてのフィールドの更新クエリを作成します。値が更新されない場合は更新されますが、以前の値またはフォームの空の値で更新されます。

0

私はちょうど非常によく似たフォームを作成しました。ページの上部に1つの送信ボタンがあります。 送信時:各行について、データベースと入力ボックス(ユーザーが変更可能)との間に変更があるかどうかを確認します。 これらが異なる場合は、その行に対して更新テーブルクエリを使用します。それはかなりシンプルで、とてもうまく動作します。ここで

は、PHPの例です:

if (isset($_POST['submit']) and !empty($_POST['submit'])){ 
    $column_1 = $_POST['Col1']; 
    $column_2 = $_POST['Col2']; 
    foreach ($_POST['KeyColumn'] as $key => $variable){ 
     $select = "SELECT * FROM tblTable WHERE KeyColumn='".$variable."'"; 
     $result = $conn->query($select); 
     if ($result->num_rows>0){ 
      while ($row=$result->fetchassoc()){ 
       $same = true; 
       if (($row['Col1'] != $Col1[$key]) or ($row['Col2'] != $Col2[$key])){ 
        $same = false; 
       } 
       if (!$same){ 
        /* update sql on this line */ 
       } 
      } 
     } 
    } 
} 

注:私は、スプレッドシートではない一つの形を持っているので、私は多くのループを使用していました。しかし、それはループなしで同じように動作しますが、はるかに単純です

関連する問題