Как l oop множественный ввод формы и назначить в sql запрос в php? - PullRequest
1 голос
/ 29 мая 2020
public function add_employee($input)
{
    $key_array = null;
    $value_array = null;
    $bind_array = null;
    foreach ($input as $column => $value) {
        if ($value) {
            #$bind_array => ?, ?, ?;
            #$value_array => [$value1, $value2, $value3];
            #$key_array => column1, column2, column3;
        }
    }
    $sql = "INSERT INTO ol_employee ($key_array) VALUES ($bind_array)";
    $this->db->query($sql, $value_array);
}

См. Комментарий в функции, как добиться такого результата? идея в том, что из входного POST я получаю более 27 полей, я просто хочу заполнить подготовленный мной запрос $ sql, как вы можете видеть. Я не думаю, что писать каждый столбец таблицы вручную - это хороший способ.

я использую Codeigniter 4 php framework + postgresql.

Ответы [ 3 ]

2 голосов
/ 29 мая 2020

Согласно документации CodeIgniter 4 , вы можете сделать это внутри своего l oop для каждого сотрудника:

$data = [
    'title' => $title,
    'name'  => $name,
    'date'  => $date
];

$db->table('mytable')->insert($data); 
0 голосов
/ 29 мая 2020

по мнению Алекса Гранадоса, это тот запрос, который я использую:

public function add_employee($input)
{
    foreach ($input as $column => $value) {
        if ($value) {
            $data[$column] = $value;
        }
    }

    $this->db->table('ol_employee')->insert($data);
}

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

Спасибо, ребята.

0 голосов
/ 29 мая 2020

Вы можете использовать функцию array и implode, сначала создайте массив из key_array, value_array и bind_array, затем используйте implode () и используйте в sql, как показано ниже

public function add_employee($input)
{
    $key_array = array();
    $value_array = array();
    $bind_array = array();
    foreach ($input as $column => $value) {
        if ($value) {
            $bind_array[] = '?';
            $value_array[] = $value;
            $key_array[] = $column;
        }
    }

    $binds = implode(",",$bind_array);
    $keys = implode(",",$key_array);    
    $values = implode(",",$value_array);
    $sql = "INSERT INTO ol_employee ($keys) VALUES ($binds)";
    $this->db->query($sql,$values);
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...