Autor Zpráva
General
Profil *
Čus všichni.. Udělal sem si registraci na web, funguje v pohodě ale login mi nějak nejde. Hlásí mi to hlášku "Špatně zadané údaje !" ale údaje sou totožný s tabulkou v databázi a připojení je taky dobrý.. Dokázal by mi někde pomoc pls ? (za odpovědi díky)

index.php
<?php

session_start();
require_once("config_db.php");

if($_POST["nick"]){
        $heslo = md5($heslo);
        $ip = $_SERVER["REMOTE_ADDR"];
		$query = mysql_query("SELECT * FROM reg_uzivatele WHERE nick='$nick' and heslo='$heslo'") or die(mysql_error());
		$vysledek = mysql_fetch_array($query);
		
		if($vysledek["nick"]){
		        $_SESSION["prihlasen"] = 1;
                $_SESSION["login"] = $Vysledek["nick"];
                $_SESSION["UserId"] = $Vysledek["id"];
                $_SESSION["UserEmail"] = $Vysledek["email"];
				echo("Přihlášení proběhlo úspěšně !");
		    }
			else{
			    echo("Špatně zadané údaje !");
			}
		
	}
	else{
	    echo("<p>...");
	}

?>
Mastodont
Profil
Tipnul bych, že máš mít
$heslo = md5($_POST['heslo']);
General
Profil *
Tipnul bych, že máš mít
1 $heslo = md5($_POST['heslo']);
Ale pořád to nejde..
Akacko
Profil
General
Měl bys vědět, že $vysledek není to samé co $Vysledek.

A můžeš si aplikaci debugovat tím, že si vypíšeš obsah proměnných, které používáš v podmínkách a tak zjistíš, kde máš chybu.
AM_
Profil
část bych opravil takto:
        $query = mysql_query("SELECT * FROM reg_uzivatele WHERE nick='$nick' and heslo='$heslo'") or die(mysql_error());
        
        
        if(mysql_num_rows($query) > 0){
                $vysledek = mysql_fetch_array($query);
                $_SESSION["prihlasen"] = 1;
                $_SESSION["login"] = $Vysledek["nick"];
                $_SESSION["UserId"] = $Vysledek["id"];
                $_SESSION["UserEmail"] = $Vysledek["email"];
                echo("Přihlášení proběhlo úspěšně !");
            }
            else{
                echo("Špatně zadané údaje !");
            }

nemůžeš použít fetch_array, když ještě nevíš, jestli výsledek dotazu obsahuje nějaký řádek. Sice by ti to náhodou asi fungovalo, jak má, ale přinejmenším to při zadání špatných údajů bude házet varování.

Jak zmíni Akacko, zdebuguj si to a najdi si, co je špatně.
General
Profil *
Už sem to opravil.. kontroloval sem ještě jednou tabulku v DB, skoušel sem je (proměný) vypsat jestli nepřídu na chybu.. ale pořád to nejde :(
bohyn
Profil
General
V podmince mas $_POST['nick'] a v dotazu $nick. Dalsi vec je ze ten tvuj script je nachylny na SQL injection, pouzivej funkci mysql_real_escape_string() na osetreni promenych vkladanych do dotazu.
General
Profil *
Už se v tom nevyznam.. vypisuje mi to chybu a špatně zadaný údaje.. neznáte někdo pls nějakej web kde je takovejdle login ? Upravil bych si to, když sem to skoušel z různejch "známějších" webů tak mi to taky nefachčilo.. upravit si to dokážu.
bohyn
Profil
General
vypisuje mi to chybu
Proc ji teda neposles?
General
Profil *
Warning: mysql_num_rows(): supplied argument is not a valid MySQL result resource in /home/gamxeu/public_html/hostings/professional/test/prihlas.php on line 11
Akacko
Profil
General
Chyba bude nejspíše v SQL dotazu. Ukaž nám tvůj dotaz.
General
Profil *
Ten script vypadá tak jak ste mi poradili, jinak díky:

[url=http://example.com]<?php
session_start();
require_once("config_db.php");

if($_POST["nick"]){
$heslo = md5($_POST['heslo']);
$ip = $_SERVER["REMOTE_ADDR"];
$query = mysql_query("SELECT * FROM reg_uzivatele WHERE nick='$nick' and heslo='$heslo'") or die(mysql_error());

if(mysql_num_rows($vysledek) > 0){
$vysledek = mysql_fetch_array($query);
$_SESSION["prihlasen"] = 1;
$_SESSION["login"] = $Vysledek["nick"];
$_SESSION["UserId"] = $Vysledek["id"];
$_SESSION["UserEmail"] = $Vysledek["email"];
echo("Přihlášení proběhlo úspěšně !");
}
else{
echo("Špatně zadané údaje !");
}

}
else{
echo("<p>...");
}
?>[/url]
Akacko
Profil
General
Vůbec jsi nečetl co jsme ti psali.
$query = mysql_query("SELECT * FROM reg_uzivatele WHERE nick='$nick' and heslo='$heslo'") or die(mysql_error()); 

Neexistuje proměnná $nick.

$_SESSION["login"] = $Vysledek["nick"];
$_SESSION["UserId"] = $Vysledek["id"];
$_SESSION["UserEmail"] = $Vysledek["email"]; 

Neexistuje pole $Vysledek, ale existuje pole $vysledek.

Jak už psal bohyn, ten SQL dotaz bude náchylný na SQL Injekci.
AM_
Profil
Omlouvám se, v mém kódu byla chyba, parametr mysql_num_rows má být $query a ne $vysledek. Ale mohl jsi se trochu snažit a přijít si na to sám, byl to celkem do očí bijící přehmat :) (opraveno v původním příspěvku - [#5])
bohyn
Profil
General
$vysledek = mysql_fetch_array($vysledek);
General
Profil *
Už možná vim čim to je, bude někde chyba v přenášení hesla nebo nicku.. http://www.professional.gamx.eu/test/login.txt tu i když "vyměnim" tu $nick tak to stejně nejde..

PS: hází to Špatně zadané údaje !
AM_
Profil
Tak si ty údaje zkus vypsat a mrkni se do databáze jak tam jsou, ne? nebo si přes phpmyadmina spusť čistě ten dotaz do DB na jméno a heslo jestli ti to hodí správné řádky...
General
Profil *
Dobrej nápad, nick to vyhodí správnej => SQL dotaz je OK.. , je problém v šifrování hesla a v registraci mam ale taky md5.. skoušel sem to i přes base64 ale taky to blbne.. bylo by to bezpečný bez šifrování ?
AM_
Profil
General
Jen si to pěkně pro tu md5 odlaď... zřejmě jsi někde zase zapomněl použít superglobální pole $_POST, místo toho zahashoval prázdný řetězec a teď se divíš ;)
base64 není šifra, jen 6bitový přepis pomocí tisknutelných znaků!!!
bohyn
Profil
General
v md5 zalezi na velikosti pismen (a != A), nebo jak rika AM_, mas spatne ulozene heslo.
General
Profil *
To s tim base64 sem nevěděl.. já vim že záleží na velkejch písmenech, v databázi ty údaje mam tak jak to je zprávně, script na registraci http://www.professional.gamx.eu/test/register.txt]http://www.professional.gamx.eu/test/register.txt nikde mi nepříde že bych tam měl chybu
carlos
Profil *
A máš v databázi pro heslo dostatečnou délku, aby se ti tam vešlo celé zašifrované heslo?
AM_
Profil
zkus si vypsat $heslo před tím, než položíš SQL dotaz, a pak se podívej na skutečnou hodnotu do databáze. shodují se?
takhle se hledají chyby, vypisuješ klíčové informace v klíčových momentech.

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: