How to only Run one time a function

时间:2019-04-08 13:06:33

标签: php

I have the function bellow, and I want it only to run one time after the login, like, the user can do as many logins as he likes per day, but I only want the function to run on the first login, and never more.

When I call it like on the second piece of code, the function run on every login.

    function updateDiasFimAno ()
    {   
        //declaração de variaveis
        $currentYear = date("Y");
        $currentDate = date("Y-m-d");
        $newYear = $currentYear."-01-01";
        $userID = $_SESSION['utilizador'];
        $objectDB = new Dbh;
        $objectDBU = new Dbh;


        //caso estejamos no dia de ano novo..
        if($currentDate == $newYear)
        {

            //ir à base de dados buscar os dados do user
            $q = $objectDB->connect()->query("SELECT diasRestantes, tipoRegimeID FROM utilizadores WHERE idUtilizadores = '$userID'");

            //criar uma tabela com os dados
            $row = $q->fetch();

            $diasRestantesL = $row['diasRestantes'];
            $tipoRegime = $row['tipoRegimeID'];

            if($tipoRegime == 2)
            {
                $diasRestantesA = 22;
                $diasRestantesA = $diasRestantesA + $diasRestantesL;
                //atualizar na base de dados
                $qU = $objectDBU->connect()->query("UPDATE utilizadores SET diasRestantes = '$diasRestantesA' WHERE idUtilizadores = '$userID'");

            }
            else if($tipoRegime == 1)
            {   
                //tras o numero de anos que passaram...20..30 etc
                $year = $_SESSION['years'];
                //dividir o numero de anos por 10 para obter o numero de dias a mais
                $diasMais = ($years/10);
                //numero de dias Default;
                $diasRestantesA = 22;
                //dias atuais é igual aos 22 mais os que sobraram do ano anterior, mais os de cada 10 anos a mais depois da data de admissao
                $diasRestantesA = $diasRestantesA + $diasRestantesL + $diasMais;

                $qU = $objectDBU->connect()->query("UPDATE utilizadores SET diasRestantes = '$diasRestantesA' WHERE idUtilizadores = '$userID'");
            }
        }

    }

The call on page:

    <?php $aux = new FeriasController();
    $auxF = new FeriasController();
    $aux->oneMoreDay();?>

2 个答案:

答案 0 :(得分:3)

You need to save on the database the information, such as lastLoginDay.

Then in your function:

  • if the actual time is the same day as lastLoginDay, return without doing nothing else
  • Otherwise, run the function and update the field lastLoginDay with the actual day.

答案 1 :(得分:0)

Create a column in the users table called has_ever_logged or something like that and set it to 0 by default.

On the login, check if that column of that user is set to 0. If it is, run the function and set it to 1. If it is not, do something else