| 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: 13 let
|
|||
0