PHP делает простую функцию if-isset-empty
я кодирую приложение рабочего листа для компании-принтера.
Я получаю поток форм.
Для каждого поля ввода я должен проверить, если $_POST
переменные установлены, и если, так Эхо обратно значение. (В случае какой-либо ошибки, например, после ошибки проверки, пользователь не должен перепечатывать всю форму)
пример кода:
if(isset($_POST['time'])&&!empty($_POST['time'])){echo $_POST['time'];}
мне пришлось реализовать это около ста раз. Поэтому я попытался выяснить какую-то функцию, чтобы сделать это простым и читаемый.
что-то вроде этого:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])&&!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
но это не будет работать.
Я попытался пройти в $_POST
на $key
переменной, как это:
if_post_echo($_POST['time'])
function if_request_echo($key, $default = "") {
if(isset($key)&&!empty($key)){
echo $key;
}else{
echo $default;
}
}
и я также попытался это:
function if_request_echo($key, $default = null) {
return isset($_REQUEST[$key])&&!empty($_REQUEST[$key]) ? $_REQUEST[$key] : $default;
}
без какого-либо разумного результата.
вопрос:
как я могу подделать функцию, которая ищет необходимое $_POST
variable и возвращает его или если его unset затем возвращает пустую строку.
И есть ли способ сделать это для $_GET
и $_REQUEST
тоже? (Или просто дублировать?)
8 ответов
ваша функция тестирования PHP:
<?php
function test_req($key, $default = '') {
if(isset($_REQUEST[$key]) and
!empty($_REQUEST[$key])) {
return $_REQUEST[$key];
} else {
return $default;
}
}
?>
тогда в вашей форме HTML:
<input name="my_field" value="<?php echo htmlentities(test_req('my_field')); ?>" />
$_REQUEST
(связанный) - это PHP super global, который содержит оба поста ($_POST
) и Get ($_GET
) параметры запроса.
если вы хотите только захватить параметры запроса POST, то это будет:
<?php
function test_req($key, $default = '') {
if(isset($_POST[$key]) and
!empty($_POST[$key])) {
return $_POST[$key];
} else {
return $default;
}
}
?>
например.
Если у вас большой сумме полей, я бы предложил вам также использовать массив значений по умолчанию:
$defaults = array(
"time" => "default",
"name" => "enter name here",
"text..." => "...",
);
$fields = array_filter($_POST) + $defaults;
$fields
будет содержать список значений формы с данными POST или предустановленным значением по умолчанию. Нет иссет, видишь?
array_filter man page в частности: если обратный вызов не указан, все входные данные, равные FALSE, будут удалены. Это как-то объясняет работу, стоящую за этим решением.
Это должно работать:
function if_post_echo($key, $default = ''){
if(isset($_POST[$key]) AND !empty($_POST[$key]){
echo $_POST[$key];
}
echo $default;
}
Если у вас возникли проблемы, я рекомендую вам попробовать var_dump($_POST)
или print_r($_POST)
чтобы увидеть, все ли было правильно опубликовано.
просто отметить, что это избыточно:
isset($_POST[$key]) && !empty($_POST[$key])
переменная unset всегда будет "пустой", поэтому isset()
подразумевается в твоем empty()
звонок.
для вашей логики вы можете достичь того же результата, просто:
!empty($_POST[$key])
ваша первая функция отлично работает для меня.
почему вы думаете, что это не сработает?
однако лучшим вариантом было бы
function _post($key, $default = "") {
if(isset($_POST[$key])){
return $_POST[$key];
}else{
return $default;
}
}
использовать :
echo $_post($key); // You could define the message as a second parameter.
function requireArray( $array, $required ) {
foreach( $required as $k=>$v ) {
if ( !isset($array[$k]) || empty($array[$k]) )
return false;
}
return true;
}
#call like this:
requireArray($_POST, array('time', 'username', 'foo'));
Если вы хотите знать конкретно:
function missingFrom( $array, $required ) {
$r = array();
foreach( $required as $k ) {
if ( !isset($array[$k]) || empty($array[$k]) )
$r[] = $k;
}
return $r;
}
вызывается как предыдущая функция.
ваш метод, кажется, работает хорошо здесь:
function if_post_echo($key, $default = "") {
if(isset($_POST[$key])&&!empty($_POST[$key])){
echo $_POST[$key];
}else{
echo $default;
}
}
Я сделал простой ввод с тестом имени, а метод формы -POST
и с помощью echo if_post_echo('test');
.
он разместил на странице то, что было в текстовом поле.
эта функция добавляется в PHP 7 как "оператор null Coalesce", используя два вопросительных знака:
echo ($_GET['message'] ?? 'default-if-not-set');