Autor Zpráva
Microfox
Profil *
Ahoj, řeším omezeni prav...uzivatele maji prava nastavena na "0". A vsichni co maji prava nastavena na 1 dostanou se na stranku kam uzivatel s "0" nemuze. Nevite nekdo jak to poresit? Musej tam bejt znaminka ale nevim jak to udelat

<?php
if(!isset($_SESSION['prihlasen']) and @$_SESSION['prihlasen']!=0){
  echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2>
</div>';
  exit;
}
Bertram
Profil
if(isset($_SESSION['prihlasen']))
{
  if($_SESSION['prihlasen'] == 0)
  {
     echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2></div>';
  }
}


A co takhle
if(!isset($_SESSIONS['admin']))
{
   echo '<div align="center"><h2>Nejsi přihlášen nebo nemáš dostatečná práva prohlížet tuto stránku</h2></div>';
}
Tori
Profil
Divná podmínka - klíč 'prihlasen' nesmí být definovaný a zároveň jeho hodnota musí být nenulová. To lze vůbec splnit??
if(!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1) 
  exit;
//... Sem projdou jen ti, co jsou přihlášení a zároveň mají oprávnění 1.

if(!isset($_SESSION['prihlasen']) || !($_SESSION['prihlasen'] >= 1)) 
  exit;
//... Sem projdou jen ti, co jsou přihlášení a zároveň mají oprávnění rovno nebo větší než 1.
Bertram
Profil
Tori:
Klikni si na to isset
Tori
Profil
Bertram:
Ok, uznávam, pokud $_SESSION[prihlasen] === NULL, tak se Microfoxova podmínka asi splní (předpokládám, že odpovídáte na mou zčásti řečnickou otázku).
Bertram
Profil
Tori:
Ne, myslím tím to, že podle mého operátory ve funkci isset() nemají co dělat.
Microfox
Profil *
no je to stejne cele podivne....
<?php
ob_start();
/*
* Tetno soubor zjisti zda se takovy uzivatel s takovym heslem v databazi nachazi.
* Pokud ano, do sessions o tom ulozime informaci.
* Jinak se samozrejme presmerujeme zpet a dame uzivateli vedet, ze zadal spatne udaje
*/
session_start(); // Budeme pracovat se session, musíme je nastartovat.
if(isset($_POST['jmeno'])){
  require_once 'db.php';
  $name = $_POST['jmeno'];
  $pass = md5($_POST['heslo']);
    $query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error());
    // Vybereme uživatele se zadaným jménem a heslem
      $Vysledek = mysql_fetch_array($query);
      $Vysledek['jmeno'];
        if($Vysledek['jmeno']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo
          // Do sessions si uložíme pár informací o přihlášeném
          $_SESSION['prihlasen'] = 1;
          $_SESSION['login'] = $Vysledek['jmeno'];
          $_SESSION['UserId'] = $Vysledek['id'];
          $_SESSION['Prava'] = $Vysledek['prava'];
          $bl="index.php";
          header("location: $bl"); // přesměrujeme na index
          exit;
        }else{
          $bl="index.php?Alert=6";
          header("location: $bl"); // špatně zadané údaje
          exit;
          // echo "Zadal jsi špatné údaje";
        }
    mysql_free_result($query);
}else{
  echo "Zde nic není.";
}
ob_end_flush();
?>



a at pouziju jakykoliv kod ktery jste sem dali tak to proste nefunguje...vubec nebere ohled na prava...jako kdyby sloupec neexistoval coz existuje a zkousel jsem menit cisla a nic...je to nake divne...nicmene ty Vase kody urcite bezpochyby jsou ok ale nevim kde je chyba :-( Uz to tady hledam tak pul hodky a urcite to bude blbost :D jen si toho vsimnout...
Microfox
Profil *
samozrejme ze moje podminka tedy vypada takto:
if(!isset($_SESSION['prihlasen']) || !($_SESSION['Prava'] >= 1)) 
Microfox
Profil *
pardon... takto
if(!isset($_SESSION['prihlasen']) and @($_SESSION['Prava'] >= 1)) 
Jan Tvrdík
Profil
Microfox:
Správnou podmínku zde již výše uvedla Tori:
session_start();
// ...
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1) {
    echo 'Musíš být přihlášen';
    exit;
}

Máš správně vyřešené odhlašování?

Nesouvisející poznámka k uvedenému kódu: Proměnné $name a $pass je potřeba ošetřit funkcí mysql_real_escape_string, abys zabránil SQL injection
Microfox
Profil *
Jan Tvrdík:
Tu nesouvisejici poznamku jsem nak moc nepochopil...nevim co je na tom k osetreni??? Ja mam takove tuseni ze presne tohle uz jsem jednou resil a nic jsem neosetroval...to je velmi zajimave... a jak tedy bude vypadat kod ? hm? z toho nejsem dost moudry abych pravdu rekl
Bertram
Profil
Tori:
Omlouvám se už pro oči nevidím na závorky, takže zítra naschle.
Microfox
Profil *
jo aha...tak jestli jsem spravne vyrozumel, tak muj dotaz ohledne na prava neresil ten nesouvisejici odkaz...to bylo jen upozorneni na pripadny problem v kodu... fajn, ale co ty prava co ten problem jak jsem zde popisoval? vi nekdo neco co s tim?
Jan Tvrdík
Profil
Microfox:
Tu nesouvisejici poznamku jsem nak moc nepochopil
Pokud $_POST['heslo'] bude obsahovat apostrof ('), tak SQL dotaz skončí chybou.

jak tedy bude vypadat kod
$name = mysql_real_escape_string($_POST['jmeno']);
$pass = md5($_POST['heslo']); // $pass není potřeba ošetřovat, protože funkce md5 vrátí vždy bezpečný řetězec
$query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error());

co ten problem jak jsem zde popisoval?
Zkus ho popsat lépe. Jak se projevuje to, že to vubec nebere ohled na prava? Máš správně vyřešené odhlašování?
Microfox
Profil *
Jan Tvrdík:
Nemyslim si ze by to melo neco spolecneho s odhlasovanim.... to je skript uplne mimo...
Jinak kod na odhlaseni vypada takto:
<?php
ob_start();
// odhlaseni autora
if(IsSet($_GET['logout']) and $_GET['logout']=="yes") {
  Session_Start();      // Pokud chceme pracovat se session, musíme je "nastartovat". I pokud je chceme zničit.
  Session_Destroy(); // Zničíme sessions
}
header ("location: index.php"); // přesměrujeme na index
ob_end_flush();
?>


A ted jak se projevuje ten muj dany problem...
 if(!isset($_SESSION['prihlasen']) and !($_SESSION['Prava'] >= 2)) 
- takto mam podminku a presto kdyz na tu stranku kliknu tak se na ni dostanu ikdyz mam ve sloupecku prava u sveho uzivatele prava 1...
Jan Tvrdík
Profil
Microfox:
if(!isset($_SESSION['prihlasen']) and !($_SESSION['Prava'] >= 2))
Tohle je blbost. Místo and tam musí být or.

Zkus tohle:
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) {
    echo 'Musíš být přihlášen';
    exit;
}

Poznámka na okraj: Je dobré mít všechna první písmena klíčů malým písmenem (tj. používat $_SESSION['prava'] místo $_SESSION['Prava']).
Microfox
Profil *
Jan Tvrdík:
:-( hm tak ani toto nezabralo :-/ jeste zkusim udelat v tom predchozim souboru
$_SESSION['Prava'] = $Vysledek['prava'];
na
 $_SESSION['prava'] = $Vysledek['prava'];
= v tehle podmince to bude malym pismenem jak jste mi doporucil, ale ze by pismeno na to melo vliv to bych se divil...ikdyz nekdy se clovek divi i nemoznemu... nevim stale kde je ten zakopanej pes
Microfox
Profil *
Koukam na to a beru to vsechno postupne...
Jako prvni soubor - login_zpracuj.php
<?php
ob_start();
/*
* Tetno soubor zjisti zda se takovy uzivatel s takovym heslem v databazi nachazi.
* Pokud ano, do sessions o tom ulozime informaci.
* Jinak se samozrejme presmerujeme zpet a dame uzivateli vedet, ze zadal spatne udaje
*/
session_start(); // Budeme pracovat se session, musíme je nastartovat.
if(isset($_POST['jmeno'])){
  require_once 'db.php';
  $name = mysql_real_escape_string($_POST['jmeno']);
  $pass = md5($_POST['heslo']);
    $query = mysql_query("SELECT * FROM `tabulka` WHERE `mail` = '$name' and `heslo` = '$pass'") or die (mysql_error());
    // Vybereme uživatele se zadaným jménem a heslem
      $Vysledek = mysql_fetch_array($query);
$Vysledek['jmeno'];
        if($Vysledek['jmeno']){ // pokud tato proměnná obsahuje data, bylo zadané správné jméno a heslo
          // Do sessions si uložíme pár informací o přihlášeném
          $_SESSION['prihlasen'] = 1;   // Tak tady mame prvni informaci ulozenou do SESSION jestli je uzivatel prihlasen
          $_SESSION['login'] = $Vysledek['jmeno'];
          $_SESSION['UserId'] = $Vysledek['id'];
          $_SESSION['prava'] = $Vysledek['prava']; // A tady informace c.2 s kterou pracuji
          $bl="rs.php";
          header("location: $bl"); // přesměrujeme na index
          exit;
        }else{
          $bl="rs.php";
          header("location: $bl"); // špatně zadané údaje
          exit;
          // echo "Zadal jsi špatné údaje";
        }
    mysql_free_result($query);
}else{
  echo "Zde nic není.";
}
ob_end_flush();
?>


Z tohoto kodu se da vyvodit, ze do SESSION jsou spravne ulozene informace...takze podminka na nake strance kde budu kontrolovat jake ma uzivatel prava by mela fungovat...
<?php
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['prava'] < 2) {
    echo 'Musíš být přihlášen';
    exit;
}
?>


Nerozumim v cem je problem...kdyz to bere informaci SESSION prihlasen tak to musi vzit i ty prava... Sloupec v databazi se jmenuje prava tudiz jak je v tom ulozeni do SESSION $Vysledek['prava']; tak to je vytazeni z DB...
Fakt nevidim v tomhle problem...Kdyz to mam takhle tak nemam pristup na tu danou stranku nikdy ikdyz si v DB upravim prava treba na 4 nebo na 1 proste nikdy...zahlasi to ze musim bejt prihlasen... Fakt si stim nevim rady
Jan Tvrdík
Profil
session_start();
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['prava'] < 2) {
    echo "<pre>Zamítám přístup na základně následujících informací v session:\n\n";
    print_r($_SESSION);
    echo "</pre>\n";
    exit;

} else {
    echo "<pre>Povoluji přístup na základně následujících informací v session:\n\n";
    print_r($_SESSION);
    echo "</pre>\n";
    exit;
}
Microfox
Profil *
ani toto nepomohlo :-( Porad to hlasi "Musíš být přihlášen"
1Pupik1989
Profil
if(isset($_SESSION['prihlasen']) and $_SESSION['prava'] >= 1) 

Takto podobně to mám řešené i já. Nic špatně na tom není. Co vypíše
echo $_SESSION['prava'];
echo $_SESSION['prihlasen'];


?
Microfox
Profil *
1Pupik1989:
Kdyz tam dam na tu stranku
echo $_SESSION['prava'];
- nevypise to nic
Kdyz toto
echo $_SESSION['prihlasen'];
- vypise to "1"
Tzn. ze se teda do SESSION neulozily ty prava.... proc ale? Copak je v tom kodu neco spatne?

     $_SESSION['prihlasen'] = 1;
          $_SESSION['login'] = $Vysledek['jmeno'];
          $_SESSION['UserId'] = $Vysledek['id'];
          $_SESSION['prava'] = $Vysledek['prava'];


??? kdyz tam dam
echo $_SESSION['login'];
- tak to funguje, ale proc to nechce vypsat ty prava sakra ??
Jan Tvrdík
Profil
// ...
$Vysledek = mysql_fetch_array($query);
print_r($Vysledek);
exit;
// ...
Microfox
Profil *
Hele, ted me napada asi takova jedna vec...jednu vec kterou jsem neudelal...kdyz se prece prihlasuju, uklada to informace do SESSION, myslim ze bude dobre se odhlasit a znovu prihlasit aby ty informace se do SESSION ulozily...mozna tu fakt resime pitomost :D
momentik, neco zkusim
Microfox
Profil *
no jasne, odhlasil jsem se, prihlasil a uz to ukazuje prava :-) kurna, me to vubec hned nenapadlo... achjooo takze ted muzu pouzit treba tento kod?

if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) {
    echo 'Musíš být přihlášen';
    exit;
}
Microfox
Profil *
tak hlavne ze jsem vyresil teda ty prava ale problem je opet na zacatku kde vznikl...at mam jakykoliv nastaveny cislo, tak se stejne na tu stranku dostanu... tudiz v teto podmince
if (!isset($_SESSION['prihlasen']) || $_SESSION['prihlasen'] != 1 || $_SESSION['Prava'] < 2) {
je zrejme chyba... podle me v tom operatoru...pry by tam spravne nemel byt...
Jan Tvrdík
Profil
Opakuj postup z [#19] a ujisti se, zda máš v session práva s p nebo s P.
Microfox
Profil *
tak asi ne...je zapotrebi se vzdycky odhlasovat a prihlasovat...ono to pri uprave vlastniho uzivatele pres web neaktualizuje session... takze problem je zrejme vyresen...
1Pupik1989
Profil
Tak jednodušše v login.php dej na začátek
session_destroy();
, aby se zrušili všechny session proměnné.

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: