Получить все значения в моем добавленном столбце, используя PHP (codeigniter) - PullRequest
0 голосов
/ 25 июня 2018

Я изучаю dbforge и пытаюсь применить его на своем сайте.Моя база или руководство - это localhost / phpmyadmin, где вы создадите новую таблицу, я закончил с частью имени таблицы, имени, типа, атрибута, длины столбца, а также с добавлением столбца (см. Рисунок ниже) image.

Вопрос: Как я могу получить все значения сообщения?

Примечание. Я попытался повторить код 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 голосов
/ 25 июня 2018

В вашем коде, я вижу, у вас уже есть вход с именем = "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;
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...