Как записать более одного условия в тройном операторе в codeigniter? - PullRequest
1 голос
/ 14 марта 2019

Моя картинка:

enter image description here

На этом снимке я сохраняю тип группы с помощью переключателя. Если выбран баланс, он сохраняется как «B», а прибыль и убыток - как «P». Если ничего не выбирать, он сохраняет как «T».

Теперь моя проблема в том, что я использую троичный оператор для проверки условий, но для меня работают только 2 условия. В этом операторе не работает более одного условия. Как мне решить мою проблему.

public function GEntry()
{

        $session_data = $this->session->userdata('logged_in');
        $data['username'] = $session_data['username'];
        $this->form_validation->set_rules('gName', 'gName', 'required');

        $this->form_validation->set_error_delimiters('<div class="text-danger">',
            '</div>');
        $check1 = isset($_POST['gType']);

        $check =  ($check1 == 'B') ? "B"  : ($check1 == 'P') ? "P" :'T';
    //$check1 = isset($_POST['tin_no1']) ? "Y" : "N";

        if ($this->form_validation->run())
        {
            $data= array(
                'gName' => $this->input->post('gName'),
                'gType' => $check
                );
        //means insert a data into the table
            $this->db->insert('groups',$data);

            return redirect('Master/Groups');
        }

Ответы [ 2 ]

1 голос
/ 14 марта 2019

Вы не присваиваете данные записи переменной $check1. Вы проверяете вот так $check1 = isset($_POST['gType']);, это даст вам true / false.

Обновление, как показано ниже:

$check1 = isset($_POST['gType']) && in_array($_POST['gType'], ['B', 'P']) ? $_POST['gType'] : 'T';

Затем удалите эту строку $check = ($check1 == 'B') ? "B" : ($check1 == 'P') ? "P" :'T';

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

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

$a = ($b === 'A') ? 'A' : (($b === 'B') ? 'B' : (($b === 'C') ? 'C' : 'D'));

НО ... я бы не рекомендовал вам эту процедуру, если ваше решение требует более 2-3 условий. В этом случае я бы порекомендовал вам использовать вместо переключатель :

switch ($b)
{
    case 'A':
        $a = 'A';
        break;
    default:
        $a = 'D';
        break;
}

ТАКЖЕ ... я бы порекомендовал вам использовать компаратор === вместо компаратора ==, как в приведенном вами коде. Третий = гарантирует, что оба заданных значения имеют один и тот же тип данных, поэтому вы сравниваете string с другим string в вашем примере.

...