Autor Zpráva
mardon
Profil
Ahoj,

plácám si tady aplikacei, jejímž účelem je evidence vydaných certifikátů, přičemž momentálně má každý certifikaá v db tyto údaje- jméno na koho byl vydán, sériové číslo, email, platnost od a do.
vytvořila jsem si třídu certifikát, která umí vypsat všechny certifikáty a vložit certifikát do db.
Teď , ale bych potřebovala doplnit aplikaci skriptem, který by mi prošel všechny záznamy v db a zjistil, které certifikáty mi vyprší během následjících 4 týdnů. A tu jsem se pravě zarazila jakou metodpou doplnit moji třídu certifikát - např. vrátit čas do podle id a v cyklu pak volat ?

class certificat
{
    public function get_all_cert ()
    {
        //$res = dibi::query('SELECT * FROM [certifikat]');
        //$res = dibi::query('SELECT [id], [ser], [name], [email], TIME_FORMAT([od], %s) AS [od]', '%H %k %h %I %l ',' FROM [certifikat]');
        //$res = dibi::query('SELECT [id], [ser], [name], [email], DATE_FORMAT([od], %s) AS [od]', '%d.%m.%Y ',' FROM [certifikat]');
        $res = dibi::query('
            SELECT [id], [ser], [name], [email], [od], [do]
            FROM [certifikat]
        ');

        $res->setType('od', dibi::FIELD_DATETIME, 'd. m. Y H:i');
        $res->setType('do', dibi::FIELD_DATETIME, 'd. m. Y H:i');
        return $res; 
    }

    public function insert_cert ($ser,$name,$email,$od,$do)
    {
        $res = dibi::query('INSERT INTO [certifikat]', array(
        'ser' => $ser,
        'name' => $name,
        'email'=> $email,
        'od' => $od,
        'do' => $do));
        return $res;
    }


P.S: kdyby byl nekdo ochoten v mých zacatecnických problémech poradit po ICQ, byla bych velmi ráda.
Joker
Profil
mardon
by mi prošel všechny záznamy v db a zjistil, které certifikáty mi vyprší během následjících 4 týdnů
Asi bych přidal metodu na zjištění, které certifikáty expirují v nějakém období. Buď od-do, případně (pokud to bude pohodlnější), od + počet dní.
No a ta metoda už by jednoduchým SQL dotazem jen našla certifikáty, jejichž datum expirace je v určeném období.
tiso
Profil
mardon - stačí len poskladať správnu query a vrátiť výsledky, nie?
principiálne:
select ... from certifikat where do > now() and do < now()+4 weeks
mardon
Profil
takže např něco takového
jeste trochu bojuji co bude vysledkem

public function expi_cert ($od,$do) {
 zjisti pocet zaznamu v db;
 v cyklu projdi db a pokud bude expriovat vloz id do  pole vysledku
 vratit pole id expirujicih certifiaktu;
}
mardon
Profil
takže jsem pokročila
 public function expire_cert ($od,$do)
    {
        $where = array();
        $where[] = array('do > %d', '$od');
        $where[] = array('do < %d', '$do');
        $result = dibi::query("SELECT * FROM certifikat WHERE %and", $where);
        return $result;
    }




a pak volam

$cert = new certificat;
$od = date("Y-m-d H:i:s");
$do = date("Y-m-d H:i:s",strtotime("+4 week"));
$exp_cert = $cert->expire_cert($od,$do);
foreach ($exp_cert as $n => $row) {
    print_r($row);
}


ale nejak se mi nedostava výsledku
mám podezžení jestli mám správně doatz v dibi
poradí mi ještě někdo?
mardon
Profil
takže jse to opravila a nyní již funguje:

 public function expire_cert ($od,$do)
    {
        $where = array();
        $where[] = array('do > %d', $od);
        $where[] = array('do < %d', $do);
        $result = dibi::query("SELECT * FROM certifikat WHERE %and", $where);
        return $result;
    }

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: