Elektronický obchod v ASP – správa databáze
Při cestě za vlastním elektronickým obchodem se tentokrát zastavíme u správy databáze. Přitom nezapomeneme také na zabezpečení administrace.
Zákazníci již mohou z našeho elektronického obchodu úspěšně objednávat. Databázi produktů i kategorií lze upravovat buď ručně (pomocí aplikace MS Access v případě databáze Access nebo pomocí SQL dotazovacího nástroje v případě, že máme databázi umístěnou na MS-SQL Serveru), anebo můžeme databázi produktů a kategorií upravovat pomocí webových stránek s formuláři a skriptů ASP.
Zabezpečení administrace
Aby nebylo administrační rozhraní našeho elektronického obchodu přístupné všem návštěvníkům, je nutné tento systém chránit před neautorizovaným vstupem. O autorizaci vstupu uživatele se bude starat stránka prihlasit.asp. Pro zabezpečení vstupu na vybrané stránky lze použít databázi uživatelů na nějakém databázovém serveru nebo integrované ověřování Windows.
V databázi e-shopu vytvoříme další tabulku Admin (buď na SQL Serveru nebo v databázi Access) – Admin. Struktura tabulky bude vypadat takto:
Název pole | Typ MS-SQL | Typ Access |
ID | int aut. | číslo |
Jmeno | char (50) | text |
Heslo | char (50) | text |
Pro vygenerování tabulky na SQL Serveru můžete použít následující příkaz:
CREATE TABLE [dbo].[Admin] (
[ID] [int] IDENTITY (1,1) NOT NULL ,
[Jmeno] [char] (50) NOT NULL ,
[Heslo] [char] (50) NULL ,
) ON [PRIMARY]
Nyní již zbývá pouze vytvořit soubor prihlasit.asp, který se postará o samotné přihlášení. Stránka nejdříve zobrazí přihlašovací formulář (formulář bude obsahovat pole přihlašovací jméno a heslo), po odeslání formuláře bude přihlašovací jméno a heslo ověřeno. Po úspěšném přihlášení se změní proměnná Admin v objektu Session, do které se zapíše, že přihlášení bylo úspěšné a načte se stránka admin.asp.
<!– #include file=“includes/connect.asp“ –>
<%
Dim intI, strPrihlasovaciJmeno, strHeslo, intOK, intChyba, strText
‚deklarace proměnných
intChyba = 0
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán, zkontroluj údaje
strPrihlasovaciJmeno = LCase(Request.Form(„jmeno“))
‚načti přihlašovací jméno (změna na malá písmena)
strHeslo = LCase(Request.Form(„heslo“))
‚načti heslo (změna na malá písmena)
intOK = 0
‚inicializace proměnné
PripojDatabazi
‚připoj zdroj dat
Set objData = objDatabaze.Execute(„SELECT id FROM Admin WHERE jmeno='“ & strPrihlasovaciJmeno & „‚ AND heslo='“ & strHeslo & „‚“)
‚najdi v databázi příslušný záznam
If not objData.EOF Then intOK = 1
‚byl záznam nalezen?
OdpojDatabazi
If intOK = 1 Then
intChyba = 0
Session(„Admin“) = 1
Session(„AdminName“) = strPrihlasovaciJmeno
Response.Redirect(„admin.asp“)
Else
intChyba = 1
‚při přihlašování nastala chyba
End If
End If
‚Zobraz formulář
If intChyba = 1 Then
Response.Write(„<b>Chybné přihlašovací údaje!</b>“)
End If
strText = „<form action=’prihlasit.asp‘ method=’post‘>“
strText = strText & „<b>Přihlašovací jméno:</b> <input type=’text‘ name=’jmeno‘><br>“
strText = strText & „<b>Heslo:</b> <input type=’password‘ name=’heslo‘><br>“
strText = strText & „<input type=’submit‘ name=’submit‘ value=’Přihlásit‘>“
strText = strText & „</form>“
Response.Write(strText)
%>
Správa databází – admin.asp
Nyní přejdeme k samotné správě produktů a kategorií. O veškerou správu se bude starat jediná stránka admin.asp. Činnost, kterou bude stránka provádět, budeme rozlišovat pomocí proměnné intExec
, kterou budeme vždy předávat při dalším zobrazení. Hodnoty proměnné intExec
:
Hodnota | Akce |
0 | Zobrazení možností |
1 | Odhlášení |
2 | Přehled kategorií |
3 | Přidat kategorii |
4 | Upravit kategorii |
5 | Vymazat kategorii |
6 | Přehled produktů |
7 | Přidat produkt |
8 | Upravit produkt |
9 | Vymazat produkt |
Na začátek stránky vložíme soubor connect.asp:
<!-- #include file="includes/connect.asp" -->
Poté bude následovat kód stránky. Na začátku kódu je kontrola, jestli je uživatel přihlášen. V případě, že není, je přesměrován na přihlašovací stránku.
<%
Dim intExec, objData, intId, intNadrazena, strNazev, strPopis, strVyrobce, intKategorie, intCena, intDPH, intSleva, intProdavat, strText
‚deklarace proměnných
If not Session(„Admin“) = 1 and Len(Session(„AdminName“)) > 0 Then Response.Redirect(„prihlasit.asp“)
‚kontrola přihlášení uživatele
intExec = Request.QueryString(„exec“)
‚načtení akce z adresy
Select Case intExec
Case 1
‚odhlášení
Session(„Admin“) = 0
Session(„AdminName“) = „“
Response.Redirect(„default.html“)
Case 2
‚přehled kategorií
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT id, nazev FROM Kategorie“)
‚získej data z databáze
strText = „“
do while not objData.EOF
‚pro všechny záznamy
strText = strText & „<a href=’admin.asp?exec=4&id=“ & objData(„id“) & „‚>Upravit</a> <a href=’admin.asp?exec=5&id=“ & objData(„id“) & „‚>Vymazat</a> “ & Trim(objData(„nazev“)) & „<br>“
‚vypiš
objData.MoveNext
‚posuň se o záznam dál
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=3′>Přidat kategorii</a>“
strText = strText & „<br><br><a href=’admin.asp‘>Zpět</a>“
OdpojDatabazi
‚odpojení databáze
Response.Write(strText)
Case 3
‚přidat kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
intNadrazena = CInt(Request.Form(„id“))
strNazev = Request.Form(„nazev“)
strPopis = Request.Form(„popis“)
‚načti hodnoty z formuláře
PripojDatabazi
objDatabaze.Execute(„INSERT INTO Kategorie (nazev, popis, nadrazena) VALUES (‚“ & strNazev & „‚, ‚“ & strPopis & „‚, “ & intNadrazena & „)“)
‚vlož do databáze
OdpojDatabazi
strText = „Kategorie byla přidána!<br><br><a href=’admin.asp?exec=2′>Zpět</a>“
Else
‚jinak zobraz formulář
strText = „<form action=’admin.asp?exec=3′ method=’post‘>“
strText = strText & „<b>Název:</b> <input type=’text‘ name=’nazev‘><br>)
strText = strText & „<b>ID nadřazené kategorie:</b> <input type=’text‘ name=’id‘><br>“
strText = strText & „<b>Popis:</b> <input type=’text‘ name=’popis‘><br>“
strText = strText & „<input type=’submit‘ name=’submit‘ value=’Přidat‘>“
strText = strText & „</form>“
‚zobraz formulář
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT id, nazev FROM Kategorie“)
‚získej data z databáze
do while not objData.EOF
‚pro všechny záznamy
strText = strText & Trim(objData(„nazev“)) & “ – ID: “ & objData(„id“) & „<br>“
‚vypiš
objData.MoveNext
‚posuň se o záznam dál
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=2′>Zpět</a>“
OdpojDatabazi
‚odpojení databáze
End If
Response.Write(strText)
Case 4
‚upravit kategorii
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
intNadrazena = CInt(Request.Form(„nadrazena“))
strNazev = Request.Form(„nazev“)
strPopis = Request.Form(„popis“)
intId = Request.Form(„id“)
‚načti hodnoty z formuláře
PripojDatabazi
objDatabaze.Execute(„UPDATE Kategorie SET nazev='“ & strNazev & „‚, popis='“ & strPopis & „‚, nadrazena=“ & intNadrazena & “ WHERE id=“ & intId)
‚uprav v databáze
OdpojDatabazi
strText = „Kategorie byla upravena!<br><br><a href=’admin.asp?exec=2′>Zpět</a>“
Else
‚jinak zobraz formulář
intId = Request.QueryString(„id“)
‚načtení id kategorie
If CInt(intId) > 0 Then
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT nazev, popis, nadrazena FROM Kategorie WHERE id=“ & intId)
‚získej data z databáze
intNadrazena = CInt(objData(„nadrazena“))
strNazev = Trim(objData(„nazev“))
strPopis = Trim(objData(„popis“))
‚načti hodnoty z databáze
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = „<form action=’admin.asp?exec=4′ method=’post‘>“
strText = strText & „<b>Název:</b> <input type=’text‘ name=’nazev‘ value='“ & strNazev & „‚><br>“
strText = strText & „<b>ID nadřazené kategorie:</b> <input type=’text‘ name=’nadrazena‘ value='“ & intNadrazena & „‚><br>“
strText = strText & „<b>Popis:</b> <input type=’text‘ name=’popis‘ value='“ & strPopis & „‚><br>“
strText = strText & „<input type=’hidden‘ name=’id‘ value='“ & intId & „‚>“
strText = strText & „<input type=’submit‘ name=’submit‘ value=’Upravit‘>“
strText = strText & „</form>“
‚zobraz formulář
Set objData = objDatabaze.Execute(„SELECT id, nazev FROM Kategorie“)
‚získej data z databáze
do while not objData.EOF
‚pro všechny záznamy
strText = strText & Trim(objData(„nazev“)) & “ – ID: “ & objData(„id“) & „<br>“
‚vypiš
objData.MoveNext
‚posuň se o záznam dál
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=2′>Zpět</a>“
OdpojDatabazi
‚odpojení databáze
End If
End If
Response.Write(strText)
Case 5
‚vymazat kategorii
intId = Request.QueryString(„id“)
‚načtení id kategorie, která se má vymazat
If CInt(intId) > 0 Then
PripojDatabazi
‚připoj zdroj dat
objDatabaze.Execute(„DELETE FROM Kategorie WHERE id=“ & intId)
‚vymaž kategorii
OdpojDatabazi
‚odpoj zdroj dat
strText = „Kategorie byla vymazána!<br><br><a href=’admin.asp?exec=2′>Zpět</a>“s
End If
Response.Write(strText)
Case 6
‚přehled produktů
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT id, nazev, vyrobce FROM Produkty“)
‚získej data z tabulky Produkty
do while not objData.EOF
‚pro každý záznam
strText = strText & „<a href=’admin.asp?exec=8&id=“ & objData(„id“) & „‚>Upravit</a> <a href=’admin.asp?exec=9&id=“ & objData(„id“) & „‚>Vymazat</a> “ & Trim(objData(„nazev“)) & “ (“ & Trim(objData(„vyrobce“)) & „)<br>“
‚vypiš
objData.MoveNext
‚další záznam
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=7′>Přidat produkt</a>“
strText = strText & „<br><br><a href=’admin.asp‘>Zpět</a>“
OdpojDatabazi
‚odpojení databaze
Response.Write(strText)
Case 7
‚přidat produkt
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
strNazev = Request.Form(„nazev“)
strVyrobce = Request.Form(„vyrobce“)
intKategorie = CInt(Request.Form(„kategorie“))
strPopis = Request.Form(„popis“)
intCena = CInt(Request.Form(„cena“))
intDPH = CInt(Request.Form(„dph“))
intSleva = CInt(Request.Form(„sleva“))
intProdavat = CInt(Request.Form(„prodavat“))
‚načti hodnoty z formuláře
PripojDatabazi
objDatabaze.Execute(„INSERT INTO Produkty (nazev, vyrobce, kategorie, popis, cena, dph, sleva, prodavat) VALUES (‚“ & strNazev & „‚, ‚“ & strVyrobce & „‚, “ & intKategorie & „, ‚“ & strPopis & „‚, “ & intCena & „, “ & intDPH & „, “ & intSleva & „, “ & intProdavat & „)“)
‚vlož do databáze
OdpojDatabazi
strText = „Produkt byl přidán!<br><br><a href=’admin.asp?exec=6′>Zpět</a>“
Else
‚jinak zobraz formulář
strText = „<form action=’admin.asp?exec=7′ method=’post‘>“
strText = strText & „<b>Název:</b> <input type=’text‘ name=’nazev‘><br>“
strText = strText & „<b>Výrobce:</b> <input type=’text‘ name=’vyrobce‘><br>“
strText = strText & „<b>Kategorie:</b> <input type=’text‘ name=’kategorie‘><br>“
strText = strText & „<b>Popis:</b> <input type=’text‘ name=’popis‘><br>“
strText = strText & „<b>Cena:</b> <input type=’text‘ name=’cena‘> Kč<br>“
strText = strText & „<b>DPH:</b> <input type=’text‘ name=’dph‘> %<br>“
strText = strText & „<b>Sleva:</b> <input type=’text‘ name=’sleva‘> %<br>“
strText = strText & „<b>Prodavat:</b> <input type=’checkbox‘ name=’prodavat‘ value=’1′><br>“
strText = strText & „<input type=’submit‘ name=’submit‘ value=’Přidat‘>“
strText = strText & „</form>“
‚zobraz formulář
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT id, nazev FROM Kategorie“)
‚získej data z databáze
do while not objData.EOF
‚pro všechny záznamy
strText = strText & Trim(objData(„nazev“)) & “ – ID: “ & objData(„id“) & „<br>“
‚vypiš
objData.MoveNext
‚posuň se o záznam dál
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=6′>Zpět</a>“
OdpojDatabazi
‚odpojení databáze
End If
Response.Write(strText)
Case 8
‚upravit produkt
If Len(Request.Form(„submit“)) > 0 Then
‚v případě, že formulář byl odeslán
strNazev = Request.Form(„nazev“)
strVyrobce = Request.Form(„vyrobce“)
intKategorie = CInt(Request.Form(„kategorie“))
strPopis = Request.Form(„popis“)
intCena = CInt(Request.Form(„cena“))
intDPH = CInt(Request.Form(„dph“))
intSleva = CInt(Request.Form(„sleva“))
intProdavat = CInt(Request.Form(„prodavat“))
intId = CInt(Request.Form(„id“))
‚načti hodnoty z formuláře
PripojDatabazi
objDatabaze.Execute(„UPDATE Produkty SET nazev='“ & strNazev & „‚, vyrobce='“ & strVyrobce & „‚, kategorie=“ & intKategorie & „, popis='“ & strPopis & „‚, cena=“ & intCena & „, dph=“ & intDPH & „, sleva=“ & intSleva & „, prodavat=“ & intProdavat & “ WHERE id=“ & intId)
‚uprav v databázi
OdpojDatabazi
strText = „Produkt byl upraven!<br><br><a href=’admin.asp?exec=6′>Zpět</a>“
Else
‚jinak zobraz formulář
intId = Request.QueryString(„id“)
‚načtení id produktu
If CInt(intId) > 0 Then
PripojDatabazi
‚připojit databázi
Set objData = objDatabaze.Execute(„SELECT nazev, vyrobce, kategorie, popis, cena, dph, sleva, prodavat FROM Produkty WHERE id=“ & intId)
‚získej data z databáze
strNazev = Trim(objData(„nazev“))
strVyrobce = Trim(objData(„vyrobce“))
intKategorie = CInt(objData(„kategorie“))
strPopis = Trim(objData(„popis“))
intCena = CInt(objData(„cena“))
intDPH = CInt(objData(„dph“))
intSleva = CInt(objData(„sleva“))
intProdavat = CInt(objData(„prodavat“))
‚načti hodnoty z formuláře
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = „<form action=’admin.asp?exec=8′ method=’post‘>“
strText = strText & „<b>Název:</b> <input type=’text‘ name=’nazev‘ value='“ & strNazev & „‚><br>“
strText = strText & „<b>Výrobce:</b> <input type=’text‘ name=’vyrobce‘ value='“ & strVyrobce & „‚><br>“
strText = strText & „<b>Kategorie:</b> <input type=’text‘ name=’kategorie‘ value='“ & intKategorie & „‚><br>“
strText = strText & „<b>Popis:</b> <input type=’text‘ name=’popis‘ value='“ & strPopis & „‚><br>“
strText = strText & „<b>Cena:</b> <input type=’text‘ name=’cena‘ value='“ & intCena & „‚> Kč<br>“
strText = strText & „<b>DPH:</b> <input type=’text‘ name=’dph‘ value='“ & intDPH & „‚> %<br>“
strText = strText & „<b>Sleva:</b> <input type=’text‘ name=’sleva‘ value='“ & intSleva & „‚> %<br>“
If intProdavat = true Then
strText = strText & „<b>Prodavat:</b> <input type=’checkbox‘ name=’prodavat‘ value=’1′ checked><br>“
Else
strText = strText & „<b>Prodavat:</b> <input type=’checkbox‘ name=’prodavat‘ value=’1′><br>“
End If
strText = strText & „<input type=’hidden‘ name=’id‘ value='“ & intId & „‚>“
strText = strText & „<input type=’submit‘ name=’submit‘ value=’Upravit‘>“
strText = strText & „</form>“
‚zobraz formulář
Set objData = objDatabaze.Execute(„SELECT id, nazev FROM Kategorie“)
‚získej data z databáze
do while not objData.EOF
‚pro všechny záznamy
strText = strText & Trim(objData(„nazev“)) & “ – ID: “ & objData(„id“) & „<br>“
‚vypiš
objData.MoveNext
‚posuň se o záznam dál
loop
objData.Close
Set objData = nothing
‚uzavření zdroje dat
strText = strText & „<br><br><a href=’admin.asp?exec=6′>Zpět</a>“
OdpojDatabazi
‚odpojení databáze
End If
End If
Response.Write(strText)
Case 9
‚vymazat produkt
intId = Request.QueryString(„id“)
‚načtení id produktu
If CInt(intId) > 0 Then
PripojDatabazi
objDatabaze.Execute(„DELETE FROM Produkty WHERE id=“ & intId)
‚vymaž produkt
OdpojDatabazi
strText = „Produkt byl vymazán!<br><br><a href=’admin.asp?exec=6′>Zpět</a>“
End If
Response.Write(strText)
Case Else
‚přehled možností
strText = „<a href=’admin.asp?exec=2′>Přehled kategorií</a><br>“
strText = strText & „<a href=’admin.asp?exec=6′>Přehled produktů</a><br><br>“
strText = strText & „<a href=’admin.asp?exec=1′>Odhlásit</a><br>“
Response.Write(strText)
End Select
%>
Nakonec si můžete stáhnout zdrojové kódy a ukázkový e-shop.
Starší komentáře ke článku
Pokud máte zájem o starší komentáře k tomuto článku, naleznete je zde.
Mohlo by vás také zajímat
-
Webdesign: Jak optimalizovat tlačítka na webu
7. března 2024 -
Gaming na HDR monitoru: Stojí to za to?
12. srpna 2024 -
10 nejpopulárnějších programovacích jazyků a jejich využití
9. listopadu 2023 -
ZONER Webmail jako první v Česku přináší BIMI s VMC
11. července 2024
Nejnovější
-
Výkonný a kompaktní: ASOME Max Studio s výjimečným poměrem cena/výkon
11. listopadu 2024 -
Šokující data od Microsoftu: Kyberútoky rostou o stovky procent!
8. listopadu 2024 -
Chcete jedinečnou doménu? Objevte koncovky FOOD, MEME a MUSIC!
7. listopadu 2024 -
OpenAI představilo novou funkci ChatGPT Search
6. listopadu 2024