Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 10. 2. 2009, 20:56:08
Zdravím
Mám problém s kterým si nevím rady co se týče session Ve skriptu s názvem overeni si session nejprve zaregistruji: overeni.php session_register("prihlasen"); session_register("is_admin"); a oescapuji promenne $surname = (mysql_real_escape_string($_POST["surname"])); $password = (mysql_real_escape_string($_POST["password"])); poté zavolám fci overeni: fce overeni: <?php function overeni ($surname, $password){ $_SESSION['prihlasen'] = 0; $_SESSION['is_admin'] = 0; if(mysql_query("select surname,password,jeadmin from users where surname='".$surname."' and password='".$password."'and jeadmin='1' ")) { $_SESSION['prihlasen'] = 1; $_SESSION['is_admin'] = 1; return true; } elseif(mysql_query("select surname,password from users where surname='".$surname."' and password='".$password."' ")){ $_SESSION['prihlasen'] = 1; return true; } else { return false; } } ?> a na základě vrácené hodnoty provedu akci. { if($_SESSION['prihlasen'] == 0){ echo "Spatne zadane udaje"; //echo "<script>location.href='form_login.php';</script>"; exit(); } else if(($_SESSION['prihlasen'] == 1)&($_SESSION['is_admin'] == 1)) { echo "Prihlasen je admin"; //exit("<script>location.href='admin.php';</script>"); } else if($_SESSION['prihlasen'] == 1) { echo "Prihlasen je user"; //exit("<script>location.href='layout.php';</script>"); } else { die("Nebyla nastavena session"); } } Problém nastává v tu chvíli, kdy je vrácená hodnota Ať už vyplním login korektně pro admina, nebo zadám nesmysly, vždy se mi přihlásí jako user, tzn session je nastavena na $_SESSION['prihlasen'] == 1 Netuší někdo prosím kde by mohla být chyba? Nebo zda by pomohlo ověřovat počet vrácených řádků z dotazu? Díky za jakoukoliv radu |
||
AM_ Profil |
#2 · Zasláno: 10. 2. 2009, 20:58:16
session_register je zastaralá, není nutné ji používat. ano, výsledek query musíš někam uložit, a pak je to mysql_num_rows($result).
|
||
Mastodont Profil |
#3 · Zasláno: 10. 2. 2009, 21:00:49
V manuálu PHP je jasně napsáno:
If you are using $_SESSION (or $HTTP_SESSION_VARS), do not use session_register(), session_is_registered(), and session_unregister(). Čili ty první dva řádky vykopni a nahlas, co to dělá. |
||
gardener Profil |
#4 · Zasláno: 10. 2. 2009, 21:06:37
//session_register("prihlasen");
//session_register("is_admin"); Jsem vykopnul a chová se to stejně...tipoval bych že problém bude s tím sql dotazem? |
||
gardener Profil |
#5 · Zasláno: 10. 2. 2009, 21:10:16
AM_
Jenže s tím vyvstává problém ten, že bych musel dotaz provést na začátku fce, uložit do proměnné a na tu pak zavolat numrows, jenže jak to vyřešit s druhým dotazem? To snad jedině pomocí vnořené podmnínky? |
||
gardener Profil |
#6 · Zasláno: 10. 2. 2009, 21:12:39
Tzn. nějak takto:
$dotaz=mysql_query("select surname,password,jeadmin from users where surname='".$surname."' and password='".$password."'and jeadmin='1' "); if(mysql_num_rows($dotaz)!=0) { $_SESSION['prihlasen'] = 1; $_SESSION['is_admin'] = 1; return true; } |
||
Mastodont Profil |
#7 · Zasláno: 10. 2. 2009, 21:12:56 · Upravil/a: Mastodont
if(mysql_query("select ... Jak již bylo řečeno, musíš použít ještě mysql_num_rows($result), protože mysql_query vrátí result, ne počet záznamů. EDIT - Aha, pozdě. |
||
AM_ Profil |
#8 · Zasláno: 10. 2. 2009, 21:17:37
gardener
no, jako jo. Ono taky ověřovat všechno jen přes WHERE je dost nešikovné. spíš si dej select jeadmin from users where... a pak v tom výsledku ověřuj, jestli jeadmin nebo neniadmin, posílat takovéto 2 dotazy do DB je dost neefektivní... |
||
gardener Profil |
#9 · Zasláno: 10. 2. 2009, 21:19:07
Jenže to vrací warning [pre]mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\xampp\htdocs\Registrace\functions.php on line 6[/pre]
S tím že i pokud zadám správné hodnoty, tj. musí dotaz vrátit řádek, přihlásí se jako user...což je špatně. |
||
gardener Profil |
#10 · Zasláno: 10. 2. 2009, 21:22:02
AM_
Mohl by jsi tu myšlenku rozvést, to jako, že bych to mohl vyřešit pomocí jednoho dotazu? |
||
AM_ Profil |
#11 · Zasláno: 10. 2. 2009, 21:25:09
$q = mysql_query("SELECT jeadmin FROM users WHERE username='$username' AND password='$password'"); if (mysql_num_rows($q) > 0){ list($jeadmin) = mysql_fetch_row($q); if ($jeadmin){ //prihlasen admin } else { //prihlasen user } } else { //neprihlasen nikdo } Jestli ti to vrací supplied argument is not valid, tak máš chybu v tom dotazu, vyjeď si po tom dotazu mysql_error(); |
||
gardener Profil |
#12 · Zasláno: 10. 2. 2009, 21:43:19
Změnil jsem v dotazu název sloupce proto ten warning, nicméně když použiji tvoji fci, tak i při zadání správných údajů se "přihlášení" neprovede viz:
<?php function overeni ($surname, $password){ $_SESSION['prihlasen'] = 0; $_SESSION['is_admin'] = 0; $q = mysql_query("SELECT isadmin FROM users WHERE surname='$surname' AND password='$password'"); if (mysql_num_rows($q) > 0){ list($jeadmin) = mysql_fetch_row($q); if ($jeadmin){ $_SESSION['prihlasen'] = 1; $_SESSION['is_admin'] = 1; } else { $_SESSION['prihlasen'] = 1; } } else { $_SESSION['prihlasen'] = 0; } } ?> Říkám si, jestli by nebylo lepší udělat samostatnou tabulku pro admina... |
||
gardener Profil |
#13 · Zasláno: 10. 2. 2009, 22:10:20
Tak problém vyřešen
Po po kontrole error_reporting(E_ALL); Jsem zjistil, volání nedefinované proměnné, username, místo surname. Tzn, že nyní je to vyřešeno a funguje to: Tzn, výsledná fce bude vypadat takto: <?php function overeni ($surname, $password){ $_SESSION['prihlasen'] = 0; $_SESSION['is_admin'] = 0; $q = mysql_query("SELECT isadmin FROM users WHERE surname='$surname' AND password='$password'"); if (mysql_num_rows($q) > 0){ list($jeadmin) = mysql_fetch_row($q); if ($jeadmin){ $_SESSION['prihlasen'] = 1; $_SESSION['is_admin'] = 1; } else { $_SESSION['prihlasen'] = 1; } } else { $_SESSION['prihlasen'] = 0; } } ?> Díky všem a především AM_ za pomoc, a příště si zapnu reportování chyb rovnou na začátku... |
||
Časová prodleva: 15 let
|
0