|
|
Felhasználók adatainak karbantartása
Internetes számlázó 6. rész
|
|
Példaprogram letöltése
53820 bájt
|
Következő lépésként továbbfejlesztjük az internetes számlázó rendszerünket, kiegészítve azt a felhasználók táblájának kezelésével. Így képesek leszünk új felhasználó felvételére a weboldalon keresztül, illetve a már meglévők listázására.
A mellékelt példa fordítása előtt szokás szerint ellenőrizze és szükség esetén javítsa a Constant.pas-ban lévő konstansok értékeit (TEMPLATEPATH, CONNECTIONSTRING, stb.).
Az előző cikkekben már létrehozott NetInvoice virtuális web könyvtár elérési útvonalát módosítsa úgy, hogy az a most mellékelt NetInvoice könyvtárra mutasson.
Az alkalmazásunk nyitó web oldalán bejelentkezés után már megjelenik a tools.dat tartalma. Ezt most kiegészítjük két további linkkel, melyek segítségével felvehetünk új felhasználókat, vagy listázhatjuk a meglévőket.
<a href="/scripts/NetInvoice.exe?uid=<#uid>&command=8">Új felhasználó</a><br>
<a href="/scripts/NetInvoice.exe?uid=<#uid>&command=9">Felhasználók listája</a><br>
Új felhasználó felvételének szándékát a command paraméter 8-as értéke jelöli.
procedure TWebModule1.Command;
begin
case FCommand of
…
8: begin//Új felhasználó
PageProducer1.HTMLFile:=TEMPLATEPATH+'usernew.dat';
Response.Content:=PageProducer1.Content;
end;
...
Ekkor betöltjük a usernew.dat tartalmát. Ebben egy Html Form-ot helyezünk el, melyben a felhasználó megadhatja az új felhasználó minden jellemző adatát.
A Form-ban elhelyezünk egy rejtett paramétert command névvel, mely alapján majd értelmezni tudja alkalmazásunk a végrehajtandó funkciót, mely nyilván a megadott adatok tárolása lesz.
…
<form method=get action="/scripts/NetInvoice.exe">
<input type=hidden name=command value=10>
…
Ha tehát a command paraméter értéke 10, akkor egy új rekordba tárolnunk kell a megadott felhasználó adatait. Ehhez készítünk egy ProcessNewUser nevű függvényt, mely elvégzi a megadott adatok helyességét és tárolását. Visszatérési értékként igazat ad, ha az adatok tárolása sikeresen megtörtént, illetve hamisat, ha valamely adat nem lett megadva, vagy hibás. E logikai értéket felhasználva elágaztatjuk a programunk további futását.
procedure TWebModule1.Command;
begin
case FCommand of
…
if ProcessNewUser then begin
Ha az adat tárolás sikeres, akkor a userlist.dat állományt adjuk vissza eredményül a felhasználónak, mely nem más, mint a már meglévő felhasználók listája, így látható lesz az újonnan felvett tétel is.
PageProducer1.HTMLFile:=TEMPLATEPATH+'userlist.dat';
Response.Content:=PageProducer1.Content;
end else begin
Amennyiben a feldolgozás közben hiba történt, akkor az error.dat kerül visszaadásra melyben megjeleníthetjük a felhasználó számára a hibaüzenetet, melyet a szokásos módon az FMessage globális változóban tárolunk és onnan helyezzük át a generálandó web oldalra.
PageProducer1.HTMLFile:=TEMPLATEPATH+'error.dat';
Response.Content:=PageProducer1.Content;
end;
end;
…
Nézzük mi is történik a ProcessNewUser eljárásban.
function TWebModule1.ProcessNewUser: boolean;
var
ds: TDataSet;
begin
result:=false;
with Request.QueryFields do begin
Első lépés annak ellenőrzése, hogy a Html Form-on megadott adatok közül az összes olyan kapott-e értéket, melyet kötelező kitölteni.
if (Values['UserName']='') or (Values['password1']='') or (Values['password2']='') then begin
Ha van olyan, mely nem kapott értéket, akkor elhelyezzük a hibaüzenetünket és ezzel a ProcessNewUser be is fejezte működését adattárolás nélkül.
FMessage.Add('Nem adta meg az összes kötelezoen kitöltendo mezot!');
end else begin
Ezt követően ellenőriznünk kell, hogy a felhasználóhoz tartozó jelszó mind a két esetben azonosan lett-e begépelve.
if Values['password1']<>Values['password2'] then begin
FMessage.Add('Nem egyforma a két megadott jelszó!');
end else begin
Ha a megadott adatok helyesek, akkor nekiláthatunk azok tárolásának. Első lépésként a felhasználandó adatbázis típusától függően adunk értéket a ds változónak.
{$ifdef MSSQLVERSION}
ds:=tSQLUserData;
{$else}
ds:=tDbaseUserData;
{$endif}
ds.Open;
MS SQL adatbázis esetén egy új tranzakciót kezdeményezünk.
{$ifdef MSSQLVERSION}
ADOConnection1.BeginTrans;
{$endif}
ds.Append;
Dbase adatbázis esetén nekünk kell gondoskodnunk arról, hogy a termékek táblájában lévő UserdataID mező értéket kapjon. MS SQL esetén erre nincs gondunk, hiszen beállítottuk az Indentity tulajdonságot. Ha tehát Dbase-t használunk, akkor a soron következő azonosítót a GetNextID belső függvényünk szolgáltatja.
{$ifndef MSSQLVERSION}
ds.Fields[0].Value:=GetNextID('user');
{$endif}
Ezt követően tároljuk az összes többi megadott adatot a megfelelő mezőbe.
ds.Fields[1].AsString:=Values['UserName'];
ds.Fields[2].AsString:=Values['password1'];
ds.Post;
MS SQL esetén zárjuk a tranzakciót.
{$ifdef MSSQLVERSION}
ADOConnection1.CommitTrans;
{$endif}
ds.Close;
result:=true;
end;
end;
end;
A GetNextID ugyanúgy működik, mint ahogy azt előző cikkünkben ismertettük, csak most paraméterként a user szót adjuk meg, így az ehhez tartozó azonosítót szolgáltatja.
Hátra van még a userlist.dat elkészítése, mely akkor jelenik meg, amikor felvételre került egy új felhasználó sikeresen, illetve amikor a nyitólapon a "Felhasználók listája" linket választjuk.
procedure TWebModule1.Command;
begin
case FCommand of
…
9: begin//felhasználó lista
PageProducer1.HTMLFile:=TEMPLATEPATH+'userlist.dat';
Response.Content:=PageProducer1.Content;
end;
…
A userlist.dat-ban egy Html táblázat kap helyet, melyben megtalálható a termékek táblájának fejléce, így programból nekünk csak a sorokat kell generálnunk attól függően, hogy rekord is található-e a userdata táblában. Elhelyezünk tehát egy userlistitems címkét a userlist.dat-ba, arra a helyre, ahová be kell szúrnunk az adatokat. Ezt a műveletet pedig rábízzuk a GetUserListItems nevű függvényünkre.
procedure TWebModule1.PageProducer1HTMLTag(Sender: TObject; Tag: TTag; const TagString: String;
TagParams: TStrings; var ReplaceText: String);
begin
…
if TagString='userlistitems' then begin
ReplaceText:=GetUserListItems;
end;
…
A GetUserdataListItems függvényben megnyitjuk a szükséges adatbázis UserData tábláját, majd egy while ciklussal végigmegyünk az összes rekordon, és annak összes mezőjét kilistázzuk. E művelet közben a megfelelő Html kódokat is elhelyezzük a sztringben, mely a függvény visszatérési értéke lesz.
A listázást úgy végezzük el, hogy a tábla password mezőjét nem jelenítjük meg.
function TWebModule1. GetUserListItems: string;
…
while not ds.Eof do begin
result:=result+'<tr>';
for i:=0 to ds.FieldCount-1 do begin
if ds.Fields[i].FieldName<>'Password' then begin
result:=result+'<td>'+ds.Fields[i].AsString+'</td>';
end;
end;
result:=result+'</tr>';
ds.Next;
end;
…
Ezzel meg is valósítottuk a felhasználók felvételi és listázási lehetőségét.
|
Könyv
Ez a cikk megtalálható ebben a könyvben:
Delphi Software Offline 2001 évkönyv 650. oldal
Felhasználási feltételek
A Software Online szoftverfejlesztői magazin mindegyik cikke, minden megjelent képe, és egyéb publikált anyaga szerzői jog védelme alatt áll! Bármilyen formában történő másodlagos terjesztésük, közzétételük vagy felhasználásuk kizárólag a kiadó előzetes írásbeli engedélyével történhet!
|