Autor Zpráva
tomasara413
Profil
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 ...
}

2/ Ty si nehashuješ používateľské heslá? Prečo hashovať?
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 *
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
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";
Ulož, zobraz a ak sa ti po reloade nezobrazí text 128bit, tak bude chyba v sessions.
tomasara413
Profil
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
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].)
tomasara413
Profil
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']."";
}
?>
Databázi používám na endoře, jde mi do ní zapisovat, ověřovat z ní ale zobrazit data... to prostě nejde. Nevím jistě jestli dělám něco špatně, ale když mi už asi 5 stránek nepomohlo, bude chyba někde na cestě nebo úplně v databázi. Popř. jestli někde dělám chybu napište. Děkuji
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
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í.

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: