Передача даты в функцию в php


я делаю php-скрипт, который через дату оплаты дает мне следующий срок с учетом состояния, то есть, является ли этот платеж или нет. Что-то вроде этого:

$list = $conn->query("SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0");
$fila = $list->fetch();
$mes = '+30 day';
$sem = '+180 day';
$anu = '+365 day';
$periodo = $fila['periodo'];

if ($periodo == 'mensual') {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($mes , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;

} elseif ($periodo == 'semestral') {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($sem , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;

} else {
$fecha = $fila['fechapago'];
$nfecha = strtotime ($anu , strtotime ($fecha)) ;
$nfecha = date ('d-m-Y' , $nfecha);
echo $nfecha;
}

Моя идея состоит в том, чтобы передать его функции, и правда, функции не будут хорошо использоваться или, скорее, не будут создаваться. Я не ожидаю, что они это сделают, но если они немного ориентируют меня. Спасибо!

Author: PAGANA, 2018-02-04

1 answers

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

В этом случае мы предполагаем, что по крайней мере значение $fila получено вне функции. Затем мы передаем его в параметр, чтобы функция работала с этой информацией. Обратите внимание, что я создал значение $calculo, которое будет меняться в зависимости от значение $periodo и в конце if мы делаем вычисление с соответствующим значением. Таким образом, мы экономим несколько строк кода, выигрывая в простоте и ясности в программе ... наконец, он вернет (return), конечные данные.

Например:

/*
    *Vamos a suponer que la consulta se hace desde otra parte
    *Aunque puedes hacer esto dentro de la función,
    *todo dependerá de tu conexto
*/
$list = $conn->query("SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0");
$fila = $list->fetch();

/*
    *Ahora le pasas $fila a la función
    *como es una función que tiene un return, puedes asignar el resultado
    *de la llamada de la función a una variable
*/

$fechaVencimiento=getVencimiento($fila);

echo $fechaVencimiento;

/*
    *Esta es la función y el parámetro que recibe
*/

function getVencimiento($fila){

    $periodo = $fila['periodo'];

    if ($periodo == 'mensual') {
        $calculo='+30 day';

    } elseif ($periodo == 'semestral') {
        $calculo = '+180 day';

    } else {
        $calculo = '+365 day';
    }
        $fecha = $fila['fechapago'];
        $nfecha = strtotime ($calculo , strtotime ($fecha)) ;
        $nfecha = date ('d-m-Y' , $nfecha);

/*
    *Como verás, he quitado todos los echo
    *porque interesa que la función retorne el valor sólo al final
*/
return $nfecha;

}

Более элегантная форма

В некоторых случаях код становится более ясным и элегантным, если мы используем блок switch. Чехол, который вы выставляете, идеально подходит для его использования. Функция останется так:

function getVencimiento($fila){

    $periodo = $fila['periodo'];    

    switch ($periodo) {
        case 'mensual':
            $calculo='+30 day';
            break;

        case 'semestral':
            $calculo = '+180 day';
            break;

        default:
            $calculo = '+365 day';
    }   

    $fecha = $fila['fechapago'];
    $nfecha = strtotime ($calculo , strtotime ($fecha)) ;
    $nfecha = date ('d-m-Y' , $nfecha);

return $nfecha;

}   

ВАЖНОЕ ПРИМЕЧАНИЕ ПО БЕЗОПАСНОСТИ:

Запрос SELECT * FROM cuenta WHERE useride = '".$code."' AND estado = 0 уязвим для SQL-инъекций. Чтобы исправить это серьезное проблема безопасности, вы должны реализовать использование запросов подготовленные. Для получения дополнительной информации вы можете прочитать: Как избежать SQL-инъекций в PHP?

 3
Author: A. Cedano, 2018-02-04 14:18:00