Autor Zpráva
JardaK
Profil *
Ahoj, potřeboval bych poradit

dělám stránky, kde je menu kompletně načítáno z databáze. Každá položka menu má v databázi nastavené práva komu se zobrazí a komu ne(Admin, Intranet, Neprihlasen) a stejně tak i uživatelé mají nastavena ve svém řádku tabulky USERS práva. Nevím jak zajistit, aby se při přihlášení uživatele pod jménem a heslem načetlo z databáze USERS oprávnění a nastavilo se jako SESSION.
Pak by se menu postavilo samo příkazem "SELECT * FROM menu WHERE opravneni="$_SESSION"

takto mi to nefunguje:



<?php
session_start();

if ($ok) {
mysql_connect('mysql.wz.cz','xxxxx','xxxxx');
mysql_select_db("xxxxxx");
$sql = "select heslo, opravneni from users where nick= '$nick'";
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) && ($heslo)==mysql_result($res,0)) {
$_SESSION["opravneni"]=$opravneni;
Header("Location:$back");
exit;
}
else
$chyba = true;
}
?>
.
.
.
.
<?php
if ($chyba)
echo "<p style="color: #ff0000">Chybné přihlašovací údaje, zkuste to prosím znovu</p>";
?>



Díky moc
Alphard
Profil
mysql_connect('mysql.wz.cz','xxxxx','xxxxx');
mysql_select_db("xxxxxx");
$sql = "select heslo, opravneni from users where nick= '$nick'";
$res = mysql_query($sql);
if ($res && mysql_num_rows($res) && ($heslo)==mysql_result($res,0)) {
$_SESSION["opravneni"]=$opravneni;


kdes sebral $opravneni?
JardaK
Profil *
To bych právě potřeboval načíst z tabulky USERS a nacpat ho do session, bohužel netuším jak.... toto je jeden z marných pokusů....
$opravneni tam samozřejmě není, to by musel vyplnit user do formuláře spolu se jménem a heslem a to je blbost...
Alphard
Profil
sorry, ale nechápu tvůj přihlašovací systém
to by musel vyplnit user do formuláře spolu se jménem a heslem a to je blbost
zadávat při přihlášení jméno a heslo je podle mě běžné
JardaK
Profil *
Ne já myslel že by musel vyplňovat nějaké pole oprávnění.... aby tam mohlo být to $opravneni, na které jsi se ptal, kde jsem vzal...
Tak znovu...
Mam tabulku USERS, která má sloupce: |nick| |heslo| |opravneni|
druhou tabulku MENU a ta má sloupce: |odkaz| |link| |opravneni|
a potřebuji nějak docílit toho aby se po vyplnění jména a hesla do Login formuláře nastavila SESSION proměná na hodnotu opravneni u příslušného USERa.

Př. v databázi mám
Jméno: Tonda
Heslo : tajne
opravneni: admin

Jméno:Franta
Heslo: Tajné
oprávnění: intranet

a já potřebuji, aby když se přihlásí Tonda s heslem tajne, aby se SESSION nastavila na admin
a
pokud se přihlásí Franta, tak aby se SESSION nastavila na intranet
a
pokud bude user nepřihlášen, tak aby byla SEESION nastavena jako neprihlasen a podle toho jaká bude nastavena SESSION se mi načtou položky menu.

Doufám, že už se mi podařilo můj problém trochu osvětlit
Alphard
Profil
$result = mysql_query ("select opravneni from USERS where nick = '$nick' and heslo = '$heslo'");
if (!$result) echo mysql_error(); else {
if (mysql_num_rows ($result) > 0)
list ($_SESSION['opravneni']) = mysql_fetch_row ($result);
else
$_SESSION['opravneni'] = "neprihlasen"; }
JardaK
Profil *
Díky,
ale ještě to není ono...
nyní když chci přejít na stránku, na které požaduji mít nastavenou SESSION admin na to, abych ji mohl prohlížet

<?php
session_start();
if (!$_SESSION ["admin"]) {
Header("Location:login.php?back=$PHP_SELF");
exit;
}
?>

tak povyplnění jména a hesla se mi akorát refreshne stránka s loginem. Když je na zaheslované stránce

<?php
session_start();
if (!$_SESSION ["opravneni"]) {
Header("Location:login_ad.php?back=$PHP_SELF");
exit;
}
?>

Tak vše funguje, po loginu se objeví požadovaná stránka. Tudíž se asi pravděpodobně nastavuje pouze jedinná session a to je "opravneni"
Alphard
Profil
špatně jsi to pochopil, opravnení se ukládá jako hodnota do $_SESSION['opravneni'], možná by to chtělo trochu projít pár článků s popisem práce s poli

if ($_SESSION ["opravneni"] != "admin") {
JardaK
Profil *
Paráda,
už mi to funguje =o)
díky moc
Měj se
JardaK
Profil *
Tak jsem narazil na další problém....
nakonec jsem použil pro SESSION hodnoty:

1 = nepřihlášen
2 = intranet
3= intranet 2 úrovně
4 = admin

sloupec opravneni v tabulce menu používá stejné hodnoty ale SQL příkaz, kterým jsem si byl téměř jistý že bude fungovat mi nejde

$sql="(SELECT * FROM menu WHERE opravneni < = '$_SESSION')";


Chtěl jsem tím docílit toho, aby přihlášený uživatel viděl vše co nepřihlášený nebo přihlášený s menšími právy + to co je navíc pro něj.
Když jsem jen tak zkusil

<?php
echo"$_SESSION"
?>

abych zjistil, co se do SESSION uložilo,
vyplivlo to na mě pouze Array. Tuším že tady je problém, že to porovnává jestli je nějaké číslo <= Array
Alphard
Profil
pouze echo $_SESSION vypíše array, protože to je pole, musí se použít $_SESSION['neco'], tedy upřesnit, co tě zajímá
pro vypsání všech hodnot pole lze použít třeba print_r($_SESSION);
Alphard
Profil
Tak jsem narazil na další problém....
nakonec jsem použil pro SESSION hodnoty:

1 = nepřihlášen
2 = intranet
3= intranet 2 úrovně
4 = admin


takže bude
$_SESSION['opravneni'] = 2; // nebo 1, 3, 4

$sql = "SELECT * FROM menu WHERE opravneni < = " . $_SESSION['opravneni'];
btw: v závorkách to bylo proč?
JardaK
Profil *
Takto mi to také nejde...



<?php
$sql = "SELECT * FROM onas WHERE opravneni < = " . $_SESSION['opravneni'];
$result = mysql_query($sql);
$resultsnumber = mysql_numrows($result);
echo "<table width='182' cellpadding='0' cellspacing='0' border='0'>
<tr>
<td>
<a href='index.php?c=onas' class='menu_odkaz'>O nás</a></td>
</tr>";
while ($myrow = mysql_fetch_array($result))
{
$id = $myrow["id"];
$topic = $myrow["topic"];
$link = $myrow["link"];
echo"<tr><td><a href='$link' class='menu_odkaz2'><img src='img/list_menu.gif' width='28' height='9' alt=''>&nbsp;$topic</a></td>";}
echo"</tr></table>";
?>


pro zjednodušení jsem vložil jen script pro jednu položku menu a to je sekce O nás, která mám mít pod sebou načtené odkazy 2 úrovně z tabulky section.
Každá sekce má svou tabulku, tudíž tady se odkazuji na tabulku "onas"

Hází mi to tento error:


Warning: mysql_numrows(): supplied argument is not a valid MySQL result resource in /3w/wz.cz/w/webcheck/index.php
Alphard
Profil
$resultsnumber = mysql_numrows($result);
co to má dělat?

1. tato funkce neexistuje, asi myslíš mysql_num_rows();
2. $resultsnumber nikde nepoužíváš

zkontroluj dotaz:
$sql = "SELECT * FROM onas WHERE opravneni < = " . $_SESSION['opravneni'];
echo $sql;
JardaK
Profil *
no netušim fakt ....
schválně jukni co mi to tam vyvádí
http://www.webcheck.wz.cz
SESSION se podle mě nastavuje dobře, ale z nějakého důvodu to nenačte to menu....
JardaK
Profil *
<?php

$sql = "SELECT * FROM onas WHERE opravneni < = " . $_SESSION['opravneni'];
echo"$sql";
$result = mysql_query($sql);
echo "<table width='182' cellpadding='0' cellspacing='0' border='0'>
<tr>
<td>
<a href='index.php?c=onas' class='menu_odkaz'>O nás</a></td>
</tr>";
while ($myrow = mysql_fetch_array($result)) //podle hlášky co to píše tuším že chyba je na tomto řádku...
{
$topic = $myrow["topic"];
$link = $myrow["link"];
echo"<tr><td>
<a href='$link' class='menu_odkaz2'><img src='img/list_menu.gif' width='28' height='9' alt=''>&nbsp;$topic</a>
</td>";}
echo"</tr></table>";
?>



Tento error:

Warning: mysql_fetch_array():
supplied argument is not a valid MySQL result resource in /3w/wz.cz/w/webcheck/index.php on line 128

je však zvláštní, že než jsem začal řešit ta různá práva tak to fungovalo.... jednotlivé odkazy se z databáze pěkně vyrovnaly pod sebe do tabulky....
Alphard
Profil
$sql = "SELECT * FROM onas WHERE opravneni <= " . $_SESSION['opravneni'];
echo"$sql";
$result = mysql_query ($sql);
if (!$result) echo mysql_error();

zkus to takhle, mezi <= nemá být mezera, předtím jsem si toho nevšiml
JardaK
Profil *
Tím to také není, píše to pořád stejný error.
Chyba je někde v tom vypisování, pořád to hází
Warning: mysql_fetch_array():
supplied argument is not a valid MySQL result resource
JardaK
Profil *
SELECT * FROM onas WHERE opravneni <=You have an error in your SQL syntax; check the manual that corresponds to your MySQL server version for the right syntax to use near '' at line 1
nightfish
Profil
JardaK
proměnná $_SESSION['opravneni'] je z nějakého důvodu prázdná...
JardaK
Profil *
No je tam problém v nějaké maličkosti, nejspíše syntaxe, protože když jsem u uživatelů zvýšil hodnoty oprávnění o 1 a místo <= použil pouze <, tak to funguje =o)
krteczek
Profil
co ti vypíše echo $_SESSION['admin']?? podle mne tam máš string a né integer, který požaduješ v dotaze :-)
vycházím z tohoto:
if ($_SESSION ["opravneni"] != "admin") {...
takžev té session asi nebude integer ;-)

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:

0