Autor Zpráva
Honzicek84
Profil *
Ahojm vyrábím web společenství majitelů bytů (teda spíš Informační systém), kde bude možné hlásit poruchy, kontakty na ostatní byty ...) a teď řeším otázku jak to vyřešit.
Každý byt bude mít svůj přístup, některé byty budou mít administrační přístup.
Jak vyřešit 1, aby si mohli změnit heslo sami a editovat údaje o sobě (vytvořit DB, kde bude v každém řádku jeden byt nebo DB pro každý byt)
2, aby když se mi přihlásí daný byt a nalásí poruchu, aby nevyplňoval jméno, ale aby se vypsalo samo a on jen napsal jaká porucha se stala


Děkuji za rady
eager_beaver
Profil
Ahoj. Já tomu problému moc nerozumím, resp. nerozumím tomu, oč nás žádáš. Tohle může být tak jednoduché nebo složité čistě podle náročnosti klienta. Databázový design a normalizaci si budeš muset odbýt sám, protože nejlíp znáš všechny dispozice zadaného projektu.

Každopádně databáze by měla obsahovat pravděpodobně tabulku s informacemi o jednotlivých bytových jednotkách, kde každá jednotka bude mít svoje asociační ID. Např:

id [MEDIUMINT,unsigned] | assoc_id [VARCHAR,255] | unit_no [SMALLINT,unsigned] | unit_type [ENUM]        | usability [BOOLEAN]
ID dat. položky         | asoc. ID jednotky      | číslo jednotky              | (byt, prodejna, sklep)  | aktuál. obyvatel./použitelnost jedn.
-----------------------------------------------------------------------------------------------------------------------------------------------
1                         flat_1                   1                              byt                      0
2                         flat_2                   2                              byt                      1
atd.

Tohle asociační ID by pak mělo sloužit jako vazbový parametr pro spojení dalších tabulek při práci např. s PHP.
Dejme tomu, že se pak databáze může doplnit o tabulky jako residents (tabulka, kde budou všechny osoby, které aktuálně obývají BD), přičemž tabulka by měla mít sloupec, ve kterém definuješ asociční ID jednotky(ek), ke kterým se vztahuje, former_residents (obyvatelé BD, kteří zde bydleli dříve, pro historické a statistické účely), units_history (historie změn a událostí byt. jednotek), event_types (konfigurační tabulka těchto možných změn a událostí), ale taky tabulka zmiňovaných přístupových údajů, tabulky administračních práv atd. atd.
Tohle je tak obsáhlé téma, že se na něj nedá jednoduše odpovědět bez znalosti dalších aspektů projektu ani se nedá striktně říct, zda je dobré využít jednu či více databází. Já osobně jsem nikdy nepotřeboval využívat více než jednu a myslím si, že ani v tvém případě to nemusí být jinak, opravte mě, prosím, pokud se v něčem mýlím.
Honzicek84
Profil *
Primární pro mne je tohle:
1, každý byt v baráku, bude mít své přihlašovací jméno a heslo, které si může měnit - to by mělo být uložené v db
2, Ke každému bytu by měl být přiřazený telefon a email (možnost editace
3, administrátorská práva - byt může být buďto uživatel nebo admin
4, jak zařídím, aby, když vyplňují nějakou tabulku (nahlášení poruchy..) aby se u nich objevilo jméno bytu ( v tuto chvíli musí napsat své jméno a popsat poruchu, po přihlášení by jen popsali poruchu a systém by na základě přihlášení doplnil jméno
eager_beaver
Profil
Honzicek84

1. vše, co je v databázi, se dá uživatelsky změnit, pokud k tomu vytvoříš skript
2. podle krátkého výpisu požadavků by to nemělo být nic moc složitého a výrazně se ulehčí databázový design a já bych to udělal nějak přibližně takto:

• tabulka bytových jednotek "units"
id [SMALLINT,5,unsigned,PRIMARY],
unit_id [VARCHAR,255,UNIQUE,NOT NULL],
privileges [ENUM('user','admin')]

kontakty můžeš připojit přímo k tabulce "units", nebo vytvořit
• tabulku kontaktů "contacts"
id [MEDIUMINT,8,unsigned,PRIMARY],
for_unit [VARCHAR,255,NOT NULL] - tady vypisuješ unid_id,
contact_type [ENUM('phone','email')],
value [VARCHAR,255,NOT NULL]

• přihlašovací údaje v tabulce "users"
id [SMALLINT,5,unsigned,PRIMARY],
for_unit [VARCHAR,255,NOT NULL] - tady vypisuješ unid_id,
tady hodně bude záležet, jak s přístupovými údaji budeš pracovat a jestli zde použiješ nějaký kryptografický nástroj atp.

jak zařídím, aby, když vyplňují nějakou tabulku (nahlášení poruchy..) aby se u nich objevilo jméno bytu ( v tuto chvíli musí napsat své jméno a popsat poruchu, po přihlášení by jen popsali poruchu a systém by na základě přihlášení doplnil jméno
Nevím, jakou tabulku myslíš. Předpokládám, že máš na mysli formulář pro nahlášení poruchy. Taky počítám s tím, že když už je za této situace v tvé dosavadní aplikaci uživatel přihlášený, existuje tam parametr pro id přihlášené jednotky, čili na tom není nic složitého.

Jak tak sleduji, vzhledem k náročnosti se dá většina informací uložit do jedné tabulky a v dotazech si jen vždy vyselektuješ, které sloupce chceš použít.
Já nevím, jak ti s tímhle poradit. Určitě bych zkusil se zaměřit na jeden menší problém a předložil nějaký kód. Nemůžeš chtít, aby ti někdo z ničeho dokázal řešit konkrétní problémy, jeden přes druhý, v teorii a bez nějakého základu.
Honzik84
Profil *
Ahoj, tak přihlašování mi částečně funguje, ale už mi nefunguje přesměrování na stránku admin.php, napíše to
Warning: Cannot modify header information - headers already sent by (output started at /data/web/virtuals/16062/virtual/www/subdom/barak/prihlaseni.php:2) in /data/web/virtuals/16062/virtual/www/subdom/barak/prihlaseni.php on line 28


<?php
$spojenie = mysql_connect('xxx', 'xxx', 'xxx'); 
if (!$spojenie) { 
    die('Nemůžu sa připojit na databazi: ' .mysql_error()); 
} 
mysql_query('set names utf8'); 
mysql_query('SET COLLATION_CONNECTION=utf8');
  
$vybratie = MySQL_Select_Db("d16062_barak"); 
if (!$vybratie) { 
  die('Nemůžu sa připojit na databazi: ' .mysql_error()); 
}




$login = mysql_real_escape_string($_POST["nick"]);
$heslo = mysql_real_escape_string($_POST["heslo"]);



$dotaz = mysql_query("select * from uzivatel where Jmeno = '$login' and Heslo = '$heslo'");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
if($overeni == 1) {

header("Location: admin.php");
    die();
} else {
    echo"Zadal jsi špatný login nebo heslo!";
}
?>
lionel messi
Profil
Honzik84:
Ahoj, tak přihlašování mi částečně funguje, ale už mi nefunguje přesměrování na stránku admin.php, napíše to
Nejčastější potíže s PHP (FAQ) » headers already sent…
Honzik84
Profil *
Tak super, děkuji, úspěch, funguje.


Ještě mám vlastně jeden dotaz, když chci, aby po přihlášení si to pamatovalo uživatelské jméno, tak tak vložím toto?

 session_start();
    $_SESSION['login'] = stripslashes($login);


A jak pak vyvolám to uživatelské jméno? v další stránce?


Nebo nějaké jiné řešení?
martin1312
Profil
Na ďalšej stránke ho vyvoláš jednoducho takto:
session_start();
echo   $_SESSION['login'];
Honzik84
Profil *
Super, funguje, ještě mně napadá jedna otázka, co když někdo přijde přímo na adresu kde už vyvolávám session? jak udělám, aby se zkontrolovalo, jestli session Login není prázdné a pokud ano, tak aby ho to přesměrovoalo na stránku s přihlášením?
lionel messi
Profil
Honzik84:
jak udělám, aby se zkontrolovalo, jestli session Login není prázdné a pokud ano, tak aby ho to přesměrovoalo na stránku s přihlášením?
<?php
if (!isset($_SESSION['login']))
{
  header("Location: prihlaseni.php");
  exit();
}
?>
Honzik84
Profil *
Ok, přihlášení mi běhá, ještě jedna věc bych potřeboval, aby skript zkontroloval jestli ten co se přihlásí má v DB ve sloupci prava vlastnost admin. Pokud ano, aby jej to odkázalo na soubor - king.php. Pokud ma vlastnost user, tak do souboru admin.php
lionel messi
Profil
Honzik84:
1. Pripojíš sa k db.
2. Vytiahneš dáta z tabuliek.
3. A už je to jednoduché:
if ($row["privileges"] == "admin")
{
  header("Location: king.php");
  exit();
}
else
{
  header("Location: admin.php");
  exit();
}
Honzicek84
Profil *
A ještě jeden dotaz: mám uvedené jméno jako proměnnou a potřebuju aby mi to v DB kontakty našlo jen to jméno a vypsalo mi to ty řádky. Ale tohle mi nefunguje


$srchQ = "SELECT * FROM `kontakty` WHERE `Prijmeni` LIKE $jmeno LIMIT 0 , 100";


Ještě k těm přístupům, jak to tam dodám [#12] lionel messi?

<?php
$spojenie = mysql_connect('xxx', 'xxx', 'xxx'); 
if (!$spojenie) { 
    die('Nemůžu sa připojit na databazi: ' .mysql_error()); 
} 
mysql_query('set names utf8'); 
mysql_query('SET COLLATION_CONNECTION=utf8');
$vybratie = MySQL_Select_Db("d16062_barak"); 
if (!$vybratie) { 
  die('Nemůžu sa připojit na databazi: ' .mysql_error()); 
}
$login = mysql_real_escape_string($_POST["nick"]);/* nick zadaný ve formuláři pro přihlašování */
$heslo = mysql_real_escape_string($_POST["heslo"]);/* heslo zadané ve formuláři pro přihlašování */
$dotaz = mysql_query("select * from uzivatel where Jmeno = '$login' and Heslo = '$heslo'");
$overeni = mysql_num_rows($dotaz);
$row = mysql_fetch_array($dotaz);
if($overeni == 1) {
 session_start();
    $_SESSION['login'] = stripslashes($login);
header("Location: admin.php");
die();
} else {
    echo"Spatny login nebo heslo!";
}
?>
Honzik84
Profil *
funguje

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: