我无法保存特定的所选值。它保存了数据库中的所有数据

时间:2019-04-12 13:37:57

标签: javascript php jquery ajax

我正在插入多个数据。当我从下拉列表中选择一个项目时,会发生什么。它保存所有选择的数据。请先检查下面的图片

    function sample($con){
  $select = "SELECT * FROM project_tbl";
  $select_result = mysqli_query($con,$select);
    if (mysqli_num_rows($select_result)> 0) {
      while ($row = mysqli_fetch_assoc($select_result)) {
        echo "<option value=".$row['project_name'].">" .$row['project_name']."</option>";
      }
    }
  }

* html代码(我使用下拉列表填充数据库中的数据)

<td class="pro">
  <select class="pro">
  <option value=""><?php sample($con); ?></option>
  </select>   
</td>

* ajax代码(添加,保存和删除)

$(document).ready(function(){
 var count = 1;
 $('#add').click(function(){
  count = count + 1;
  var html_code = "<tr id='row"+count+"'>";
  html_code += "<td class='pro'><select class='pro'><option value=''><?php sample($con); ?></option></select></td>";
  html_code += "<td contenteditable='true' class='desc'></td>";
  html_code += "<td contenteditable='true' class='comp'></td>";
  html_code += "<td contenteditable='true' class='entry'></td>";
  html_code += "<td contenteditable='true' class='remarks'></td>";
  html_code += "<td><button type='button' name='remove' data-row='row"+count+"' class='btn btn-outline-danger btn-xs remove' title='remove'><i class='fa fa-times' aria-hidden='true'></i></button></td>";
  html_code += "</tr>";  
  $('#crud_table').append(html_code);
 });

  $(document).on('click', '.remove', function(){
  var delete_row = $(this).data("row");
  $('#' + delete_row).remove();
 });

  $('#save').click(function(){
    var desc = [];
    var pro = [];
    var comp = [];
    var entry = [];
    var remarks = [];

    $('.desc').each(function(){
    desc.push($(this).text());
    });
    $('.pro').each(function(){
    pro.push($(this).text());
    });
    $('.comp').each(function(){
    comp.push($(this).text());
    });
    $('.entry').each(function(){
    entry.push($(this).text());
    });
    $('.remarks').each(function(){
    remarks.push($(this).text());
    });
    $.ajax({
      url:"insert_inspection.php",
      method:"POST",
      data:{desc:desc, pro:pro, comp:comp, entry:entry, remarks:remarks},
      success:function(data){
        alert(data);
        $("td[contentEditable='true']").text("");
        $('select').prop('selectedIndex',0);
        for(var i=2; i<= count; i++){
          $('tr#'+i+'').remove();
        }
      }
    });
  });
});

这是我保存时发生的情况。

database

我是PHP新手。

insert_inspection.php

<?php
$con = mysqli_connect("localhost", "root", "", "pms");
if (isset($_POST["desc"])){
  $desc = $_POST["desc"];
  $pro = $_POST["pro"];
  $comp = $_POST["comp"];
  $entry = $_POST["entry"];
  $remarks = $_POST["remarks"];
  $query = '';

  for($count = 0; $count<count($desc); $count++){
    $desc_clean = mysqli_real_escape_string($con, $desc[$count]);
    $pro_clean = mysqli_real_escape_string($con, $pro[$count]);
    $comp_clean = mysqli_real_escape_string($con, $comp[$count]);
    $entry_clean = mysqli_real_escape_string($con, $entry[$count]);
    $remarks_clean = mysqli_real_escape_string($con, $remarks[$count]);

    if($desc_clean != '' && $pro_clean != '' && $comp_clean != '' && $entry_clean != '' && $remarks_clean != ''){
      $query .= 'INSERT INTO `inspection_tbl`(`description`, `project_name`, `completion`, `entry`, `remarks`) VALUES("'.$desc_clean.'", "'.$pro_clean.'", "'.$comp_clean.'", "'.$entry_clean.'", "'.$remarks_clean.'"); 
        ';
    }
  }
  if($query != ''){
    if(mysqli_multi_query($con, $query)){
      echo 'Item Data Inserted';
    }else{
      echo 'Error';
    }
  }else{
    echo 'All Fields are Required';
  }
}
?>

1 个答案:

答案 0 :(得分:0)

之所以这样保存,是因为您的选择元素只有一个选项值

从以下位置进行修改:

<td class="pro"> <select class="pro"> <option value=""><?php sample($con); ?></option> </select> </td>

收件人:

<td class="pro">
    <select class="pro">
        <option value=""></option>
        <?php sample($con); ?>
    </select> 
</td>

并修改您的选择元素处理程序以仅推送您选择的项目

类似这样的东西:

$('.pro').each(function(){ 
    if($(this).prop("selected")) { 
        pro.push($(this).text()); 
    }
});

或将此部分修改为类似的内容:

$(".pro > option:selected").each(function(){
    pro.push($(this).text());
});