úterý 30. ledna 2007

Velký nákup

Dnes jsem si v Tesku koupil plno praktických věcí:
  • 18 praktických piv Carlsberg. Docela mě překvapil výběr českých piv. Oproti Sainsburymu, kde nakupuji častěji měli Plzěň, Budvar, Staropramen a Ještě jakýsi podivný pivo, který jsem v životě neviděl a nepomatuju si, jak se jmenuje. Všechny ve skle asi za £1,6.
  • 1 aspirin - to nemá žádnou sovislost s těma pivama. To pro případ, že by mě někdy bolela hlava. Líbí se mi, že se léky dají koupit v normálním obchodě a nemusí se pro ně do lékárny.
  • Původně jsem měl v plánu koupit si ještě další praktické věci, ale nechám to na jindy.
Nejvíc mě překvapilo, když se mě prodavačka zeptala, jestli mi už bylo 21. To nechápu.


Transport Tycoon
Už mám rok 1995, $12.954.300, 15 letadel, 30 vláčků, 24 autobusů, 3 lodě.

neděle 28. ledna 2007

Transport Tycoon


Mám $2.962.054, 3 lodě, 12 letadel, 15 vláčků a 28 autobusů. Nevolejte mi a nepište mi, protože teď hraju Transport Tycoon.

pátek 26. ledna 2007

Huňáč a Fuňáč

Až vás někdy napadne stáhnout si vánoční CD Od Jarka pod stromeček do svého MP3 přehrávače, tak rohodně doporučuji vynechat pohádku Jak Huňáč a Fuňáč pořádali olympiádu. Rychle se to oposlouchá.

středa 24. ledna 2007

Výjimka potvrzuje pravidlo

Tak já napíšu, že v Londýně nesněží a druhej se jdeme koulovat. To sem nečekal.
A podle BBC to ještě nespadlo všechno.

PHP a SQL Nové poznatky

S tímhle jsem si dnes hrál celej večer:

Výpis hodnot objektu třídy se speciálnímy znaky v klíči

Takhle vypadá SQL příkaz (používám knihovnu ezSQL):
$id = $db->get_results("SELECT MAX(id)
FROM inzeraty
WHERE majitel LIKE '$login'
");

Takhle vypadá výpis print_r($id):
print_r:Array
(
[0] => stdClass Object
(
[MAX(id)] => 60
)
)

A tohle se stane, když se pokusím vypsat hodnotu (echo $[id]->MAX(id);):

Fatal error: Call to undefined function: max() in inzerat.php on line 36

A takhle to je správně:

echo $[id]->{'MAX(id)'};

Následně jsem přišel na to, že stačilo pozměnit SQL příkaz:
$id = $db->get_results("SELECT MAX(id) as id
FROM inzeraty
WHERE majitel LIKE '$login'
");

... potom se to vypíše jako echo $id->id :)

Mazání souboru

Taky jsem poměrně dlouho snažil smazat soubor pomocí PHP. Nakonec úspěšně:
unlink(soubor_krery_chci_smazat);

Londýnské (Britské) Speciality II

  • Zkratky - bez znalosti některých zkratek si ani nepřečtete noviny. Například: NHS (čti "en ejdž es") - National Health Service, MP - kupodivu není Military Policie, ale Member of Parliament, čili poslanec, PM - Prime Minister a SE, nebo taky LSE - (London) Stock Exchange, čili burza.
  • Sníh v Londýně - v Londýně nesněží. A když náhodou zasněží, tak je to velká sláva (to jsem ještě ale nezažil). Má to na svědomí Golfský proud, který na Británii žene teplou vodu od rovníku. Naposledy prý pořádně zasněžílo v roce 1963 viz. Winter of 1963 (Wikipedia).
  • Letadlová obloha - nad Londýnem lítá tolik letadel, že přes ně není skoro vydět na hvězdy. Londýn má celkem 5 mezinárodních letišť, z toho 2 jsou přímo v Londýně (Heathrow a London City) a další jsou tak plus-mínus 50 Km od něj (Stansted, Luton, Gatwick). Z Brna se dá letět přímo jenom na Stansted a odtud cca 1,5 hodiny autobusem (£ 7-10), nebo cca 40 minut vlakem (asi £ 14) do Londýna.

neděle 21. ledna 2007

PHP Sessions

Na co to je?
Uvedu příklad: potřebuju předat proměnnou skriptu, použiju POST nebo GET, jak je libo. Například <a href="index.html?promenna=hodnota">Go</a> a je to.
Příklad druhý: potřebuju předat několik proměnných a to jak při přechodu na další stránku, tak i na následující stránku a další a další ... Můžu použít postup z příkladu č. 1 a nebo použiju session a v ušetřeném čase si můžu okusovat nechty na nohách.

Jak na to?
Dost důležitý je mít session zapnutý tzn. podívat se do php.conf a zapnout to. Mám ale pocit, že to implicitně zapnutý je.
Chci teď vytvořit skript (auth.php), který budu includovat do každé stránky a bude zajišťovat autorizaci uživatele. Ten bude vypadat asi takto:
<?

// Spustení session
session_start();

// Odhlaseni uzivatele
if ($_GET['akce'] == "odhlasit")
{
session_destroy();

echo "Byl jste odhlášen ze systému.<br>\n";

exit; // Provadeni skriptu se prerusi
}

/* Pokud byly predany promenne z formulare, ulozi se do
* session
*/
if (isset($_POST['formLogin']) OR isset($_POST['formHeslo']))
{
$_SESSION['login'] = $_POST['formLogin'];
$_SESSION['heslo'] = $_POST['formHeslo'];
}

// Ochrana proti SQL Injection
if (isset($_SESSION['login ']) AND (!ctype_alnum($_SESSION['login'])
OR !ctype_alnum($_SESSION['heslo'])))

echo "Jméno, nebo heslo obsahuje nepovolené znaky!";

exit;
{
// Pokud je zadáno jméno, nebo heslo, porovná se s databází
if (isset($_SESSION['login']) AND isset($_SESSION['heslo']))
{
$error = mysql_query("SELECT 1
FROM users
WHERE login = '".$_SESSION['login']."'
AND heslo = '".$_SESSION['heslo']."'
", $spojeni);
}

/* Pokud je heslo špatné => prázdný výpis z databáze, vypíše
* se formulář a ukončí skript
*/
if ($error == "")
{ // Nebylo-li jmeno nebo heslo, predane formularem spravne
if (isset($_POST['formLogin']) OR isset($_POST['formHeslo']))
{
echo "Špatné jméno, nebo heslo.<br>";
}

?>

<p>Nejste prihlášen do systému.</p>

<form action="<? echo $_SERVER['PHP_SELF'];
?>" method="post">
Login: <input type="text" name="formLogin"
value="<?php echo $_POST['login']; ?>"><br>
Heslo: <input type="password" name="formHeslo"><br>
<input type="submit" value="Přihlásit">
</form>

</body>
</html>
<?

exit;
}

/* Heslo musi byt v tomto miste spravne, pokracuje se ve
* skriptu
*/
if (isset($_SESSION['login']))
{
echo "Přihlášen jako: ".$_SESSION['login']." <a href=\"".
$_SERVER['PHP_SELF']."?akce=odhlasit\">Odhlasit</a>";
}

?>

Co ve skriptu chybí?
Otevření databáze - počítám s tím, že je otevřená
Ošetření chyb databáze - to se mi nechtělo
Automatické odhlášení - řeším to časovým kódem v databázi, který pokaždém spuštění skriptu přepíšu
Šifrování hesla v databázi - to se mi taky nechtělo, ale funkce md5() si s tím poradí
Chyby - zřejmě nechybí, ale jde mi jen o vysvětlení, jak funguje session

Jak to funguje?
K přenosu dat mezi stránkama, resp. klíče identifikujícího data se používá GET, nebo Cookies, nebo obojí, záleží na nastavení serveru a klienta.

Ještě něco?
Vlastně si to píšu sám pro sebe, abych věděl, až to zapomenu, kam se mám podívat. Nicméně přivítám jakékoliv připomínky.

sobota 20. ledna 2007

Myška

Tak jsem si byl pořídit novou myšku. Taková malá, černá, roztomilá myška, s ocáskem na USB. Stála mě £6.99 a navíc podložka pod myš zdarma a s pěkným obrázkem. Jenže! Příjdu domů, zapojím, zahejbu a co nevidím, ona není optická, místo světýlka má zespod kuličku! Já bych tam těm Čiňanům poslal kýbl Semtexu.

pátek 19. ledna 2007

Pořád veselo

Dnes náš mad chef vymyslel velmi melodickou písničku, kterou si zpíval celý den a ke konci ji naučil taky všechny ostatní a ještě přidal tleskání. Já jsem se odmítl přidat, protože mi vadil fakt, že každý verš začíná mým jménem.

Dohodl jsem se s manažerkou, že koncem dubna se vracím domů. Mimo to předpokládám, že někdy příští měsíc (nejdřív 9.) se stavím.

Ten komplikovaný semafor je možné vidět na Canary Wharf v Londýně. Je mimochodem uprostřed kruhového objezdu, takže nehrozí, že by nějak mátl řidiče. Tady je letecká mapa.

National insurance number

National insurance number (dále IN) - tuhle věc musí mít každý zaměstnanec v Británii. Jedná se o číslo identifikující zaměstnance kvůli daním, pojištění a kdo ví čemu ještě. Problém je v tom, že vyřízení žádosti o tohleto číslo může trvat 16 týdnů (podle informací z Jobcentre, kde to mají na starost). Pokud zaměstnanec nemá toto číslo, je mu přiděleno zaměstnavatelem číslo dočasné ...

(Edit: Informace byly poněkud nepřesné, tak jsem to raději zkrátil)