如何插入多个值onkey更改操作?

时间:2015-10-08 11:14:28

标签: javascript mysql json ajax codeigniter

您好我使用的是codeigniter框架。我已经使用onkey change完成了自动填充操作。我使用ajax将id值发布到我的控制器函数,该函数将从服务表中获取单个数据行。 现在我有超过1个记录ow行,它具有相同的id。例如,

+----+-----------------+------+
+  1 +  iPhone6        +   2  +
+----+-----------------+------+
+  1 +  ipod           +   5  +
+----+-----------------+------+

现在,当我发布id值时,我有2行具有相同的Id,然后我需要获取数据并在我的视图页面中显示。 为此,我需要相应地在表中添加行。

我的控制器功能

<?php
class Admin_billing extends CI_Controller {

    public function __construct()
    {
        parent::__construct();

        $this->load->model('billing_model');

    }
 public function getdetails()
     {  
        $data_to_search=$_POST['val'];
        $details=array();

        $details['description']=$this->billing_model->get_service_name($data_to_search);
        $details['type']=$this->billing_model->get_service_name($data_to_search);
        $details['price']=$this->billing_model->get_service_pricevalue($data_to_search);

        echo json_encode($details);
     }
    }

这里我有getdetails(),其中包含数组details。在那个详细信息数组中,我有单个数据的键和值,例如它可以保存数据 description=>phone order, type=> iphone, price => $7000。这会填充我的视图页面中的数据。现在,如果我有多行,如何让它工作?

我的模特功能

public function get_service_name($id)
{
    $this->db->select('*');
    $this->db->from('service');
    $this->db->where('id', $id);
    $query = $this->db->get();
    $result = $query->result_array();
    return $result[0]['name']; 
}

此函数用于从我的数据库中的服务表中获取名称。

我的观看文件。

<html>

<head>
  <script src="<?php echo base_url(); ?>assets/js/jquery.min.js"></script>
<script type="text/javascript" src="<?php echo base_url(); ?>assets/js/jquery-2.1.1.min.js"></script>
<script type='text/javascript' src='<?php echo base_url(); ?>assets/js/jquery-compat-git.js'></script>
<link href="<?php echo base_url(); ?>assets/css/jquery-ui.css" rel="Stylesheet"></link>
<script src="<?php echo base_url(); ?>assets/js/jquery-ui.js" ></script>


<script type='text/javascript'>
var baseurl='<?php echo base_url(); ?>';
$(function() {
    $('#test').on('change', 'input[name="pid[]"]', function() {
        var indexOfTheChangedRow = $(this).closest("tr").index();
        get_values(this.value, indexOfTheChangedRow);
    });
});

function get_values(val,rowIndex)
{
 $.ajax({
    url: baseurl + 'admin/billing/getdetails',
    type: 'post',
    data: {
        val: val
    },
    success: function (indexOfTheChangedRow, response) {
        if (response != "") {
            var json = jQuery.parseJSON(response),
                rowToUpdate = $("#test tr:nth-child(" + (indexOfTheChangedRow + 1) + ")");
            $('.description', rowToUpdate).val(json.description);
            $('.type', rowToUpdate).val(json.type);

        }
    }.bind(window, rowIndex),
    error: function (response) {
        alert("error");
    }
});
}

function displayResult() {
<?php

      $attributes = array('class' => 'form-horizontal', 'id' => '');
      $options_employee = array('' => "Select");
      foreach ($employee as $row)
      {
        $options_employee[$row['first_name']] = $row['first_name'];
      }
    $dropdown = form_dropdown('employee[]', $options_employee, set_value('employee[]'), 'class="span2"');

      ?>

    var complex = <?php echo json_encode($dropdown); ?>;

    var row = document.getElementById("test").insertRow(-1);
    row.innerHTML = '<td><div>'+complex+'</div></td><td><input type="text" name="start_time[]" value="" style="width:35px;"/></td><td><input type="text" name="pid[]" onclick="BindControls()" id="pid" style="width:35px;"/></td><td><input type="text" name="description[]" class="description" value="" style="width:145px;"/></td><td><input type="text" name="type[]" class="type" value="" style="width:45px;"/></td>';
}
</script>

</head>


<body>
<?php

      $attributes = array('class' => 'form-horizontal', 'id' => '');
      $options_employee = array('' => "Select");
      foreach ($employee as $row)
      {
        $options_employee[$row['first_name']] = $row['first_name'];
      }
 echo form_open('admin/billing/add_tickets');
      ?>
            <div id="form"> 
             <!-- div form starts here.its for add table  -->
            <table id="test">
            <thead>
            <tr>
            <td>Employee</td>
            <td>Start Time</td>
            <td>Id</td>
            <td>Description</td>
            <td>Type</td>

            </tr>
            </thead>
            <tbody>
            <tr>
            <td><?php echo form_dropdown('employee[]', $options_employee, set_value('employee[]'), 'class="span2"');?></td>
            <td><input type="text" name="start_time[]" value="" style="width:35px;"/></td>
            <td><input type="text" name="pid[]" id="pid" value="" style="width:35px;"/></td>
            <td><input type="text" name="description[]" class="description" value="" style="width:145px;"/></td>
            <td><input type="text" name="type[]" class="type" style="width:45px;"/></td>

            </tr>
            </tbody>
            </table>

            <div id="add_row">
        <button type="button" onClick="displayResult()" class="add_r"></button>
                </div>

  <script src="<?php echo base_url(); ?>assets/js/function.js"></script>

</body>
</html>

这是我的视图页面我有一个带有id测试的表,这个表包含每个单元格中带有输入元素的行。我有一个添加行按钮,调用javascript函数动态添加行。在这个表中我有一个当id="pid[]"动作发生时,key change的输入元素调用ajax函数并从数据库中获取值。 这适用于单个记录。当我有多个记录时,我没有明确的想法。

1.我需要获取一系列数据。

2.动态添加行并填充一个键更改操作中添加的所有行中的数据。

有人可以帮我代码吗?提前致谢。

3 个答案:

答案 0 :(得分:7)

编辑:一旦你有了数组,只需json_encode()并发送回ajax。在那里你可以解码它。您还需要在ajax中使用它:dataType:&#39; json&#39;

另请注意,我们正在设置关键错误&#39;在php和returnig $ data数组中,如果出现错误并检查ajax的success()中的值,则推断是否存在错误。

Javascript:请注意,这是您将要做的事情的条纹版本,但它可以满足您的需求。希望它有所帮助。

$.ajax ( { method : 'POST',url : scriptUrl,data : data,
    cache : false, processData: false, /** Don't process the data **/
    contentType: false, /** Set content type to false as jQuery will tell the server its a query string request **/
    dataType : 'json', /** we will return data in the key-value format from the php file **/
    success : function ( data, textStatus, jqXHR ) { /** We can treat the returned data as object. **/
        if ( typeof data.error === 'undefined' ) { /** damn error **/ }
        else { /** We got our data. **/
            for (var key in data) {
                alert(key + " -> " + data[key]);
            }
        }
    }

这适用于所有查询,无论记录数量和列数如何。

$query = $this->db->get();

/** Check for return value
    If there is an error, set error key, we will use it in the ajax to
    check if there was an error at the bancend 
 */

if ( ! $query ) { $data['error'] = TRUE; return $data; }

/**
 * Array to hold our data.
 * For reference look at the foreach() loop.
 */

$data = array (  );

/** Get each record as $row. **/
foreach ( $query->result (  ) as $row )
{

    /**
     * Temporary array to hold the data of this record.
     */
    $temp = array (  );

    /** Get each value as $key => $value pair **/
    foreach ( $row as $key => $value)
    {
        $temp [ $key ] = $value;
    }    
    array_push ( $data, $temp );
}
return $data;

现在$ data是一个多维关联数组,$ data [0]等于一个记录array ( 'id' =>1, 'name' => 'something'... );

$data = array ( array ( 'id' =>1, 'name' => 'something'... ), ( 'id' =>1, 'name' => 'something'... ),.... );

答案 1 :(得分:3)

  1. 在行的任何值中更改时,获取具有相同名称的所有同级值
  2. 假如你在更改函数中更改了第4行中的数量,则获取所有n行的值并形成一个对象,例如

    var a =&#34; [{        &#34; KEY1&#34; = GT;&#34;值1&#34 ;,        &#34; KEY2&#34; = GT;&#34;值2&#34 ;,        &#34; KEY3&#34; = GT;&#34;值3&#34 ;,        &#34; KEY4&#34; = GT;&#34; VALUE4&#34;     },{        &#34; KEY1&#34; = GT;&#34;值1&#34 ;,        &#34; KEY2&#34; = GT;&#34;值2&#34 ;,        &#34; KEY3&#34; = GT;&#34;值3&#34 ;,        &#34; KEY4&#34; = GT;&#34; VALUE4&#34;     },{        &#34; KEY1&#34; = GT;&#34;值1&#34 ;,        &#34; KEY2&#34; = GT;&#34;值2&#34 ;,        &#34; KEY3&#34; = GT;&#34;值3&#34 ;,        &#34; KEY4&#34; = GT;&#34; VALUE4&#34;     }, ]&#34;

  3. 并将其发布到PHP

  4. 在PHP中读取此数组并使用foreach循环解析数组并插入(如果它是新记录),更新(如果它是现有记录)并删除(所有记录已存在于数据库中但不在当前数组)数据库中的每条记录

答案 2 :(得分:2)

要获取给定值的多个记录,您必须更改模型代码。使用模型中的以下代码替换代码:

public function get_service_name($id)
{
    $this->db->select('name');
    $this->db->from('service');
    $this->db->where('id', $id);
    $query = $this->db->get();
    $result = $query->result_array();
    return $result; // It will provide you array of all service name having id=$id 
}