Значения из массива текстового поля не обновляются - PullRequest
0 голосов
/ 28 февраля 2019

Я новичок в этом форуме, и мне трудно обновлять выбранное значение из флажка, исходя из значения текстового поля.

Сценарий:

Я хочу обновить выбранные элементы. Например, я хочу обновить Элемент-2, и текстовое поле из полученного элемента будет включено, я введу число для примера 1 итекстовое поле из общего числа получателей будет автоматически суммироваться с использованием ajax.

Проблема заключается в том, что после отправки значения из общего числа получаемые записи не обновляются, но когда я пытаюсь проверить и распечатать_r, значение есть.

И еще одна вещь, если отмечены все флажки и введен номер для каждого полученного элемента, значение, которое он только получит, является последним значением и будет обновлено, будут все выбранные флажки.

Примечание.флажок - это массив. Текстовое поле из общего числа - это массив.

Ребята, пожалуйста, помогите мне?

Вот мой пользовательский интерфейс:

enter image description here

Контроллер:

public function recitem_insert(){

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

$check = $this->input->post('check');    
$total_rec = $_POST['total_rec'];


if(isset($check)){ //Check if check is checked    

  for($i=0;$i<sizeof($check);$i++){
    for($j=0;$j<sizeof($total_rec);$j++){    

    $updateData = array('rec_qty' => $total_rec[$j] );                                                        
    $this->dbquery->modUpdatedynamicval('tblstock', 'id', $updateData, $check[$i]);

       }        
   }//end for loop    

    echo "<script type='text/javascript'>
        alert('Successfully Added!');
        window.close();
        </script>";        

}else{ //End If
      echo 'Please select a checkbox';
    }

}

Вид:

<form method="post" action="<?php echo base_url() ?>user/recitem_insert">

<div class="box">
<div class="box-header">
<h3 class="box-title">System ID: <b><?php echo $process_id; ?></b></h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Action</th>
<th>Item Code</th>
<th>Item Description</th>
<th>Required QTY Order</th>
<th>Last QTY Recieve</th>
<th>Item Recieve</th>
<th>Total Recieve</th>



</tr>
</thead>
<tbody>

<?php                   

$query = $this->db->query("SELECT * FROM tblstock where process_id = '$process_id'");
foreach ($query->result() as $row){                                       
?>  

<tr>
<td><input type="checkbox" name="check[]" id="opt" value="<?php echo $row->id; ?>" onclick="valueChanged()"> </td>
<td><?php echo $row->item_code; ?></td>
<td><?php echo $row->description; ?></td>
<td><?php echo $row->qty_order; ?></td>
<td><?php echo $row->rec_qty; ?></td>

<input type="hidden" name="last_item_rec[]"  value="<?php echo $row->rec_qty;  ?>">

<td><input type="text" name="item_rec[]"  id="txt" disabled=""></td>  
<td><input type="text" name="total_rec[]"></td>  


</tr>

<?php 

}
?>  

</tbody>
<tfoot>

</tfoot>
</table>
</div>
<!-- /.box-body -->
</div>

<div class="box-footer">
<button type="submit" class="btn bg-olive btn-flat margin">Submit</button>
</div>

</form>

Модель:

public function modUpdatedynamicval($table, $column, $data, $equal_to){

$this->db->where($column, $equal_to);
$this->db->update($table, $data);         

}

Любая помощь будет с благодарностью.

Спасибо ...

РЕДАКТИРОВАТЬ:

Предположим, я ввел 1 в один текстовое поле item_receive, и общий объем будет 10, 2 в текстовом поле item_receiveдва, и общее количество будет равно 11, 3 в текстовом поле item_receive три, а общее количество будет равно 12,

enter image description here

CODE:

$check = $this->input->post('check');   
$total_rec = $_POST['total_rec'];

echo 'Check Value';
print_r($check);

echo '<br><br>';

echo 'Total Recieve';
print_r($total_rec);

ВЫХОД:

Check ValueArray ( [0] => 1 [1] => 2 [2] => 3 ) 

Total RecieveArray ( [0] => 10 [1] => 11 [2] => 12 )

Но если я только во втором текстовом поле вот вывод:

Check ValueArray ( [0] => 2 ) 

Total RecieveArray ( [0] => [1] => 11 [2] => )

Ответы [ 4 ]

0 голосов
/ 06 марта 2019

Все ваши флажки имеют одинаковый идентификатор, что всегда приводит к проблемам.Изменить идентификатор флажка в цикле.

<td><input type="checkbox" name="check[]" id="opt-<?php echo $row->id; ?>" value="<?php echo $row->id; ?>" onclick="valueChanged()"> </td>
0 голосов
/ 28 февраля 2019

Можно попробовать с ключом строки (идентификатор элемента).Обновите ключ массива с помощью $ row-> id.

<tbody>
    <?php
        $query = $this->db->query("SELECT * FROM tblstock where process_id = '$process_id'");
        foreach ($query->result() as $row){                                       
    ?>  
    <tr>
        <td><input type="checkbox" name="check[]" id="opt" value="<?php echo $row->id; ?>" onclick="valueChanged()"> </td>
        <td><?php echo $row->item_code; ?></td>
        <td><?php echo $row->description; ?></td>
        <td><?php echo $row->qty_order; ?></td>
        <td><?php echo $row->rec_qty; ?></td>
        <input type="hidden" name="last_item_rec[<?php echo $row->id; ?>]"  value="<?php echo $row->rec_qty;  ?>">
        <td><input type="text" name="item_rec[<?php echo $row->id; ?>]"  id="txt" disabled=""></td>  
        <td><input type="text" name="total_rec[<?php echo $row->id; ?>]"></td> 
    </tr>
    <?php
        }
    ?>  
</tbody>

Scenraio Like:

  • 1 item Id "2"
  • 2 item Id "3"
  • 3 item Id "5"

Если вы проверили первую строку и первую строку item_id ($ row-> id) и введете 7, вы получите массив, например:-

print_r($_POST['total_rec']);

Output Like:

Array([2]=>7)

Вы можете легко найти данные, используя ключ массива

Обновление:

<form method="post" action="<?php echo base_url(); ?>">
    <div class="box">
        <div class="box-header">
            <h3 class="box-title">
                System ID:  <b>  <?php echo '12'; ?></b>
            </h3>
        </div>
        <!-- /.box-header -->
        <div class="box-body">
            <table id="example1" class="table table-bordered table-striped">
                <thead>
                    <tr>
                        <th> Action</th>
                        <th>Item Code </th>
                        <th>Item Description</th>
                        <th>Required QTY Order</th>
                        <th>Last QTY Recieve</th>
                        <th>Item Recieve</th>
                        <th>Total Recieve</th>
                    </tr>
                </thead>
                <tbody>
                  <?php                   
                    //$query = $this->db->query("SELECT * FROM tblstock where process_id = '$process_id'");
                    $new_item_list =  array(
                        array('id'=> '1','item_code'=> 'ITEM-1','description' => 'ITEM Desc', 'qty_order'=> '2','rec_qty'=> '2'),
                        array('id'=> '2','item_code'=> 'ITEM-2','description' => 'ITEM Desc 2', 'qty_order'=> '3','rec_qty'=> '3' ),
                        array('id'=> '3','item_code'=> 'ITEM-3','description' => 'ITEM Desc', 'qty_order'=> '5','rec_qty'=> '4' ),
                        array('id'=> '4','item_code'=> 'ITEM-4','description' => 'ITEM Desc', 'qty_order'=> '1','rec_qty'=> '3' )
                    );
                  foreach ($new_item_list as $row){ 
                    ?>  
                    <tr>
                        <td><input type="checkbox" name="<?php echo $row['id']; ?>[check]" id="opt" value="<?php echo $row['id']; ?>" onclick="valueChanged()"> </td>
                        <td><?php echo $row['item_code']; ?></td>
                        <td><?php echo $row['description']; ?></td>
                        <td><?php echo $row['qty_order']; ?></td>
                        <td><?php echo $row['rec_qty']; ?></td>
                        <input type="hidden" name="<?php echo $row['id']; ?>[last_item_rec]"  value="<?php echo $row['rec_qty'];  ?>">
                        <td><input type="text" name="<?php echo $row['id']; ?>[item_rec]"  id="txt" value='' ></td>
                        <td><input type="text" name="<?php echo $row['id']; ?>[total_rec]" value=''>
                        </td>
                    </tr>
                    <?php 
                  }
                    ?>  
                </tbody>
                <tfoot>
                </tfoot>
            </table>
        </div>
        <!-- /.box-body -->
    </div>
    <div class="box-footer">
        <button type="submit" class="btn bg-olive btn-flat margin">Submit</button>
    </div>
</form>

Отправить действие : Например,

foreach($_POST as $key => $value){
    if(isset($value['check'])){
        //Row ID of item table $key
       $total = $value['total_rec'] * $value['item_rec'];
        echo "Total Number :".$total."</br>";
       #here is your update query 
    }    
}

Ссылка: - https://prnt.sc/mswdoc Если проверить чековую книжку и отправить с нее, вы получите вывод, например: Вывод: - https://prnt.sc/mswefv

0 голосов
/ 04 марта 2019

Судя по тому, что я вижу, как и все остальные, у вас проблемы с поиском правильных строк проверенного элемента.Я предлагаю вам изменить способ, которым вы называете форму в многомерном массиве.Держу пари, что вы этого не знали?

, поэтому в view.php

<form method="post" action="<?php echo base_url() ?>user/recitem_insert">

<div class="box">
<div class="box-header">
<h3 class="box-title">System ID: <b><?php echo $process_id; ?></b></h3>
</div>
<!-- /.box-header -->
<div class="box-body">
<table id="example1" class="table table-bordered table-striped">
<thead>
<tr>
<th>Action</th>
<th>Item Code</th>
<th>Item Description</th>
<th>Required QTY Order</th>
<th>Last QTY Recieve</th>
<th>Item Recieve</th>
<th>Total Recieve</th>



</tr>
</thead>
<tbody>

<?php                   

//WTF?? it's 2019. Say hello to SQL Injection
$query = $this->db->query("SELECT * FROM tblstock where process_id = '$process_id'");
foreach ($query->result() as $i=>$row){                                       
?>  

<tr>
<td><input type="checkbox" name="data[<?php echo $i;?>][check]" id="opt" value="<?php echo $row->id; ?>" onclick="valueChanged()"> </td>
<td><?php echo $row->item_code; ?></td>
<td><?php echo $row->description; ?></td>
<td><?php echo $row->qty_order; ?></td>
<td><?php echo $row->rec_qty; ?></td>

<input type="hidden" name="data[<?php echo $i;?>][last_item_rec]"  value="<?php echo $row->rec_qty;  ?>">

<td><input type="text" name="data[<?php echo $i;?>][item_rec]"  id="txt" disabled=""></td>  
<td><input type="text" name="data[<?php echo $i;?>][total_rec]"></td>  


</tr>

<?php 
}
?>  

</tbody>
<tfoot>

</tfoot>
</table>
</div>
<!-- /.box-body -->
</div>

<div class="box-footer">
<button type="submit" class="btn bg-olive btn-flat margin">Submit</button>
</div>

</form>

и вы можете легко циклически просматривать данные для каждой строки, одновременно проверяя, установлен ли флажок

 <?php
//simple way of traversing the data
if ( isset( $_POST['data'] ) )
{
    echo '<table>';
    foreach ( $_POST['data'] as $d )
    {
        //you have all the data here
        //start checking on checked box
        if(isset($d['check']))
        {
            echo '<tr>';
            echo '  <td>', $d['last_item_rec'], '</td>';
            echo '  <td>', $d['item_rec'], '</td>';
            echo '  <td>', $d['total_rec'], '</td>';
            echo '</tr>';
        }
    }
    echo '</table>';
}
0 голосов
/ 28 февраля 2019

Исходя из того, что я вижу, у вас есть проблема, чтобы определить, какой входной индекс какой на заднем конце.Вы можете установить индексную клавишу для каждого ввода следующим образом:

<tbody>

<?php                   

$query = $this->db->query("SELECT * FROM tblstock where process_id = '$process_id'");
foreach ($query->result() as $key => $row){           //added key to be used as inputs key                             
?>  

<tr>
<td><input type="checkbox" name="check[<?php echo $key ?>]" id="opt" value="<?php echo $row->id; ?>" onclick="valueChanged()"> </td>
<td><?php echo $row->item_code; ?></td>
<td><?php echo $row->description; ?></td>
<td><?php echo $row->qty_order; ?></td>
<td><?php echo $row->rec_qty; ?></td>

<input type="hidden" name="last_item_rec[<?php echo $key ?>]"  value="<?php echo $row->rec_qty;  ?>">

<td><input type="text" name="item_rec[<?php echo $key ?>]"  id="txt" disabled=""></td>  
<td><input type="text" name="total_rec[<?php echo $key ?>]"></td>  


</tr>

<?php 

}
?>  

</tbody>

После этого, затем заменить цикл for:

for($i=0;$i<sizeof($check);$i++){
    for($j=0;$j<sizeof($total_rec);$j++){    

    $updateData = array('rec_qty' => $total_rec[$j] );                                                        
    $this->dbquery->modUpdatedynamicval('tblstock', 'id', $updateData, $check[$i]);

    }        
}//end for loop    

На этот foreach:

foreach ($check as $key => $item) {
    $updateData = array('rec_qty' => $total_rec[$key] );                                                        
    $this->dbquery->modUpdatedynamicval('tblstock', 'id', $updateData, $check[$key]);
}

Таким образом, вы не проверяете вручную значение total_rec, а вместо этого проверяет только отправленные данные check.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...