Autor Zpráva
gardener
Profil
Zdravím, začínám s dibi a chtěl bych se zeptat, jak tento query přepsat do syntaxe Dibi?

$sql = "SELECT * FROM uzivatele WHERE mail LIKE '$login' AND heslo = '$password' LIMIT 1 ";


Kdybych vyhledaval jen jednu vec, tak bych to napsal takto:
dibi::query('SELECT * FROM [uzivatele] WHERE [mail] LIKE = %s', $mail);

ale u dvou uz si nejsem jist:

Díky za každou radu
Alphard
Profil
Úplně stejně, jen musíte zachovat pořadí.
dibi::query("SELECT * FROM [uzivatele] WHERE [mail] LIKE %s AND [heslo] = %s LIMIT 1", $login, $password);
tiso
Profil
gardener: prečo tam máš
mail LIKE '...'
? Prečo nie
mail='...'
?
gardener
Profil
Myslel jsem, ze = by porovnalo jen ciselne hodnoty...
Ted mimochodem resim, jak inkrementovat hodnotu u count_of_login?

Takto to asi nebude moc dobry napad co?
 $query =dibi::query("UPDATE 'tbl_users' SET[last_visit]=%t,[count_of_login]=%i WHERE [id_user]=%i", DateTime(),++,$user_id);


Nebo by to bylo lepsi takto?
$arr = array(
    'last_visit' => new DibiVariable(DateTime(), 't'),
    'count_of_login'  => count_of_login+1,
);
 $query =dibi::query("UPDATE 'tbl_users' SET[last_visit]=%t,[count_of_login]=%i WHERE [id_user]=%i", $arr);
nightfish
Profil
$query =dibi::query("UPDATE 'tbl_users' SET[last_visit]=%t,[count_of_login]=[count_of_login]+1 WHERE [id_user]=%i", DateTime(),$user_id);
Jan Tvrdík
Profil
gardener:
Můžeš zkusit něco takového:
$user = array(
    'last_visit%t' => dibi::datetime(),
    'count_of_login%sql' => '[count_of_login] + 1',
);

dibi::query('
    UPDATE [tbl_users]
    SET', $user, '
    WHERE [id_user] = %i', $user_id
)
gardener
Profil
Zapsal jsem to takto, ale nelze mi pouzit affected rows, dostanu vždy warning:
Warning: mysql_affected_rows(): supplied argument is not a valid MySQL-Link resource in C:\Data\Programing\PHP\www\Devlop\admin\functions.php on line 91
Chyba pri updatu posledni navstevy

function Update_last_visit($user_id) {
	//Parameters user_id in MySQL
	//Return BOOL
    //Definujeme glolani promennou pro SQL spojeni
    global $spojeni;
    // ověříme uživatele v databázi podle id prejateho ze session
	//Upravime dtum navstevy a pocet navstev
   $query =dibi::query("UPDATE [tbl_users] SET[last_visit]=NOW(),[count_of_login]=[count_of_login]+1 WHERE [id_user]=%i" ,$user_id);
   $count = mysql_affected_rows($spojeni);
	if($count==0)
	{return FALSE; }
	else
	{
	return TRUE;
	}
	}
nightfish
Profil
gardener
nebylo by lepší použít
dibi::affected­Rows()
?
gardener
Profil
Asi ano, je to rozhodně lepší:
ale proč nelze zavolat něco takového?

<?php

require_once ("db_connect.php");
$query =dibi::query("UPDATE [tbl_users] SET[last_visit]=NOW(),[count_of_login]=[count_of_login]+1 WHERE [id_user]=%i" ,$user_id);
$count = $query->rowCount();
echo $count;
?>
nightfish
Profil
ale proč nelze zavolat něco takového?
a co to udělá/neudělá?
Mastodont
Profil
gardener
Dibi neznám, ale rowCount() bude asi počet řádků vrácených dotazem, ne? UPDATE ale žádné řádky nevrací.
gardener
Profil
Ano, to jsem se predsal, count se vyuzije jen u selectu..to jsem uz vyresil countem.

Co ale porad mi nejde do hlavy, tak je to ukladani datumu, vim, ze to dokaze dibi samostatne pomoci dibi::datetime();
Tak jsem napsal takovouhle "prasarnu" ale ani ta nejde, proste k updatu nedojde..

   $date = dibi::datetime();
   $query =dibi::query("UPDATE [tbl_users] SET[last_visit]=%t,[count_of_login]=[count_of_login]+1 WHERE [id_user]=%i" ,$date,$user_id);
   $count = dibi::affectedRows();
	if($count==0)
	{echo "Neupdatovan"; }
	else
	{
	echo "Updatovan";
	}
	
Jan Tvrdík
Profil
gardener:
Nechtěl jsi místo %t (pro čas) použít spíš %d (datum a čas)?
gardener
Profil
Napsal jsem to takto, záznam se aktualizuje, jen ale asi s 2 hodinovovým časovým rozdílem oprti skutečnému času..
Neměl bych si v DIBI nějakým způsobem nastavit časové pásmo?
Jan Tvrdík
Profil
gardener:
Dibi používá čas z PHP, takže leda, že bys měl špatně nastavené časové pásmo v něm. Když se používá do zdrojových kódu, tak uvidíš, že čas si to bere z PHP funkce time.
gardener
Profil
Ale kdyz vlozim klasicky SQL NOW(), tak je vse o.k..a dokonce jsem o tom i nekde cetl, jenom by mne zajimalo jak pri vytvareni connection nastavit i casove pasmo.
Jan Tvrdík
Profil
gardener:
V PHP je na to funkce date_default_timezone_set nebo položka v php.ini date.timezone.

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:

0