首页 > 解决方案 > 如何通过 POST 从选择数据表的选项中获取价值

问题描述

$user_id我需要使用 Datatables获取选项值。

当用$user_id数字替换时''它工作正常,但我需要$user_id在列表选项中选择生成

非常感谢,如果我的英语不好,请见谅^^!

看法

    <?php
$v = "";
if ($this->input->post('date_range')) {
    $dr = explode(' - ', $this->input->post('date_range'));
    $v .= "&start_date=" . $dr[0];
    $v .= "&end_date=" . $dr[1];
}
?>


<div class="panel-body">
            <?php echo form_open("panel/reports/repairbyuser"); ?> 
<div class="form-group">
                    <?=lang('cuanhanvien', 'cuanhanvien');?>
                        <div class="input-group">
<div class="input-group-addon">
<i class="fa  fa-user"></i>
                            </div>
                                <select required id="user_id" name="user_id" class="form-control user_id"  style="width: 100%">
                                    <option value=""><?=lang('chonnhanvien'); ?></option>
<?php
                                        foreach($users as $user){
                                            echo '<option value="'.$user->id.'">'.$user->first_name . ' ' . $user->last_name .'</option>';
                                        }
                                    ?>
                                </select>
                        </div>
                </div>
<div class="form-group">
                    <?=lang('report_Status', 'report_Status');?>
                        <div class="input-group">
                            <div class="input-group-addon">
                                <i class="fas fa-money-bill-alt"></i>
                            </div>
                                <select required id="status" name="status" class="form-control status" style="width: 100%">
                                    <option value=""><?=lang('chontinhtrang'); ?></option>
<option value="1"><?=lang('delivered_user'); ?></option>
                                  <option value="2"><?=lang('inprogress_user'); ?></option>
                                </select>
</div>
</div>

<div class="form-group">
                    <?= lang('date_range', 'date_range'); ?>
                        <input class="form-control" type="text" name="date_range" class="date_range" id="date_range" value='<?= set_value('date_range'); ?>'>
                </div>
                <div class="form-group">
                    <div class="controls">
<?php echo form_submit('submit', $this->lang->line("submit_draw"), 'class="btn btn-primary"'); ?>
</div>
                </div>
                    <?php echo form_close(); ?>

控制器

   function repairbyuser()
    {

$this->mPageTitle = lang('user_report_detail');
        $this->render('reports/repairbyuser');
    }
    function getrepairbyuser($pdf = NULL, $xls = NULL)
    {
        if ($this->input->get('start_date')) {
            $start_date = date('Y-m-d', strtotime($this->input->get('start_date'))) . " 00:00:00";
        } else {
            $start_date = date('Y-m-d 00:00:00');
        }
        if ($this->input->get('end_date')) {
            $end_date = date('Y-m-d', strtotime($this->input->get('end_date'))) . " 23:59:59";
        } else {
            $end_date = date('Y-m-d 23:59:59');
        }


$user_id = $this->input->post('user_id');


$status= $this->input->post('status');


$this->load->library('datatables');
            $this->datatables
                ->select("date_opening, code, date_closing, name, CONCAT(reparation.category, ' ', reparation.model_name) as tenmay, defect, (grand_total-total) as tiendvsc")
                ->from('reparation');
if ($status == NULL) {
$this->datatables->where('reparation.date_opening BETWEEN "' . $start_date . '" and "' . $end_date . '"')
->where('assigned_to', '0');
} else if ($status == '1') {
$this->datatables->where('reparation.date_opening BETWEEN "' . $start_date . '" and "' . $end_date . '"')
->where('assigned_to', $user_id)
->where('date_closing is not null');

        } else if ($status == '2') {
$this->datatables->where('reparation.date_opening BETWEEN "' . $start_date . '" and "' . $end_date . '"')
->where('assigned_to', $user_id)
->where('date_closing is null');
}
            echo $this->datatables->generate();

}

如果子句工作正常,请尝试在控制器中分配 $user_id ='1', $status ='1'。

标签: mysqlcodeigniterdatatablesoptions

解决方案


  1. 您已将变量包含在单引号中,这将导致 $user_id 的字符串而不是它的值。

所以改变

if ($start_date) {
  $this->datatables->where('assigned_to', '$user_id')
                   ->where('date_closing is not NULL');
}

To(删除 $user_id 周围的单引号)

if ($start_date) {
    $this->datatables->where('assigned_to', $user_id)
                     ->where('date_closing is not NULL');
}
  1. $start_date分配在哪里?

$start_date是一个局部变量,我看不到它被设置。你在哪里设置?

目前,它总是会在您的 IF 语句中测试/评估为 FALSE。

除非您将其定义为类中的属性并将其分配到其他地方,否则您会将其称为$this->start_date


推荐阅读