Fotografický magazín "iZIN IDIF" každý týden ve Vašem e-mailu.
Co nového ve světě fotografie!
Zadejte Vaši e-mailovou adresu:
Kamarád fotí rád?
Přihlas ho k odběru fotomagazínu!
Zadejte e-mailovou adresu kamaráda:
PHP
Anketní systém v PHP II.
php_anketa
3. dubna 2001, 00.00 | Vylepšení anketního systému o administrační část. Nyní můžete zadávat nové ankety, mazat staré a editovat stávající. Nechte se inspirovat naším článkem a udělejte si svůj anketní systém!
V minulém díle jsme navrhli funkci pro vykreslovaní ankety, kterou jsme si "natvrdo vytvořili" jako jeden řádek v tabulce.Dnes navrhneme systém (prostředí), který nám umožní vytvářet ankety, upravovat je a mazat.
Všechno bude obstarávat jeden soubor, který
budeme volat buď s parametrem id pro zobrazení určité
ankety či vytvoření nové id=0 nebo bez parametru,
pro zobrazení seznamu anket. Pro vykonáni akce přidáme parametr zmena=1. Soubor si pojmenujeme spravceanket.phtml.
spravceanket.phtml
Poznámka na úvod: Tento správce je vyvtořen pro strukturu tabulky anket,
kterou jsme si vytvořili v minulém díle. Pokud ji nemáte z nějakého důvodu
vytvořenou, vytvořte si ji tímto SQL příkazem:
create table ankety (id int4 not null default '0' auto_increment primary key, otazka varchar(50), odp1 varchar(35), p1 int2, odp2 varchar(35), p2 int2, odp3 varchar(35), p3
int2, odp4 varchar(35),p4 int2, odp5 varchar(35), p5 int2, odp6 varchar(35), p6 int2, odp7 varchar(35), p7 int2 )
Na začátku souboru si načteme "moje oblíbené" soubory pro práci s databází (ct_sql.inc, db_mysql.inc, local.inc)
|
(tyto tři soubory jsou volně šiřitelné. Pro větší bezpečnost si je přejmenujte na *.phtml nebo *.php)
Provedení změn
Teď přijde část, která ověří,
zda byla provedena nějaká změna a vykoná ji { parametr zmena=1 };
Provedení změn je rozděleno na dvě částí, první je pro výmaz ankety ze systému (odstranění řádku z databáze). Odstraňení se provede zavoláním SQL příkazu DELETE.
|
Pokud se změna netýká mazání, pak je to tedy úprava/vložení nové ankety. Předtím, než se provede úprava či vložení se zkontroluje pomocí for cyklu, zda všechny proměné p1 - p7 mají "hodnotu integeru" (udělalo by to problém při vykonání SQL příkazu)
Samotné vložení či úprava se provede pomocí SQL příkazu REPLACE, který má tuto výhodu: Existuje-li pole s primárním klíčem a já vkládám do tabulky řádek, který má primární klíč stejný jako nějaký řádek v databázi,tak pouze upraví tento řádek podle ostatních hodnot, pokuď neexistuje, vytvoří v tabulce nový řádek. Pole s primárním klíčem má v naší tabulce ještě parametr auto_increment. Tedy pokud dám 0 a ta v tabulce jako primarní klíč není (když je auto_increment tak nula nikdy není), nevloží se 0, ale dosud nejvyšší číslo primárního klíče v tabulce +1. Tím zajistím při parametru $id=0 vytvoření nové ankety s nejvyšším id (primárním klíčem ;-)
Nakonec vymažu existenci proměné $id, aby se mi zobrazil seznam anket (viz níže) a ne znovu úprava této ankety.
|
(pokud máte toho již toho plnou hlavu, dejte si pauzu, protáhněte se, napijte se, něco pojezte a pak hurá na druhou-zobrazovací část souboru)
Zobrazit anketu nebo seznam anket?Teď přijde na řadu rozlišení volání. Buď existuje proměnná $id pak se zobrazí příslušná anketa. Neexistuje-li proměnná $id (nebo byla smazána, tedy taky není) zobrazí seznam anket.
|
Nyní máme v proměnné $db->f("otazka") otázku, v poli $db->f("odp1") 1.možnou odpověď, atd... V našem systému můžeme měnit všechny parametry ankety, kromě jejího id - jedinečné číslo pro anketu.
Formulář pro změny/vytvořeníNejdříve si zobrazíme $id, to nelze měnit a poté formuář (formulář je volán bez parametru action to znamená, že data budou odeslány tomuto skriptu), kde v prvním textovém poli bude otázka.
|
Dále zobrazíme všech 7 otázek a počty odpovědí, abychom to provedli elegantně, využijeme na to for cyklus. 7x zobrazíme formulářový prvek INPUT s jménem odp1-7 a 7x se jménem p1-7 a jeho hodnoty přednastavíme parametrem value s příslušnou hodnotou proměnné v objektu $db
|
Ještě potřebujeme tlačítko a něco, co nám nastaví parametr zmena=1. Vytvoříme tedy skryté pole (parametr hidden) se jménem zmena a hodnotou 1 a tlačítko (parametr submit) a value="popis tlačítka". Někdo by mohl namítnout, že by stačílo tlačítku přiřadit name=zmena a nemuseli bychom mít skrytý prvek, ale to by fungovalo jen při kliknutí, ne při stisknutí ENTERu
|
Část pro editaci je kompletní, přistoupíme tedy k zobrazení.
Seznam anket
Nejdříve pošleme dotaz k databázi pro výpis anket,
a poté pomocí for cyklu budeme zobrazovat. (zvolil jsem primitivní zobrazení,
co anketa, to jeden řádek). Zobrazím vždy id ankety, otázku a
za nimi odkaz pro úpravu a smazání. Odkaz ukazuje na tento soubor
a je tam přidán parametr pro úpravy ?id=$id a pro smazaní ?zmena=1&smaz=$id
|
Doufám, že jste se při tom nezapotili, jdeme do finiše.
Ještě potřebujeme odkaz na vytvoření nové ankety, to provedeme voláním tohoto souboru s parametem ?id=0
|
Nakonec nezapomeňte, že tento správce anket, je jenom pro vás, tedy je neveřejný. Proto by bylo dobré alespoň neuvádět odkaz na tento soubor. Lepší způsob ochrany je chránit soubor ověřením identity, ale o tom třeba příště.
Download ukázky z tohoto dílu (6 kB)
Obsah seriálu (více o seriálu):
-
25. listopadu 2012
-
30. srpna 2002
-
10. října 2002
-
4. listopadu 2002
-
12. září 2002
-
25. listopadu 2012
-
28. července 1998
-
31. července 1998
-
28. srpna 1998
-
6. prosince 2000
-
27. prosince 2007
-
4. května 2007