Ahoj, další kolo webové minisoutěže o placku Machr na PHP se statným
slonem a o samolepky je tady!
Jelikož jsme ještě nepracovali s databází, měli bychom to napravit.
Zadání není nijak složité a aplikace se vám může i poté hodit. Půjde o
připomínač narozenin. V databázi si vytvořte tabulku s několika uživateli
a jejich narozeninami. Když aplikaci spustíme, vypíše za jak dlouho jsou
nejbližší narozeniny (tedy za kolik dní je má nejbližší z uživatelů) a
ideálně kolik mu bude let
Pro práci s databází se snažte použít ovladač PDO. Aplikace nemusí
obsahovat editor uživatelů, stačí odevzdat export databáze s několika
uživateli pro otestování.
Devbook je vlastně rozdělen do 3 částí: aplikace, weby a hry. Každá
část bude mít svoji soutěž. O databázích v PHP toho spoustu napsal
Kit - http://www.itnetwork.cz/…sql-databazi
Co všechno to má tedy poskytovat ? Bude se řešit i design ? Nebo stačí
nějaký pěkný kód, který prostě vypíše kdo má nejblíže narozeniny ?
Dělám teď ještě závěrečku do školy z programování (ano ten engine).
Takže uvidím jak to stihnu, ale rád bych tohle zkusil
Ok Takže pouze vypíše
nejbližší narozeniny a za jak dlouho... fajn pokusím se něco vytvořit
.Zítra mám dvě hodiny webů, možná budu dělat ten engine, možná udělám
tohle .. uvidím , mám je od 7:00 tka záleží jak se bude chtít
Vešlo by se, ale rozepsal jsem parametry konstruktoru, aby to bylo
názornější. Také SQL dotaz jsem raději rozepsal na 6 řádek. Ošetřil
jsem i výjimky, takže to nějakých 15 řádek jistí
// Action.php by se jestě mohl dodělat nejspíš bude potřeba require User
a connection nwm jestli je dobře to mít v jednom souboru nebo rozdělit do
samostatnejch tříd.. nwm php neumím
Chtěl jsem mít unixovej čas na narozeniny a pak mi kámoš připoměl, že
je to od roku 1970 takže to nestačí tak jsem se s*al s date typem a na to asi
nemam dostatečný znalosti SQL abych to porovnával podobným stylem jako to
mám teď takže v DB nic moc ale myslím že KIT by vypeklil takovej SELECT že
bych mohl vypustit pár řádků na explode atd.
// no a teď nějaký example ale to je snad jasný podle kódu
getLast()// vratí pole nejbližších narozenin kdyby náhodou mělo víc lidi ve stejný den
getAll() // vrací všechny narozeniny
add() // přidá narozeniny do db
edit() // editacedelete() // smazání narozenin//getovat si různý blbosti jde jednoduše např$user = new User();
foreach($user->getLast() AS$value)
echo$value->name; // vypíš jméno// pak je tam samozřejmě
countM,countD // kolik mesicu a dnu zbejva do narozenin
countY // kolik mu je let
name // jméno člověka
year,month,day // kdy se narodil
EDIT : jo a sql
create table birthday(
id INT UNSIGNED NOT NULL PRIMARY KEY UNIQUE AUTO_INCREMENT,
name VARCHAR(255),
year SMALLINT,
month SMALLINT,
day SMALLINT);
měl jsem tam date type pak jsem měl ale problém tahat z DB přesně to co
chci pomocí SQL. Musel bych to řešit až uvnitř.
SELECT * FROM birthday WHERE month >='.date("m")." AND day >=".date("d").";"
Tím si pěkně vytáhnu posledního a je to s DATE jsem měl problém neznám všechny vychytávky a
funkce v SQL abych si to mohl tahat tak jako tu mi to vždy vracelo prvního
narozenýho což mi bylo k ničemu
návod na zprovoznění
na localhostu si v phpmyadmin vytvořte databázi narozeniny. V databázi
narozeniny vytvořte tabulku machr24. Pak si zkopírujte soubory ze zipu. Pro
naplnění tabulky ukázkovými daty spusttě soubor sample.php. Pak už
jednoduše index.html.
No protože na localhostu je pořád leden roku 70, tak do url k indexu
ještě přidejte
?year=2013&month=05
kde hodnota year udává rok, který chte použít a month udává
měsíc.
Kdybych náhodou vyhrál, tak už teda nevím co za placku si vzít
(nicméně mi můžete poradit, už mám c#, php a algoritmy).
Trochu jsem na těch zdrojákách vytuhl, než jsem se tím prokousal. Došel
jsem k následujícímu pořadí:
1. Kit (100 bodů) - Všechnu logiku schoval do krátkého SQL
dotazu, aplikace je minimalistická a velmi přehledná. Napiš prosím
x, kterou placku chceš.
2. FilipPyrek (90 bodů) - Nějak podobně bych to asi dělal
já.
3. fuulll (80 bodů) - Tvůj kód mi dal opravdu zabrat, v
nějakých ohledech je docela zajímavý, v jiných ale zbytečně komplikovaný
(např. vlastní selection sort, když lze použít třídící funkce, co
nabízí PHP).
4. Misaz (60 bodů) - Stáří počítáš jen jako rozdíl
roků, v kódu máš SQL injekce, měl bys používat prepared statements, vzi
třeba tady (ty otazníky v SQL dotazu) - http://www.itnetwork.cz/php/mvc-modely.
Snažil jsem se to napsat co nejnázorněji. Ve view jsem řešil projekci
tak, aby se to dalo použít na více způsobů. V selectu jsem pak udělal jen
sort a limit. Místo seznamu sloupců se sice dá napsat "*", ale moc rád to
nemám.
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.