Autor | Zpráva | ||
---|---|---|---|
tomasara413 Profil |
#1 · Zasláno: 19. 10. 2013, 14:23:08
Zdravím, potřebuji pomoct. Již pár týdnů hledám pomoc se session v kódu zvanou $_SESSION['perms']. Snažím se udělat nevím jestli unikátní (zatím jsem to u moc lidí neviděl) permission systém. Psal bych to česky ale zní mi hloupě používat název "právní systém". No nic nevím jak získat data z databáze na určitém řádku zatím mi to jen vybíralo sloupce mělo by jít o systém založený na session a přidělení permission z databáze.
<html> <head> <meta http-equiv="content-type" content="text/html; charset=windows-1250"> <title></title> <style> .odstavec { margin-top: 0px; margin-bottom: 0px; } </style> <?php Header("Pragma: No-cache"); Header("Cache-Control: no-cache, must-revalidate"); Header("Expires: ".GMDate("D, d M Y H:i:s")." GMT"); $dbc = mysqli_connect('localhost','msqlinput','kolundrum') or die('could not connect: '. mysqli_connect_error()); mysqli_select_db($dbc, 'loginsystem') or die('no db connection'); session_start(); if(isset($_POST['go'])){ $usr = mysqli_real_escape_string($dbc, htmlentities($_POST['u_name'])); $psw = ($_POST['u_pass']); $q = "SELECT * FROM members WHERE username='$usr' AND password='$psw'"; $qp = "SELECT perms FROM members WHERE username='$usr'"; $res = mysqli_query($dbc, $q); $resp = mysqli_query($dbc, $qp); if(mysqli_num_rows($res) == 1){ $_SESSION['log'] = 'in'; $_SESSION['username'] = $_POST['u_name']; $_SESSION['perms'] = mysqli_num_rows($resp); header('location:novinky.php'); } elseif(!$_POST['u_name'] || !$_POST['u_pass']){ $error = 'Všechna pole musí být vyplněná!'; }else{ //vyvtoří chybovou zprávu $error = 'Chybné jméno nebo heslo. Prosím zkuste to znovu'; } }//konec issetu go ?> </head> <body> <form method="post" action="#"> <p class="odstavec"><label for="u_name">Uživatlské jméno:</label></p> <p class="odstavec"><input type="text" name="u_name" value=""></p> <p class="odstavec"><label for="u_pass">Heslo:</label></p> <p class="odstavec"><input type="password" name="u_pass" value=""></p> <p><button type="submit" name="go">Přihlásit</button></p> </form> <!-- A paragraph to display eventual errors --> <p><strong><?php if(isset($error)){echo $error;} ?></strong></p> </body> </html> A ano vím že nemám ochráňené heslo ale vše je zatím "provizorní". A předem děkuji za odpovědi. |
||
Kubo2 Profil |
tomasara413:
Načo prosím ťa dávaš odstavcu class="odstavec" ? Prečo nenapíšeš do stylopisu niečo logické, ako toto?
form > p { margin: 0 auto; } /* margin: top right bottom left - hodinové ručičky */ 1/ Nemusíš používať dva dotazy do databáze, najprv zbytočne vyťahuješ všetky stĺpce ( * ) a hneď nato opäť stĺpec perms - čo z toho, že používaš v názvoch angličtinu, keď si hneď na to bez rozmýšľania vytvoríš jeden zbytočný SQL dotaz?
Stačí ti toto (funguje tak isto): $uperms = mysqli_query($dbc, " select `perms` from `members` where `username` = '$usr' and `password` = '$psw' "); if ($uperms = mysqli_fetch_row($uperms) !== NULL) { $_SESSION["perms"] = $uperms[0]; unset($uperms); // kód ak používateľ existuje } else { // ... chyba ... } 3/ Čo vlastne mieniš tým že „mělo by jít o systém založený na session a přidělení permission z databáze“? Čo máš uložené v stĺpci `perms`? (Urobil by som si z toho asi typ set → `perms` set('hodnoty', 'oddelené', 'čiarkami') not null a s tými potom nejak pracoval.)
|
||
Lkopo Profil * |
#3 · Zasláno: 19. 10. 2013, 19:13:26
S tými permission očakávam, že si tam chce uložiť oprávnenia užívateľa, kam alebo čo, môže/nemôže urobiť. Inak, vidím tam ošetrenie na SQL Injection na
u_name políčko, ale na u_pass si nejak zabudol. Taktiež odporúčam si prejsť Session Hijacking (http://cleverlogic.net/tutorials/session-hijacking-0 - tu máš pekný článok) a ako bonus ešte CSRF protekciu.
|
||
tomasara413 Profil |
#4 · Zasláno: 20. 10. 2013, 13:38:34
Kubo2:
Možná že to fungovat bude, ale ne jako odpověď v session, login sice funguje ale session se rovná nule nebo se chová jako prázdná a žádné číslo popř. jméno skupiny se nezobrazí když upravím kód aby vypsal session['perms']. V případě ani nenastaví. Takže bohužel zrovna tohle mi moc nepomohlo :/ |
||
Kubo2 Profil |
tomasara413:
Prepáč, netestoval som to a ani nebudem, pretože zrovna pristupujem cez mobil, ale teoreticky by to fungovať malo, hlavne keď si dáš vypisať $_SESSION["perms"] namiesto session['perms'].
Ďalej skús kód: <?php session_start(); if (isset($_SESSION["test"])) die($_SESSION["test"]); $_SESSION["test"] = "128bit"; |
||
tomasara413 Profil |
#6 · Zasláno: 20. 10. 2013, 16:38:03
Kubo2:
Jak jsem již psal kód jsem upravil a session jsem upravil tak aby mi tam šla v tom chyba není a ano 128bit to napsalo |
||
Kubo2 Profil |
#7 · Zasláno: 20. 10. 2013, 18:55:31
tomasara413:
Tak potom vidím jediný problém v práci s databázou alebo v databázi. (Pretože ak ti išlo nastaviť $_SESSION[test], nie je dôvod, aby nefungovalo $_SESSION[perms].) |
||
Časová prodleva: 23 dní
|
|||
tomasara413 Profil |
#8 · Zasláno: 12. 11. 2013, 19:17:53
Jsem si toho vědom, problém bude určitě v databázi, protože jsem prošel několik webů a skoušel jsem sestavovat různé skripty nakonec jsem to musel úplně předělat a udělat na jiné bázi. Protože ať jsem dělal co jsem dělal. Vždy byla testovací stránka úplně prázdná, samozřejmě pomineme-li reklamu. Toto je můj poslední zoufalý pokus o něco trochu jiného ale na stejný princip.
<?php mysqli_connect('localhost','mysqlinput','kolundrum'); mysqli_select_db('uzivatelskeclanky'); $vysledek = mysqli_query('SELECT nadpis FROM clanky'); while($info = mysqli_fetch_array($vysledek)){ print "<b>Nadpis:</b>".$info['nadpis'].""; } ?> |
||
weroro Profil |
tomasara413:
Nevyhadzovalo ti to chyby? mysqli vyžaduje dva parametre (objekt databazy, SQL dotaz) <?php $db = mysqli_connect('localhost', 'mysqlinput', 'kolundrum'); mysqli_select_db($db, 'uzivatelskeclanky'); $vysledek = mysqli_query($db, 'SELECT nadpis FROM clanky'); while($info = mysqli_fetch_array($vysledek)) { print_r ('<b>Nadpis:</b>' . $info['nadpis']); } ?> |
||
tomasara413 Profil |
#10 · Zasláno: 14. 11. 2013, 18:37:46
weroro:
Opravdu děkuju... Konečně... Opravdu moc děkuju. Problém se vyřešil vše funguje. A hlášku to nevyhazovalo. Ale funguje to a to je hlavní. |
||
Časová prodleva: 10 let
|
0