PHP проверяет параметры функции и устанавливает пустые значения, если пуст - PullRequest
1 голос
/ 30 апреля 2019

У меня есть функция PHP, которая принимает число (много) параметров через веб-форму.

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

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

public function test ($param1, $param2, $param3, $param4, $param5, $param6, $param7, ... ) {
        $param1 = ($param1 != '') ? $param1 : NULL;
        $param2 = ($param2 != '') ? $param2 : NULL;
        $param3 = ($param3 != '') ? $param3 : NULL;
        $param4 = ($param4 != '') ? $param4 : NULL;
        $param5 = ($param5 != '') ? $param5 : NULL;
        $param6 = ($param6 != '') ? $param6 : NULL;
        $param7 = ($param7 != '') ? $param7 : NULL;
        // etc
    }

Затем я использую подготовленные операторы для отправки этих значений в mysql db.

Ответы [ 2 ]

0 голосов
/ 30 апреля 2019

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

Ваша форма и ее входные данные будут выглядеть примерно так:

<form action="action-calling-your-function.php" method="post">
    <input type="text" name="params[]" />
    <input type="text" name="params[]" />
</form>

Функция может выглядеть следующим образом:

public function test ($params) {
    foreach ($params as $param) {
        if (empty($param))
            $param = NULL;
    }
}

Примечание: я также использовал функцию empty(), которая включает в себя желаемое значение '', но другие значения возвращали бы значение true. Вот документация

0 голосов
/ 30 апреля 2019

Мне нравится использовать ассоциативный массив вместо отдельных переменных.Ассоциативный массив отображает строковый ключ на значение.

Я в конечном итоге передам этот ассоциативный массив методу PDOStatement::execute() в качестве параметров для подготовленного оператора.Это означает, что должны присутствовать все ключи, и только ключи, указанные в подготовленном операторе.

Поэтому мне нужно, чтобы мой массив параметров был заполнен значениями по умолчанию, если они не находятся вмассив, и мне нужно, чтобы он был усечен для удаления ненужных элементов.

public function fillAndTruncate($params, $paramDefaults) {
  $params = array_merge($paramDefaults, array_intersect_key($params, $paramDefaults));
  return $params;
}

Я мог бы использовать эту функцию следующим образом:

$paramDefaults = [
  'name'    => NULL,
  'phone'   => NULL,
  'age'     => 0,
  'country' => 'USA'
];

$sql = 'INSERT INTO mytable SET name = :name, phone = :phone, age = :age, country = :country';
$stmt = $pdo->prepare($sql);
$stmt->execute(fillAndTruncate($_POST, $paramDefaults));
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...