Существует ли лучший способ проверить ОТПРАВЛЕННЫЕ переменные в PHP?

Я дал бы XLINQ (чтение: LINQ к XML) попытка. Это легко, интуитивно и легко доступно для редактирования.

Образец: Чтение и Запись XML использование XLinq

7
задан BabyCakes 30 July 2009 в 23:07
поделиться

5 ответов

Как насчет того, чтобы обернуть его функцией?

<?php

function getPost($name, $default = null) {
    return isset($_POST[$name]) ? $_POST[$name] : $default;
}
6
ответ дан 6 December 2019 в 14:07
поделиться

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

Что-то вроде:

class Request {

  private $defaults = array();
  private static $_instance = false;

  function getInstance () {
    if (!self::$_instance) {
     $c = __CLASS__;
      self::$_instance = new $c;
    }
    return self::$_instance;
  }

  function setDefaults($defaults) {
    $this->defaults = $defaults;
  }

  public function __get($field) {
    if (isset($_REQUEST[$field]) && !empty($_REQUEST[$field])) {
        return $_REQUEST['field'];        
      } elseif (isset($this->defaults[$field])) {
        return $this->defaults[$field];
      } else {
        return ''; # define a default value here.
      }
   }
}

затем вы можете сделать:

# get an instance of the request
$request = Request::getInstance();

# pass in defaults.
$request->setDefaults(array('name'=>'Please Specify'));

# access properties
echo $request->name;
echo $request->email;

Я думаю, что это делает ваши отдельные скрипты более чистыми и абстрагирует от проверки и т. Д. Плюс множество возможностей с этим дизайном, чтобы расширить его / добавить альтернативное поведение, добавить более сложную обработку по умолчанию и т. Д.

4
ответ дан 6 December 2019 в 14:07
поделиться

Сначала используйте $ _ POST для POSTed переменные. $ _ REQUEST представляет собой смесь множества различных входящих переменных, а не только $ _ POST , и может вызвать проблемы.

Одним из решений вашего вопроса было бы создание функции, которая обрабатывает isset () логика.

function ForceIncomingValue($Key, $Default) {
    if (!isset($_POST[$Key]))
         return $Default;
    else return $_POST[$Key];
}
2
ответ дан 6 December 2019 в 14:07
поделиться

Известен ли ожидаемый набор переменных на момент написания сценария, или вы хотите сделать это для произвольного набора значений? Если первое верно, вы можете сделать что-то вроде этого:

# This array would hold the names of all the variables you're expecting
# and a default value for that variable name
$variableNames = array (...); 
foreach ($variableNames as $key => $default) {
    if (isset ($_REQUEST[$key])) $$key = $_REQUEST[$key];
    else $$key = $default;
}

В основном, это использует возможность PHP оценивать переменные для создания других переменных (отсюда двойной доллар для клавиши $$ - это означает создание новой переменной, чей name - это значение $ key).

Я еще не нашел хорошего решения для последней ситуации.

1
ответ дан 6 December 2019 в 14:07
поделиться

Прежде всего, НИКОГДА не используйте переменную $ _REQUEST, это приведет к ошибкам и другим проблемам во время разработки.


function getPOST($key) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    }
}

обратите внимание, что этот код оставляет переменную пустой, когда $ _POST [ $ key] не был установлен

, вы также можете адаптировать этот код, чтобы вместо этого предоставить вам (разумное) значение по умолчанию, когда значение не может быть загружено.

function getPOST($key, $default = NULL) {
    if(isset($_POST[$key])) {
        return $_POST[$key];
    } else {
        return $default;
    }
}
2
ответ дан 6 December 2019 в 14:07
поделиться
Другие вопросы по тегам:

Похожие вопросы: