[ luner @ 03.09.2002. 23:24 ] @
Evo jednog koda koji bi trebalo da radi kao dispečer (tako se uostalom i zove, dispatcher.php :)) koji zbog necega ne radi kako treba. Evo koda:

<?

// Skript koji usmerava korisnika u zavisnosti od korisnickog imena i lozinke.

// Startovanje sesije.
session_start();

// Registrovanje promenljivih koje se prenose.
session_register("username");
session_register("passwd");

// Ukljucivanje parametara (za povezivanje sa bazom podataka).
include("./etc/config.inc.php");
include("./etc/sql/${dbtype}/config.inc.php");

// Povezivanje sa bazom podataka.
$dbc = mysql_connect($dbhost, $dbuser, $dbpass);
if (!$dbc) {
die(Header("Location: index.php?greska=2"));
}

// Odabir baze podataka.
$dbo = mysql_select_db($dbname);
if (!dbo) {
die(Header("Location: index.php?greska=3"));
}

// Upit koji odredjuje kojoj kategoriji korisnik pripada.
$rez = mysql_query("SELECT kategorija FROM " . $dbtblpref . "korisnici WHERE username='$username' AND passwd='$passwd'");

// Slanje korisnika u:
if(mysql_num_rows($rez) == 1) { // administracioni deo njegove kategorije.
$rezultat = mysql_fetch_array($rez);
Header("Location: $rezultat[kategorija]/index.php");
}
else { // ponovno logovanje.
Header("Location: index.php?greska=1");
}

?>

E sada, kod ne radi kako treba zbog sledece stvari:

- ukoliko skript ne moze da se poveze na server baze podataka - OK (lepo prijavi gresku 2)

- ukoliko nije OK user i pass - OK (lepo prijavi gresku 1)

- ukoliko ne postoji baza podataka SKRIPT UMESTO DA JAVI GRESKU 3 JAVI GRESKU 1!!!

Postoji li neko logicno objasnjenje za ovako nesto?

(vrsi posao ali mi je glupo da ispisuje greski "nije ok user i pass" kada je do baze)

Uzgred, sta mislite o ovom kodu (ko bi ka kako bolje napisao)?

Pozdrav i unapred zahvalan levo potpisani!
[ Arsa_Car @ 03.09.2002. 23:52 ] @
Mala omaska

if (!dbo) {
die(Header("Location: index.php?greska=3"));
}

PREPRAVI if (!dbo) U if (!$dbo)
[ RAZZLEDAZZLER @ 04.09.2002. 03:32 ] @
Samo savet za ubuduce, poshto si pitao za komentar koda.
Uglavnom kada SELECTujesh neshto iz baze, posle cesh najverovatnije to da chitash ili sa npr $result[polje] ili npr $result[0]. Ne verujem da cesh imati potrebe da koristish i jedno i drugo, tj da upucujesh na rezultat chas preko imena kolone, chas preko rednog broja.
Zato ti savetujem, da ako koristish imena kolona, SELECT hvatash sa mysql_fetch_assoc(). Ona se razlikuje od mysql_fetch_array() zato shto mozesh da koristish samo imena polja, a ne i redne brojeve, ali je zato brza funkcija.
Normalno, najbrze je da koristish mysql_fetch_row(), koja jeste da je chesto nezgodnija za rad, ali je najbrza od svih ovih funkcija.

I josh jedna stvar. Ako SELECTujesh samo jedan podatak iz baze [npr kao sada shto si jedno polje iz kategorije], mislim da je brze da koristish mysql_result().
Neka me neko ispravi ako greshim, ali mislim da je ova funkcija brza za rad kada su u pitanju mali rezultati.
[ luner @ 04.09.2002. 15:00 ] @
Arsa_car: Hehe, a toliko puta sam pregledao kod i opet nista :)) Hvala ti puno!

RAZZLEDAZZLER: Iz koda sam izbacio samo jedan red koji je sadrzao:

// Sve dole navedene funkcije prepisati u include fajl specificirane baze.

Ovo ovde je samo stavljeno tek da proradi a sve ce biti ponovo prepisano u skript funkcije.inc.php. Ipak, u pravu si u vezi funkcija! Hvala takodje!