Autor Zpráva
World
Profil
Zdravim,
Tak tu jsem ještě jednou se stejným problémem, minule jsem myslel, že už jsem ho vyřešil, protože se to do té doby než jsem to začel více zkoumat zvářilo, že to funguje.
Takže mam script, který zajistí, když byly 3x špatně zadané přihlaš. údaje, tak to účet na 5min zamrazí(v databázi se nastaví frozen_account na aktuální čas + 5min)

a potom mám toto:

$sql_frozen_check = $db->sql_query("SELECT frozen_account>NOW() FROM account WHERE account_name='$accountname'");
$frozen_check = $db->sql_numrows($sql_frozen_check);

if($frozen_check == 1){
$error_msg = "<font class="error">"._ACCOUNT_FROZEN."</font>";
login_form();
exit();
}

to má zajistit to, že když je frozen_account(doba, do které je účet zamražen) větší jak aktuální čas, tak to uživatele nepustí dál.

account_frozen je ve formátu: 0000-00-00 00:00:00

jenže toto nefunguje, a projevu se to tak, že to stále píše, že je účet zamražený

díky za pomoc
bukaj
Profil
vypíše něco mysql_error()? nevím, ale ten dotaz se mi zdá nějaký divný...
Mastodont
Profil
SELECT frozen_account>NOW()

??
World
Profil
bukaj
právě že nic nevypisuje
no ja vim, že požaduji NOW() z tabulky kde takového nic není, ale co byste doporučili?

Mastodont
na to už jsem odpověděl bukajovi, ale když zkusim ten sql provést normal v phpmyadminovi, tak to buď vrátí hodnotu 0 (frozen_account už je menší jak aktuální čas) a nebo 1 (frozen_account je stále větší jak aktuální čas)
bukaj
Profil
možná mám nápad na to, ale netestoval jsem:

$sql_frozen_check = $db->sql_query("SELECT COUNT(*) AS frozened FROM account WHERE account_name='" . $accountname . "' AND frozen_account>NOW()");
$frozen_check = mysql_fetch_array($sql_frozen_check); //popřípadě upravit
$frozened = $frozen_check["frozened"]>=1 ? TRUE : FALSE;

if($frozened){
$error_msg = "<font class="error">"._ACCOUNT_FROZEN."</font>";
login_form();
exit();
}


mimochodem, vypíše echo $accountname; správné uživatelské jméno?
World
Profil
bukaj
díky moc, takhle to funguje, aspoň jsem zase o něco chytřejší ;)
ještě jednou díky

edit:
ale přece jen bych měl ještě jednu otázku, nejsem takový ten typ copy/paste, ale chci tomu kódu plně rozumět a tak se ptám co přesně udělá toto:
$frozened = $frozen_check["frozened"]>=1 ? TRUE : FALSE;
zkoušel jsem to i bez toho a funguje to také bez problémů

jo a ještě abych nezapomněl když mám v sql dotazu proměnnou, tak je lepší ji dávat v podobě takovéto:
test='".$promenna."'


nebo

test='$promenna'


díky za odpověd
bukaj
Profil
World
promiň, ale už jsem si editu nevšiml. teď to snad napravím.

ad 1.
$frozened = $frozen_check["frozened"]>=1 ? TRUE : FALSE;
^ tak tohle je v podstatě zkrácený zápis podmínky:

if($frozen_chekc["frozened"]>=1){
$frozened = TRUE;
}else{
$frozened = FALSE;
}

jde o ternární oprátor, který pracuje tak, že když je první oprerand (to před ?) vyhodnocen jako TRUE, tak vrací hodnotu před : (dvojtečkou), jinak za ní.
ani vlastně nevím, proč jsem to tam psal :)

ad 2.
řekl bych, že je to jedno. na funkcionalitu by to nemělo mít vliv. akorát pozor na toto:

$retezec = "něco";
$druhy = '$retezec'; //s apostrofy
$treti = "$retezec"; //s uvozovkami
echo $druhy . "\n" . $treti;
/* toto nevytiskne, jak by člověk čekal "něco\nněco", ale "$retezec\nněco", protože ve výrazu s apostrofy se nevyhodnocují názvy proměnných */
World
Profil
bukaj
díky moc, za pomoc a za vysvětlení ;)
Toto téma je uzamčeno. Odpověď nelze zaslat.