| 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: 18 let
|
|||
0