Autor Zpráva
gardener
Profil
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
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
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
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
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 *
Zkontrolujte si tento řádek
$prava[$data[6]];
gardener
Profil
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 *
A proč vlastně máte globální login a heslo, když jsou přidávany jako parametr funkce?
gardener
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'];

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

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