Autor | Zpráva | ||
---|---|---|---|
gardener Profil |
#1 · Zasláno: 16. 9. 2009, 01:31:21
Zdravím všechny,
chtěl bych se zeptat, jestli někdo netuší, proč mi mysql_num_rows ve fci pro ověření uživatele vraci nulozvy pocet radku? Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in C:\Data\Programing\PHP\www\dlp\admin\functions.php on line 12 Pokud si zadam primo mysql dotaz, dostanu zpatky prave jeden radek, zde mi ale vraci nulovy pocet radku, netusi nekdo prosim, v cem by mohl byt problem? Diky za kazdou radu.. function auth($login, $password) { // budeme pracovat s globálními proměnnými global $login,$password,$sql,$spojeni; // ověříme uživatele v databázi podle loginu a hesla. // se systémem mohou pracovat jen uživatelé, kteří mají // v sloupci prava nastaveno 2 3a Jinak mají nepovolený přístup. $sql = "SELECT * FROM uzivatele WHERE mail LIKE '$login' AND heslo = '$password' AND prava BETWEEN 2 AND 3 LIMIT 1 "; mysql_query($sql, $spojeni); // pokud v databázi nenajdeme odpovídající záznam, // rozloučíme se s uživatelem $count = mysql_num_rows($sql); session_start(); if ($count == 0) { //zaregistruje proměnou user_is_logged a nastaví ji na 1 return $_SESSION["user_privilege"] = 0; } else { $data = mysql_fetch_array($sql); $prava[$data[6]]; if ($prava ==2) return $_SESSION["user_privilege"] = 2; if ($prava ==3) return $_SESSION["user_privilege"] = 3; } } |
||
nightfish Profil |
#2 · Zasláno: 16. 9. 2009, 06:19:31
„mysql_query($sql, $spojeni);“
nahraď za $sql = mysql_query($sql, $spojeni); (a zároveň věz, že pojmenovat si proměnnou s odkazem a výslednou proměnnou, do které se uloží výsledek dotazu, stejně nemusí být vždy vhodné) |
||
gardener Profil |
#3 · Zasláno: 16. 9. 2009, 09:07:10
O.K díky za vysvětlení, stále ale netuším, proř, když záznam existuje a provede se, mi to vždy skončí na nule:
if ($count == 0) { //zaregistruje proměnou user_is_logged a nastaví ji na 1 return $_SESSION["user_privilege"] = 0; } |
||
nightfish Profil |
#4 · Zasláno: 16. 9. 2009, 09:28:05
„když záznam existuje a provede se, mi to vždy skončí na nule“
není důvod, aby $count obsahovalo nulu v případě, že řádek existuje takže si nech vypsat ten dotaz který provádíš (tohle je přesně ten důvod, proč nepojmenovávat proměnnou s dotazem a výsledkem stejně), a tento vypsaný dotaz si vlož do phpMyAdminu a spusť |
||
gardener Profil |
#5 · Zasláno: 16. 9. 2009, 10:44:38
Kdyz nevolam fci ale zapisi si ten kod primo, tj:
<?php include("db_connect.php"); $login = "mujmail@gmail.com"; $password = "heslo"; $sql = "SELECT * FROM uzivatele WHERE mail LIKE '$login' AND heslo = '$password' LIMIT 1 "; $query = mysql_query($sql, $spojeni); $count = mysql_num_rows($query); echo($count);//Ted vrati 1 $data = mysql_fetch_array($query); echo($data[5]);//Tady vrati 6 polozku pole ?> Tak vse ok, count vrati jedna a $data[5] polozku, kterou potrebuji, jakmile ale zavolam metodu s parametry, tak je count 0, vse je ale naprosto stejne, jediny prblem me napada s globalnimi promennymi? I kdyz jsem to projizdel debugerem, tak vse vypadalo od, jen count v debugu vratil 0.. Volani je udelano takto: <?php if(isset($_POST["mail_uzivatele"])&&isset($_POST["heslo_uzivatele"])) { include("db_connect.php"); include("functions.php"); $login = $_POST["mail_uzivatele"]; $password = $_POST["heslo_uzivatele"]; auth($login,$password); if($_SESSION["user_privilege"] == 0) exit("nemate dostatecna prava"); elseif($_SESSION["user_privilege"] == 1) echo("uzivatel"); elseif($_SESSION["user_privilege"] == 2) echo("redaktor"); } ?> |
||
Kajman_ Profil * |
#6 · Zasláno: 16. 9. 2009, 11:00:51
Zkontrolujte si tento řádek
$prava[$data[6]]; |
||
gardener Profil |
#7 · Zasláno: 16. 9. 2009, 11:06:09 · Upravil/a: gardener
Ten jsem zmenil..ale bohuzel to na to nema vliv, debuger se tvari jakoze vse v poradku..napada mne jedine nejaka chyba v navratove hodnote, nebo pri prejimani dat z formu..
EDIT:Jeste me napada,ze bych session nemusel startovat zde ale ve formu pro prihlaseni? <?php function auth($login,$password) { session_start(); //Parameters>$login,$password // budeme pracovat s globálními proměnnými global $spojeni,$login,$password; // ověříme uživatele v databázi podle loginu a hesla. // se systémem mohou pracovat jen uživatelé, kteří mají // v tabulce stav nastaveno a !! Jinak mají nepovolený přístup. $sql = "SELECT * FROM uzivatele WHERE mail LIKE '$login' AND heslo = '$password' LIMIT 1 "; $query = mysql_query($sql, $spojeni); //pocet vybranych radku $count = mysql_num_rows($query); echo($count); // pokud v databázi nenajdeme odpovídající záznam, // rozloučíme se s uživatelem. if ($count == 0) { //zaregistruje proměnou user_is_logged a nastaví ji na 0 return $_SESSION["user_privilege"] = 0; } else { $data = mysql_fetch_array($query); $privileges= $data[5]; if ($privileges ==1) return $_SESSION["user_privilege"] = 1; if ($privileges ==2) return $_SESSION["user_privilege"] = 2; if ($privileges ==3) return $_SESSION["user_privilege"] = 3; } } |
||
Kajman_ Profil * |
#8 · Zasláno: 16. 9. 2009, 11:13:17
A proč vlastně máte globální login a heslo, když jsou přidávany jako parametr funkce?
|
||
gardener Profil |
#9 · Zasláno: 16. 9. 2009, 11:26:06
Vyreseno, problem byl samozrejme tam kde bych ho nejmene cekal,
skript mi nebral korektne $login = $_POST["mail_uzivatele"]; ale toto ano.. $login = $_POST['mail_uzivatele']; Diky vsem za rady.. |
||
nightfish Profil |
„Vyreseno, problem byl samozrejme tam kde bych ho nejmene cekal,
skript mi nebral korektne $login = $_POST["mail_uzivatele"]; ale toto ano.. $login = $_POST['mail_uzivatele'];“ hmmm, teď ještě najít pravou příčinu... tohle zcela určitě nemělo žádný vliv |
||
Časová prodleva: 15 let
|
0