首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >使用PHP (codeigniter)获取我添加的列中的所有值

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

Stack Overflow用户
提问于 2018-06-26 02:07:33
回答 1查看 93关注 0票数 0

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

问:如何检索所有的post值?

注意:我尝试回显json_encode($_POST);我只得到了1个值。

视图

代码语言:javascript
复制
 <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

创建新的列函数

代码语言:javascript
复制
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();
      })
    })
EN

回答 1

Stack Overflow用户

发布于 2018-06-26 03:29:52

在您的代码中,我看到已经有一个name=为“field_name”的输入,并且在addColumn()函数中还添加了另一个同名的输入。

当表单中有一个名为"field_name“的输入,然后再次动态添加另一个同名的输入时,它们会相互替换,并且在post数据中只有一个同名的值。

您可以在这里使用数组输入,例如

代码语言:javascript
复制
<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数组:

代码语言:javascript
复制
Array
(
    [field_name] => Array
        (
            [0] => fv1
            [1] => fv2
            ....
        )
    [field_type] => Array
        (
            [0] => ftv1
            [1] => ftv12
            ...
        )
)

因此,对于解析:

代码语言:javascript
复制
$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将有相同数量的元素数组,如果缺少一个元素之间的并行串行将被破坏)。

最好对字段使用计数器。例如:

代码语言:javascript
复制
<input name="no_of_fields" value="1"/>

它的值在每次加法时都会增加。

你的表单是这样的:

代码语言:javascript
复制
<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" .../>
...

对于服务器端的解析,您可以使用以下命令:

代码语言:javascript
复制
$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;
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/51029498

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档