php - 当您有隐藏字段时阻止验证 Codeigniter

标签 php codeigniter

我正在预订机票,并且有 2 个单选按钮。

1)一种方法

2) 往返

我所做的事情是,当我选择往返时,所有字段都在那里(出发、返回和乘客数量),但当我选择单程单选按钮时,返回字段应该隐藏。

在我的 Controller 中,我验证了所有字段都是必需的。问题是,每当我尝试以一种方式搜索(返回字段被隐藏)时,它都会给我一个“需要返回字段”错误

问题:当我选择“单向”单选按钮时,如何防止返回字段中的验证?

查看

<div class="pure-u-1-1 searchcontainer center">
            <div class="pure-u-1-1 findcheaptxt">
               <span>Find Cheap Flights</span>
            </div>
            <div class="pure-u-1-1 radiobtn">
               <form action="">
                  <input type="radio" name="flight_type"  value="one_way" class="onew" style=""  >One Way
                  <input type="radio" name="flight_type" class="roundw" style="" checked>Round Trip
               </form>
            </div>

            <form method="post" enctype="multipart/form-data" action="<?= base_url() .'User/search'?>">
            <?= validation_errors(); ?>
            <div class="pure-u-1-1 fromto">
               <div class="pure-u-1-1">
                  <label for="from" class="margin2px">From</label>

                  <select name="flight_from">
                    <option value="">-- Please select depature --</option>   
                    <?php foreach($countries as $country):?>
                        <option value ="<?= $country->country_name?>" ><?= $country->country_name?></option>
                    <?php endforeach?>

                  </select>

               </div>
                <div class="pure-u-1-1">
                  <label for="to" class="tomargin">To</label>
                  <!-- <input type="text" class="fromto"><br> -->
                  <select class="fromto" name="flight_to">
                    <option value="">-- Please select destination --</option>
                    <?php foreach($countries as $country):?>
                        <option value ="<?= $country->country_name?>" ><?= $country->country_name?></option>
                    <?php endforeach?>
                  </select>
                </div>
               <div class="pure-u-1-1 dr" name ="depart">
                  <label for="depart" class="drr">Depart</label>
                  <input type="date" id="depart" name="depart" class="departreturn">

               </div>
                <div class="pure-u-1-1 dr" id="try">
                  <label for="return" class="drr">Return</label>
                  <input type="date" id="return" name="return" class="departreturn"><br>

                  </div>
            </div>

            <div class="pure-u-1-1 personfield">
                <!--  <div class="pure-u-1-5 margin">
                    Adult<br>
                    <input type="text" name="" class="person">
                 </div>
                 <div class="pure-u-1-5 margin">
                    Seniors<br>
                    <input type="text" name="" class="person">
                 </div>
                 <div class="pure-u-1-5 margin">
                    Children<br>
                    <input type="text" name="" class="person">
                 </div>
                 <div class="pure-u-1-5">
                    Class<br>
                    <input type="text" name="" class="person">
                 </div> -->
                  <div class="pure-u-1-5 margin">
                    Number of Passengers<br>
                    <input type="text" name="no_of_passengers" class="person">
                 </div>

            </div>
                 <div class="pure-u-1-1 center">
                      <button class="submitbtn">Search Now</button>
               </form>
            </div>
         </div>
      </div>

Controller

public function search()
{
    $data['countries'] = $this->CrudModel->get('countries');
    $this->form_validation->set_error_delimiters('<div class="alert alert-danger" role="alert">', '</div>');
    $this->form_validation->set_rules('flight_from', 'Select depature', 'required|trim');
    $this->form_validation->set_rules('flight_to', 'Select Destination', 'required|trim');

    if ($_POST['flight_type'] == 'round_trip')
    {
        $this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
        $this->form_validation->set_rules('return', 'Date of return', 'required|trim');
        $this->form_validation->set_rules('no_of_passengers', 'Number of Passengers', 'required');
        if ($this->form_validation->run() == FALSE)
        {
            $this->index();

        }
        else
        {
            $search_result = array(
                $flight_from = $_POST['flight_from'],
                $flight_to = $_POST['flight_to'],
                $depart = $_POST['depart'],
                $return = $_POST['return'],
                $no_of_passengers = $_POST['no_of_passengers']
            );
            $data['search_result'] = $this->CrudModel->search('flight',$flight_from,$flight_to,$depart,$return,$no_of_passengers);
            $this->load->view('partials/header');
            $this->load->view('partials/nav');
            $this->load->view('result',$data);
        } 

    }
    else
    {
        $this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
        $this->form_validation->set_rules('no_of_passengers', 'Number of Passengers', 'required');
        if ($this->form_validation->run() == FALSE)
        {
            $this->index();

        }
        else {
            $search_result = array(
                $flight_from = $_POST['flight_from'],
                $flight_to = $_POST['flight_to'],
                $depart = $_POST['depart'],
                $no_of_passengers = $_POST['no_of_passengers']
            );
        $data['search_result'] = $this->CrudModel->search('flight',$flight_from,$flight_to,$depart,$no_of_passengers);
        $this->load->view('partials/header');
        $this->load->view('partials/nav');
        $this->load->view('result',$data);
        }

    }
}

隐藏返回字段时我的ajax/js

 <script type="text/javascript">
$(document).on('change', 'input:radio[name=flight_type]', function(){
    $('div[id^="try"]').toggle(); // hide all DIVs begining with "my_radio_"
    $('#' + $(this).attr('id') + '_text').show(); // show the current one
});
</script>

最佳答案

首先,您必须为往返旅程增加值(value):

 <input type="radio" name="flight_type" value="round_trip" class="roundw" style="" checked>Round Trip

然后执行如下验证条件:

  // Global validation for this method
 if ($_POST['flight_type'] == 'round_trip')
   {
        $this->form_validation->set_rules('depart', 'Date of flight', 'required|trim');
        $this->form_validation->set_rules('return', 'Date of return', 'required|trim');
   }
   else if($_POST['flight_type'] == 'one_way'){
       // add validation for one way trip
   } 

关于php - 当您有隐藏字段时阻止验证 Codeigniter,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/44449729/

相关文章:

php - 如何在json中拆分日期和时间?

php - 如何自定义 Sugar CRM 导出

php - 使用 PHP strtotime() 函数

javascript - 如何隐藏Google折线图的线条?

php - 通过ajax传递动态值

PHP curl 响应为 JSON 格式,但 var_dump 显示字符串

php - Codeigniter 表单提交但没有使用我的模型进行数据库查询

php - LEFT JOIN 后的 ORDER BY 不能在浏览器中工作但在 SQL 中工作

php - CodeIgniter-形成警告消息?

php - 什么是蛞蝓?