Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 6. 2. 2009, 08:40:36
Zdravím
Chtěl bych se zeptat, zda musím u níže uvedené fce vracet hodnotu a co popřípadě ověřit. Fce je zamýšlena tak, že jako parametry pošlu hodnoty z formu, které prošly ověřením. a na základě toho fce vyhodnotí , nastaví hodnotu session na 1 nebo 0 a přesměruje na odpovídající stránku, kde už si hodnotu session kontroluji. Díky za každou radu <?php function overeni ($prijmeni, $heslo) { if (mysql_query("select surname,password from users where surname='".$prijmeni."' and password='".$heslo."' ")) { $_SESSION['prihlasen'] = 1; } else if(mysql_query("select surname,password,jeadmin from users where surname='".$prijmeni."' and password='".$heslo."'and jeadmin='1' ")) { $_SESSION['prihlasen'] = 1; } else { $_SESSION['prihlasen'] = 0; echo("<meta http-equiv='refresh' content='3;url=false.html'>"); //return false; } } ?> |
||
Majkl578 Profil |
#2 · Zasláno: 6. 2. 2009, 09:17:35
krome mysql injection vulnerability a neprehledne struktury (php i mysql) dotazu to je dobre.
muzes si vracet true nebo false a podle toho pak zaridit jinou cast scriptu priklad: if(overeni('Pepa', 'pepovoheslo')) { echo 'Pepa se prihlasil'; } else { echo 'Pepa se neprihlasil'; } php samo o sobe nevyzaduje, aby funkce vracely hodnotu |
||
gardener Profil |
#3 · Zasláno: 6. 2. 2009, 09:38:11
O.k ale pak tedy nerozumím tomu, proč v případě
else { $_SESSION['prihlasen'] = 0; echo("<meta http-equiv='refresh' content='3;url=false.html'>"); //return false; } Nedojde k přesměrování... Kde by mohla být chyba? |
||
AM_ Profil |
#4 · Zasláno: 6. 2. 2009, 09:56:56
Pokud mas zapnute magic_quotes_gpc a nestripslashujes ty udaje, tak je to zcela bezpecne. Ale mel bys prohodit if a elseif vetev, protoze i pro admina bude platit prvni if podminka, takze k elseif se to nikdy neprokouse.
Chyba - zaprve, v HTML se pouzivaji uvozovky, ne apostrofy, takze http-equiv="refresh"... nektere prohlizece to muzou brat spatne zadruhe, podivej se na zdrojak stranky, jestli se tam ten meta tag vyechuje, ale nefunguje, nebo jestli je chyba v PHP a ten tag se tam ani nedostane. |
||
gardener Profil |
#5 · Zasláno: 6. 2. 2009, 10:29:40
Oslashovane to mam již předtím
AM_díky s tou podmínkou máš samozřejmě pravdu, nicméně i po změně to nefunguje korektně.. Zkoušel jsem to i pomocí header, ale s tím samým výsledkem.. Skript mi žádný výstup nevrátí, jednoduše prázdný dokument: fci volám takto $surname = (mysql_real_escape_string($_POST["surname"])); $password = (mysql_real_escape_string($_POST["password"])); overeni($surname,$password); |
||
koroman Profil |
#6 · Zasláno: 6. 2. 2009, 12:10:26 · Upravil/a: koroman
da sa to napisat lepsie:
<?php function overeni ($prijmeni, $heslo){ $_SESSION['prihlasen'] = 0; $_SESSION['is_admin'] = 0; if(mysql_query("select surname,password,jeadmin from users where surname='".$prijmeni."' and password='".$heslo."'and jeadmin='1' ")){ $_SESSION['prihlasen'] = 1; $_SESSION['is_admin'] = 1; return true; }elseif(mysql_query("select surname,password from users where surname='".$prijmeni."' and password='".$heslo."' ")){ $_SESSION['prihlasen'] = 1; return true; } return false; } $surname = (mysql_real_escape_string($_POST["surname"])); $password = (mysql_real_escape_string($_POST["password"])); if(!overeni($surname,$password)){ //pokial sa neprihlasi spravne: // UPOZORNENIE - nesmu by hlavicky posielane skorej predtym header('Location: false.html'); /* popripade: echo "<script>location.href='false.html';</script>" */ } ?> dufam, ze pomoze :-) |
||
panther Profil |
#7 · Zasláno: 6. 2. 2009, 12:14:45
AM_
„Chyba - zaprve, v HTML se pouzivaji uvozovky, ne apostrofy, takze http-equiv="refresh"... nektere prohlizece to muzou brat spatne“ ale, ale... |
||
koroman Profil |
#8 · Zasláno: 6. 2. 2009, 12:23:30 · Upravil/a: koroman
hadam ok
|
||
Majkl578 Profil |
#9 · Zasláno: 6. 2. 2009, 22:38:07
panther
ale? apostrof je jen cunarna zacatecniku v php aby se vyhli deleni retezcu nebo escapovani. zadny jiny logicky vyznam pro to nevidim. |
||
AM_ Profil |
#10 · Zasláno: 6. 2. 2009, 22:46:26
panther
jestli mas jiny nazor tak sem s nim, ale text "ale, ale" je co se tyce informacni hodnoty nekde okolo bodu mrazu :) |
||
gardener Profil |
#11 · Zasláno: 7. 2. 2009, 22:06:53
Nemůžu si pomoci, ale ať dělám co dělám k tomu přesměrování nedojde..ani pomocí header, ani pomocí echo..
Upravil jsem to takto s použitím Koromanova vylepšení <?php include_once("db_connect.php"); $surname = (mysql_real_escape_string($_POST["surname"])); $password = (mysql_real_escape_string($_POST["password"])); if (empty($surname)|empty($password)) { echo("Nevyplnili jste potřebné údaje"); exit(); } else { include_once("functions.php"); overeni($surname,$password); if(!overeni($surname,$password)){ //pokial sa neprihlasi spravne: // UPOZORNENIE - nesmu by hlavicky posielane skorej predtym header('Location: false.html'); echo "<script>location.href='false.html';</script>"; } } ?> |
||
AM_ Profil |
#12 · Zasláno: 7. 2. 2009, 22:38:45 · Upravil/a: AM_
proč voláš funkci overeni 2x? jádro problému to asi není (budeš si ten kód muset trochu prozkoušet, kde se co špatně vyhodnotí), ale je to trochu hloupé.
overeni($surname,$password); if(!overeni($surname,$password)){ |
||
gardener Profil |
#13 · Zasláno: 7. 2. 2009, 23:10:37
Pravda, je to zbytecne..ale nema to na to bohuzel vliv..
|
||
Majkl578 Profil |
#14 · Zasláno: 7. 2. 2009, 23:22:28
nema nahodou byt location v headeru absolutni url?
|
||
gardener Profil |
#15 · Zasláno: 7. 2. 2009, 23:25:34
Nemusí být, ono to ale nevypíše nic..ani pomocí echo..
|
||
Majkl578 Profil |
#16 · Zasláno: 7. 2. 2009, 23:28:26
error_reporting(E_ALL);
na zacatek scriptu |
||
gardener Profil |
#17 · Zasláno: 8. 2. 2009, 00:09:24
To jsem zkoušel jako první věc..bohužel nic nanahlásí..
|
||
gardener Profil |
#18 · Zasláno: 8. 2. 2009, 17:24:18
Tak problém byl v návratové hodnotě Fce.
Uvádím příklad použitý u jiné aplikace, je to to samé ale zde potřebuji rozlišit jen admina <?php function overeni($username,$password) { $vysledek = mysql_query("select username,password from users where username='".$username."' and password='".$password."'"); if (mysql_num_rows($vysledek)==0) { $_SESSION['prihlasen'] = 0; return false; } else { $_SESSION['prihlasen'] = 1; return true; } } ?> A po zavolání fce: overeni($username,$password); { if($_SESSION['prihlasen'] == 0){ //:Pokud se neprihlasi spravne echo "neco je spatne"; echo "<script>location.href='false.html';</script>"; //exit(); } else if($_SESSION['prihlasen'] == 1) { echo "k overeni doslo"; exit(); } } ?> |
||
gardener Profil |
#19 · Zasláno: 10. 2. 2009, 21:05:29
//session_register("prihlasen");
//session_register("is_admin"); Jsem vykoupnul a chová se to stejně...já bych tipoval, že bude problém s tím dotazem? |
||
Časová prodleva: 15 let
|
0