[ S a l e @ 12.06.2003. 13:47 ] @
Imam zadatak da napravim scriptu za autorizaciju i unos podataka u bazu.
Koristim IIS + PHP 4.3.2 + access baza preko ODBC.

Baza ima tabele korisnici (id, username, password) i podaci (id, naslov, tekst).

Potrebno je da napravim da se preko svojih naloga (username/password) korisnici preko forme autoriziju (napravio sam forme i scriptu za registraciju i to radi), ako je autorizacija OK onda mogu da unose podatke (prikazuje se forma), a ako autorizacija nije ok onda se izdaje poruka "ACCESS DENIED" hehehe

Ne mogu da ukapiram rad sa sesijama i bazom, pa molim da neko napise jedan kompletan primjer koji podatke (user i pass) unijete u formu provjerava da li postoje u bazi, smjesta ih u sesiju i omogucava da korisnik radi dalje.

Posto je scripta iz nekoliko datoteka, interesuje me sta je sve potrebno da se postavi oko sesija da bi se iste provjeravale, da li je korisnik prosao autorizaciju ili ne.

I jos jedno pitanje: da li moze da se napravi scripta koja daje podatke o access bazi povezanoj preko ODBC (kao opcija dump structure u PhpMyAdmin - lista tabela i kolona)?

Mislim da je tema korisna i interesantna za sire narodne mase...

Hvala!
[ mikikg @ 16.06.2003. 00:31 ] @
Evo smoje skripte za autorizaciju korisnika.

Posto je originalno pisana za MySQL bazu, pojedine komande (mysql_query, mysql_fetch_array...) je potrebno zameniti sa adekvatnim za ODBC.

Znaci, iz login forme se postuje u ovu skriptu $username i $password.

Code:

<?
/*******************************************************************************
 *       Filename: chkusr.php
 *       Copyright 2003 By Aleksandar Markovic 
 *       Copyright under GPL
 *       User autorization
 ******************************************************************************/

include "con.php";   // konekcija ka bazi
include "crypt.php"; // funkcija za skreblovanje podataka (opciono)

$res_user = mysql_query ("SELECT `username`,`password` FROM `users` WHERE `username`='$username' and `password`='$password'");
$res = mysql_fetch_array($res_user);

       if  (count($res)=='1')
       {
       // user/pass nije nadjen
       // header("Location: invalid.php?page=invalid&xerror=pass");}
       echo "ACCESS DENIED hehehe";
       else
       {
           if (!(strcmp ($username, $res[0]) or strcmp ($password, $res[1]))) //case sensitive comparison
           {

           //Login ok
           session_start(); //startuje se sesija

           // ovde se postavlja "flag" da je korisnik uspesno ulogovan. Ovaj flag je pozeljno kontrolisati na svakoj stranici
           // encrypt funkcija je opciona i sluzi da se flag dodatno osigura
           session_register("auth_ok_session"); $auth_ok_session = encrypt("OvOJeFoRa",$sifra);

           // ovde upisati dodatne vrednosti u sessiju, ukoliko je potrebno
           session_register("ostali_podaci_session"); $ostali_podaci_session="vrednost";

           header("Location: admin/index.php"); //skoci na stranicu za rad sa bazom
           exit;
           }
           else
           {
           // user/pass nije prosao poredjenje na velika/mala slova
           // header("Location: invalid.php?page=invalid&xerror=pass");exit;
           echo "ACCESS DENIED hehehe";
           }
       }

?>


Ako je sve ok, skripta ce skociti na "admin/index.php", dok ce u suprotnom ispisati "ACCESS DENIED hehehe". Opciono mozes da iskoristis invalid.php, kako bi imao malo lepsu stranicu o nastaloj gresci.

Sledeci kod sluzi da se proverava dali je korisnik stvarno ulogovan prilikom izvrsavanja administracionih skripti. Ovo parce koda je pozeljno staviti na vrh svake stranice/skripte (apsolutno na vrh, tj pre bilo kakvog stampanja iz skripti, zbog sesija) ili ga smestiti u neki fajl pa uraditi include "logchk.php". Ako je login ok, skripta ce nesmetano nastaviti da se izvrsava, dok ce u suprotnom skociti na login formu.

Code:

<?
 /*********************************************************************************
 *       Filename: logchk.php
 *       Copyright 2003 By Aleksandar Markovic
 *       Copyright under GPL
 *       Login check (if not loged redirect to index.php)
 *********************************************************************************/
 include_once ("crypt.php");

// ako nije vec startovana sesija uraditi to ovde
// session_start();

 $auth_ok_session = false;
 session_register("auth_ok_session");

 $dec_text = decrypt($auth_ok_session,$sifra);

 if ($dec_text <> "OvOJeFoRa")
{header("Location: ../../index.php");die;} //skoci na login formu


?>


Postoji mnogo nacina da se ovo odradi, ali ovaj kode se meni pokazao sasvim ok.

Sto se tice crypt.php skripte, kode za to nisam u mogucnosti da dostavim, tako da mozes koristiti neke vec gotove skripte ili je jednostavno izbaci iz upotrebe i malo prepravi delove koda gde se spominje encrypt i decrypt.

Drugi deo pitanja ostavljam za nekog drugog.

[ leka @ 16.06.2003. 03:24 ] @
Odgovor na sva tvoja pitanja (sa primerima) lezi ovde:

http://www.phpbuilder.com/columns/index.php3?cat=6&subcat=36

Na kraju je sve na tebi - zelis li da sednes i ucis sa tih par tekstova (boldovani linkovi) ili ces i dalje ipak (kao mnogi) da pitas po ES-u za pomoc.
[ S a l e @ 16.06.2003. 13:42 ] @
Hvala!

Samo da ovo prebacim da koristi ODBC, pa cu se javiti
[ stanoje @ 30.06.2003. 17:48 ] @
Ajd ovako da dodam, mada kasnim, puno posla do vraga,


1.U bazi stavi polje Aktivan tako da ga/je mozes iskljuciti po zelji.

2.Ako se vec radi o nekom delu sajta gde ce se nesto unositi u bazu i
svaki cas gledati onda nije lose da na pocetku svakog skripta
za svaki slucaj opet proveris korisnika(a ne da mu registrujes u sesiji $jesdobar="da" pa da slepo tome verujes). To je za prikaz manje vishe ok,
za administraciju nije. Tako se ne moze dogoditi da si ga deaktivirao, a da on nastavi da radi. Ako ga proveris samo jedanput onda bi teoretski on isao tamo-amo sve dok ne iskljuci browser ili dok ne prodje maxlifetime od poslednjeg zahteva.

3.Aktivan polje ti omogucava da ti korisnik ostane u bazi sa svojim ID-jem
koji se verovatno kao kuga prosirio po nekim drugim tabelama
(gde je unosio vesti ili sta znam sta vec) pa bi brisanje X zapisa
u Y tabela samo zato sto mu je klinac iz ulice saznao password i promenio jednu
vest bilo neprakticno, zahtevalo bi i update nad povezanim tabelama i sto ku*aca,
da ne sirim sad. Ovako ga ti kao mali bog klik na deaktivaciju cim napravi neko sr*** (ili nece da plati-nije mu leglo na racun itd), pa kad bude ponovo moralnopoliticki-podoban ili materijalno dobar, a ti ga sa klikom ukljucis i onda ste
opet najbolji drugari.

4.mozes da dodas i root-a za tu ekipu koji bi bio urednik tog dela sajta-sad sam
vec pobegao od teme. Uglavnom radjeno je sve to-radili zivi ljudi, nadam se
da cu biti jos dugo potvrda te teze :))

da ne bude da sam izmislio toplu vodu evo ti jos jedan link
http://www.devarticles.com/art/1/163/

PS
tacka 2 se ne moze primeniti na gornji source jer je covek lepo reko, a ja corav, da je pozeljno proveravati no mi skrolovao na desno prozor pa ne videh. Eto izvinjavam se, ali cu ipak ostaviti ono sto sam napisao kao sire objasnjenje za one
kojima je potrebno