Autor | Zpráva | ||
---|---|---|---|
Neas Profil |
#1 · Zasláno: 25. 5. 2011, 21:09:24 · Upravil/a: Neas
jestli chceš přidat další hodnosti, stačí tam vklínit další elseif klauzule, nebo to celé nahradit switchem:
switch($_SESSION['prava']) { case 0: foo(); //uzivatel break; case 1: foo(); //admin break; case 2: foo(); //moderator break; default: foo(); //neprihlaseny uzivatel } |
||
davidmyska Profil |
#2 · Zasláno: 26. 5. 2011, 06:40:52
ještě mám dva malé dotazy a jeden nesouvisející:
1. Co znamená to foo()? 2. do čeho mám vložít ten tvůj kód do scriptu nebo php? 3. A jak se dělá to označení (viz #25)? |
||
jenikkozak Profil |
#3 · Zasláno: 26. 5. 2011, 10:12:45
davidmyska:
Bez znalosti základů PHP se na to raději vykašli. „1. Co znamená to foo()?“ Část skriptu, která se provede určité hodnosti. „2. do čeho mám vložít ten tvůj kód do scriptu nebo php?“ Že by do PHP skriptu? „3. A jak se dělá to označení (viz #25)?“ Na jaké označení se ptáš? |
||
davidmyska Profil |
#4 · Zasláno: 26. 5. 2011, 11:56:10
myslím to orámování části textu
|
||
jenikkozak Profil |
#5 · Zasláno: 26. 5. 2011, 12:00:25
davidmyska:
Vzniká tady na diskusi tak, když v kódu (Ctrl + E) použiješ tučnost (Ctrl + B). |
||
davidmyska Profil |
#6 · Zasláno: 26. 5. 2011, 12:33:28 · Upravil/a: davidmyska
já nemyslím vkládání kódu ale označování části kódu rámečkem
|
||
jenikkozak Profil |
#7 · Zasláno: 26. 5. 2011, 12:42:03
Navrhuji udělat následující kroky:
1) Zajít na hřiště. 2) Začít psát nový příspěvek. 3) Vložit do něj nějaký text, označit jej jako kód. 4) Část textu označeného jako kód ztučnit. 5) Radovat se z úspěchu. Nebo: 1) Tady vložit do nového příspěvku kus kódu. 2) Přidat do kódu tučnost. 3) Kliknout na Ukázat náhled. 4) Radovat se z úspěchu. 5) Raději to zase smazat. |
||
davidmyska Profil |
#8 · Zasláno: 26. 5. 2011, 14:33:55
díky už jsem i tu tvou předchozí zprávu pochopil
|
||
davidmyska Profil |
#9 · Zasláno: 26. 5. 2011, 18:34:21
nějak mi to pořád nechce jet dal jsem tam toto a nejede:
<?php switch($_SESSION['prava']) { case 0: echo "Přihlášen"; break; case 1: echo "Admin"; break; default: echo "Nepřihlášen"; } ?> |
||
jenikkozak Profil |
#10 · Zasláno: 26. 5. 2011, 18:54:54
davidmyska:
Uvedný kód je pouze pátým článkem řetězu. Před tímto kódem musíš údaj o právech uložit do SESSION (4. krok), před tím je musíš vylovit v databázi (3. krok), před tím je v té databázi mít a nejprve je tam vložit. Máš předchozí kroky splněné? |
||
davidmyska Profil |
#11 · Zasláno: 26. 5. 2011, 19:10:06 · Upravil/a: davidmyska
1 a 2 mám do databáze se automaticky vkládá "0"
3 připojení k databázi tam je ale jestli i k tabulce to nevím 4 to asi ne tady je skoro celý kód index.php (vynechal jsem pouze nepotřebné html části): <?php $path = "/"; // máte-li stránky v rootu, nechte bezezměny, pokud je provozujete v nějakém podadresáři, zadejte jeho jméno // např. stránky mám na moje-domena.cz/adresar/, tak zadám $path = "/adresar/"; // funkce pro ošetření vstupních dat od uživatele // viz http://cz.php.net/manual/en/info.configuration.php#ini.magic-quotes-gpc function gpc_addslashes($str) { return get_magic_quotes_gpc() ? $str : mysql_real_escape_string($str); } include "db.php"; // soubor db.php zajistí připojení k databázi a výběr databáze, se kterou pracujeme session_start(); // tohle je nezbytné a je nutné uvést tuto funkci na všech stránkách, kam se přihlášený uživatel dostane // možnost nastavit automatické spouštění session_start() nechávám stranou // zjistíme, co chce uživatel dělat if (isset($_SESSION['username']) && isset($_GET['logout'])) { // uživatel je přihlášen a chce se odhlásit, takže smažeme údaje o přihlášení $_SESSION = array(); if (isset($_COOKIE[session_name()])) { setcookie(session_name(), '', time()-42000, '/'); } session_unset(); session_destroy(); // a přesměrujeme na index.php header("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303); exit; } elseif (isset($_SESSION['username'])) { //session_regenerate_id(); // ochrana před session fixation, lze vynechat // uživatel je přihlášen a nechce se odhlásit, zde zobrazíme obsah pro registrované // můžeme využit include apod. // tohle informuje uživatele, že je přihlášen a vypíše odkaz pro odhlášení // můžeme to ale přemístit do includovaného souboru (kam se nám hodí) echo "<p>Přihlášen/a: $_SESSION[username] <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout=1\">odhlásit</a></p>\n"; } else { // uzivatel není přihlášen // pokud odeslal přihlašovací údaje, snaží se přihlásit if (isset($_POST['username']) && isset($_POST['password'])) { // ošetříme vstupní údaje od uživatele // funkce trim() má význam hlavně u hesla, ořeže bílé znaky (např. mezery) na začátku a konci řetězce $username = gpc_addslashes(trim($_POST['username'])); $password = gpc_addslashes(trim($_POST['password'])); // zjistíme, jestli je v databázi daný uživatel a jestli se prokazuje platným heslem // více o ukládání hesel, např. o tzv. solení, najdete na http://php.vrana.cz/ukladani-hesel.php $result = mysql_query("SELECT COUNT(*) FROM users WHERE username = '$username' AND password = sha1('$password')"); if (mysql_result($result, 0)) // předpokládáme, že dotaz proběhl úspěšně, pokud ne, bude stejně vráceno false // true (a splnění podmínky) nastane pouze tehdy, když v databázi existuje správná kombinace uživatelského jména a hesla { // uložíme potřebné SESSION proměnné $_SESSION['username'] = $username; $_SESSION['cas_prihlaseni'] = time(); // čas, kdy se uživatel přihlásil, pozor, nejedná se o čas poslední akce, nevím, jestli ho využijete, může být smazán // po přihlášení uživatele přesměrujeme na index.php header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php", TRUE, 303); exit; // aby bylo pravidlům učiněno zadost, zde stejně končí podmínka a jiná nemůže být splněna } else { // uživatel zadal neplatné přihlašovací údaje // přesměrujeme ho na login.php a zobrazíme chybovou hlášku header ("location:http://".$_SERVER['SERVER_NAME'].$path."index.php?incorrect_login=1", TRUE, 303); exit; } } else { // uživatel není přihlášen a ani neodeslal přihlašovací formulář, tak mu ho zobrazíme echo "<div>"; if (isset($_GET['incorrect_login'])) { echo "<p style=\"color: #F00\">Zadali jste neplatné uživatelské jméno nebo heslo</p>\n"; } // zobrazíme formulář pro přihlášení ?> <a href="registrace.html">registrace</a><br> <form action="index.php" method="post"> Jméno: <input name="username" type="text"><br> Heslo: <input name="password" type="password"><br> <input name="submit" type="submit" value="Přihlásit"> </form> </div> <?php } } ?> <?php switch($_SESSION['prava']) { case 0: echo "Přihlášen"; break; case 1: echo "Admin"; break; default: echo "Nepřihlášen"; } ?> |
||
jenikkozak Profil |
#12 · Zasláno: 26. 5. 2011, 21:13:32
davidmyska:
„a pak se chci zeptat jestli tato část tam může být vícekrát“ Kromě definicí funkcí můžeš většinu věcí mít víckrát. Ale pokud budeš takový kód zase kopírovat někdy někam na diskusi, tak jej zkrať. Proč sem dáváš kilometr komentářů v tom kódu? Přidej do svého kódu ty části, které jsou zvýrazněné na předchozí straně v 25. příspěvku (jak jsi tam obdivoval to zvýraznění). |
||
davidmyska Profil |
#13 · Zasláno: 27. 5. 2011, 06:54:53
Stále mi to píše "přihlášen"
|
||
Časová prodleva: 4 dny
|
|||
Neas Profil |
#14 · Zasláno: 30. 5. 2011, 21:23:14
ve scriptu, který si zde teď uvedl, nikde nevidím přiřazení nějaké hodnoty do proměnné $_SESSION['prava'] (tak, jak jsem ti radil v příspěvku 25). switch pak pravděpodobně vrací false (ekvivalentní s nulou, která vypisuje "přihlášen").
|
||
davidmyska Profil |
#15 · Zasláno: 31. 5. 2011, 06:49:36 · Upravil/a: davidmyska
já jsem to vyřešil naknec s takto:
elseif (isset($_SESSION['username'])) { echo "<p>Přihlášen/a: <b>$_SESSION[username]</b> <a href=\"http://".$_SERVER['SERVER_NAME'].$path."index.php?logout= \">odhlásit</a></p>"; if ($username == admin){ echo "Admin"; } else { echo "Přihlášený"; } } ale i tak díky za snaho já vím že se mnou je to těžké |
||
Časová prodleva: 11 měsíců
|
|||
kaja Profil |
#16 · Zasláno: 2. 5. 2012, 21:03:44
dotaz! Jak vytvořím databázi uživatelů ?
|
||
Davex Profil |
#17 · Zasláno: 2. 5. 2012, 21:13:19
Vytvoříš tabulku v databázi.
|
||
Časová prodleva: 13 let
|
0