使用PHP(codeigniter)获取我添加的列中的所有值

时间:2018-06-25 18:07:33

标签: javascript php codeigniter

我正在研究dbforge,并尝试在我的网站上应用它。我的基础或指南是localhost / phpmyadmin,您将在其中创建一个新表,表名,名称,类型,属性,列的长度以及添加列的部分都由我完成(请参见下图){ {3}}。

问题:如何获取所有帖子值?

注意:我试图回显json_encode($ _ POST);我只得到1个值。

查看

 <form id="new-table">
   <div class="col-md-6">
    <label>Table Name:</label>
    <input type="hidden" name="type" value="new_table">
    <input type="text" class="form-control border-input" name="table_name" id="table_name"><br>
    <div class="text-danger" id="table_name_error"></div>
</div>
<!-- col-md-6 -->
<div class="col-md-3">
    <label>Columns:</label>
    <!-- <input type="text" class="form-control border-input"  name="table_name" id="table_name"> -->
    <input type="text"  class="form-control border-input" id="number_of_column" >
</div>

<div class="col-md-3">
    <br>    
    <button type="button" class="btn btn-info btn-fill btn-wd" onclick="addColumn()">Add</button>
</div>
<!-- col-md-3 -->
</div>  <!-- row-->
<!-- <input type='button' value='Add Children' id='addButton' class="btn btn-sm btn-primary"> -->
<div class="row">
    <div class="col-md-2">
        <h6>Name</h6>
        <input type="text" class="form-control border-input" name="field_name" id="field_name">
        <div class="text-danger" id="field_name_error"></div>
    </div>
    <div class="col-md-2">
        <h6>Type</h6>
        <select class="form-control border-input" name="field_type" id="field_type">
            <option value="volvo">Varchar</option>
            <option value="saab">Int</option>
            <option value="mercedes">Date</option>
            <option value="audi">Text</option>
        </select>
    </div> 
    <div class="col-md-2">
        <h6>Length/Value</h6>
        <input type="text" class="form-control border-input" name="field_length" id="field_length">
        <div class="text-danger" id="field_length_error"></div>
    </div> 
    <div class="col-md-2">
        <h6>Default</h6>
        <input type="text" class="form-control border-input" name="field_default" id="field_default">
        <div class="text-danger" id="field_default_error"></div>
    </div>
    <div class="col-md-2">
        <h6>Attributes</h6>
        <input type="text" class="form-control border-input" name="field_attributes" id="field_attributes">
        <div class="text-danger" id="field_attributes_error"></div>
    </div> 
    <div class="col-md-2">
        <h6>Null</h6>
        <input type="text" class="form-control border-input" name="field_null" value="null"><br>
        <div class="text-danger" id="field_null_error"></div>
    </div>

    <div id="append">
        <div id="TextBoxDiv1">

        </div>
    </div>
</div>  <!-- row -->

<div class="text-right">
    <button type="submit" class="btn btn-info btn-fill btn-wd">Update Profile</button>
</div>
</div>

<div class="clearfix"></div>
</form>

控制器

JS

我正在创建新列功能

function addColumn() 
{
  var i = 0;
  var columns = document.getElementById("number_of_column").value;
  for(i=1;i<=columns;i++)
  {
  var newTextBoxDiv = $(document.createElement('div')).attr("id", 'TextBoxDiv' );

  newTextBoxDiv.after().html('<div class="col-md-2">'+
  '<label>Name</label>'+
  '<input type="text" class="form-control border-input" name="field_name[]" id="field_name[]">'+
  '<div class="text-danger" id="children_fname_error"></div>'+
  '</div>'+
  '<div class="col-md-2">'+
  '<h6>Type</h6>'+
  '<select class="form-control border-input" name="field_type[]" id="field_type[]">'+
  '<option value="volvo">Varchar</option>'+
  '<option value="saab">Int</option>'+
  '<option value="mercedes">Date</option>'+
  '<option value="audi">Text</option>'+
  '</select>'+
  '</div>'+
  '<div class="col-md-2">'+
  '<h6>Length/Value</h6>'+
  '<input type="text" class="form-control border-input" name="field_length[]" id="field_length[]">'+
  '<div class="text-danger" id="field_length_error"></div>'+
  '</div>'+
  '<div class="col-md-2">'+
  '<h6>Default</h6>'+
  '<input type="text" class="form-control border-input" name="field_default" id="field_default">'+
  '<div class="text-danger" id="field_default_error"></div>'+
  '</div>'+
  '<div class="col-md-2">'+
  '<h6>Attributes</h6>'+
  '<input type="text" class="form-control border-input" name="field_attributes" id="field_attributes">'+
  '<div class="text-danger" id="field_attributes_error"></div>'+
  '</div>'+
  '<div class="col-md-2">'+
  '<h6>Null</h6>'+
  '<input type="text" class="form-control border-input" name="field_null" id="field_null"><br>'+
  '<div class="text-danger" id="field_null_error"></div>'+
  '</div>'


  ); 


  newTextBoxDiv.appendTo("#append");
}
document.getElementById("number_of_column").value = "";
}


    ** My submit form**



 $(document).ready(function(){
      $("#new-table").on('submit',function(e){
        $.ajax({
          url: base_url+"formsubmit/new_form_submit",
          type: "POST",
          data: $(this).serialize(),
          success:function(data)
          {
            var result = JSON.parse(data);

            if(result === "success")
            {
              $("h5").html("");
              success_message("#success-message-edit-content-1","Update Successfully!");
              window.setTimeout(function(){location.href=base_url+"administrator/view_content"},2000);
            }
            else{
              $("#table_name_error").html(result.table_name_error);
              $("#field_name_error").html(result.field_name_error);
              $("#field_type_error").html(result.field_type_error);
              $("#field_length_error").html(result.field_length_error);
            }
          },
          error: function(data) {
            alert('error');
          }
        })
        e.preventDefault();
      })
    })

1 个答案:

答案 0 :(得分:0)

在您的代码中,我看到您已经有一个名为name =“ field_name”的输入,并且在addColumn()中 功能,您还要添加另一个具有相同名称的输入。

当您在表单中输入一个名为“ field_name”的输入,然后再次动态地再次添加具有相同名称的另一输入时,它们将彼此替换,并且它们的值中只有一个具有相同的名称

您可以在此处使用数组输入,例如

<input name="field_name[]" ... />
<input name="field_type[]" ... />
...
<input name="field_name[]" ... />
<input name="field_type[]" ... />
...
<input name="field_name[]" ... />
<input name="field_type[]" ... />
...

您将获得Post数组,如下所示:

Array
(
    [field_name] => Array
        (
            [0] => fv1
            [1] => fv2
            ....
        )
    [field_type] => Array
        (
            [0] => ftv1
            [1] => ftv12
            ...
        )
)

所以要解析:

$fields_array = array();
$no_of_fields = isset($_POST['field_name'])? count($_POST['field_name']) : 0;
for ($i=1; $i<=$no_of_fields; $i++) {
  $tmp = array();
  if (isset($_POST['field_name'][$i])) $tmp[] = $_POST['field_name'][$i];
  if (isset($_POST['field_type'][$i])) $tmp[] = $_POST['field_type'][$i];
  ...
  if (!empty($tmp)) $fields_array[] = array();
}

这有点容易出错(假设field_name,field_type将具有相同数量的元素的数组,如果缺少其中的并行序列将被破坏)方法。

最好将计数器用于字段。 例如:

<input name="no_of_fields" value="1"/>

每次添加都会增加它的价值。

您的表格如下:

<input name="field_name_1" .../>
<input name="field_type_1" .../>
...
<input name="field_name_2" .../>
<input name="field_type_2" .../>
...
<input name="field_name_3" .../>
<input name="field_type_3" .../>
...

要在服务器端进行解析,可以进行以下操作:

$fields_array = array();
$no_of_fields = isset($_POST['no_of_fields'])? intval($no_of_fields) : 0;
if ($no_of_fields > 0) {
  for ($i=1; $i<=$no_of_fields; $i++) {
    $tmp = array();
    if (isset($_POST['field_name_'.$i])) $tmp[] = $_POST['field_name_'.$i];
    if (isset($_POST['field_type_'.$i])) $tmp[] = $_POST['field_type_'.$i];
    ...
    if (!empty($tmp)) $fields_array[] = array();
  }
}
// Now process/output the $fields_array;