Autor Zpráva
Kiko
Profil *
<?php
ob_start();

session_start();
if(isset($_POST['prihlmeno'])){
require 'db.php';
$name = $_POST['prihlmeno'];
$pass = md5($_POST['heslo']);
$query = MySQL_Query("SELECT * FROM `uzivatelia` WHERE `prihlmeno` =
'$name' and `heslo` = '$pass'") or die (mysql_error());

$Vysledek = mysql_fetch_array($query);
$Vysledek['prihlmeno'];
if($Vysledek['prihlmeno']){
$_SESSION['prihlasen'] = 1;
$_SESSION['nick'] = $Vysledek['nick'];
$_SESSION['email'] = $Vysledek['email'];
$bl="uvod.php";
header("location: $bl"); //
}else{
$bl="login.php?Alert=6";
header("location: $bl");
echo "Zadal jsi špatné údaje";
}
mysql_free_result($query);
}else{
echo "Zde nic není.";
}
ob_end_flush();
?>

...................................................................... ..........


newie mi niekto poradit kde mam chybu?? nejako mi to neslape
Taps
Profil
Kiko
Vypisuje ti to nějakou chybu, a nebo se ti třeba jen zobrazí bílá stránka?
Kiko
Profil *
nikdy ma to neprihlasi...aj ked su udaje spravne aj ked su nespravne
na1k
Profil *
Co konkrétně má dělat řádek
$Vysledek['prihlmeno'];

?

...a osobně bych namísto kontrolování $vysledek['prihlmeno'] kontroloval jenom jestli mysql_num_rows($query)==1 ... asi v tom není žádný rozdíl, je to jenom pocit :-p

Jinak by bylo dobré vědět, co znamená nikdy ma to neprihlasi. Je to tak, že se skript přesměruje na adresu pro špatně zadané údaje? Nebo na uvod.php ale uživatel se nejeví jako přihlášený?
Taps
Profil
Kiko
Zkus to třeba takto
<?php
ob_start();

session_start();
if(isset($_POST['prihlmeno'])){
require 'db.php';
$name = $_POST['prihlmeno'];
$pass = md5($_POST['heslo']);
$query = MySQL_Query("SELECT * FROM `uzivatelia` WHERE `prihlmeno` =
'$name' and `heslo` = '$pass'") or die (mysql_error());

$Vysledek = mysql_fetch_array($query);
if(mysql_num_rows($query==1)){
$_SESSION['prihlasen'] = 1;
$_SESSION['nick'] = $Vysledek['nick'];
$_SESSION['email'] = $Vysledek['email'];
$bl="uvod.php";
header("location: $bl"); //
}else{
$bl="login.php?Alert=6";
header("location: $bl");
echo "Zadal jsi špatné údaje";
}
mysql_free_result($query);
}else{
echo "Zde nic není.";
}
ob_end_flush();
?>
krteczek
Profil
$Vysledek['prihlmeno']; // toto je tam proč?
dej na začátek scriptu error_reporting(E_ALL); jestli ti to něco vypíše, tipuji že to skončí právě na řádku: $Vysledek['prihlmeno'];

dále si dej pozor na to co ti jde do $jmeno, nejjednodužší bude přidat sloupeček do tabulky a v něm udržovat md5 hashe jmen a při dotaze se ptej na oba ty hashe. cokoliv napíše do jedné z proměnných bude vždy převedeno na bezpečný řetězec
testuj jestli ti databáze vrátila nějaký výsledek, chybu, nebo nebyl nalezen žáden relevantní výsledek
buck
Profil *
Mě to funguje...takže ve scriptu chyba není, ale v mysql, zkontroluj si sloupce, názvy sloupců, tabulku.
Nezkoušel jsem session, pokud v uvod.php kontroluješ session, zkus nejdřív přesměrovat na stránku, kde session nekontroluješ...pokud se to tam přihlásíš, je chyba v kontrole session.

+

já osobně bych kontroloval submit, než odeslaný input
Kiko
Profil *
hm..problem je ze ma to stale hodi na tu stranku pre spatne zadane udaje :S
buck
Profil *
a co si zkoušel udělat?
Kiko
Profil *
tabulku a stlpce mam dobre.... skusil som to s tym if(mysql_num_rows($query==1))
Kiko
Profil *
nemam chybu v logine??
..................................
<form action="login_zpracuj.php" method="post">
<input type="hidden" name="send" value=""/>

Prihlasovacie meno:
<input type="text" name="prihlmeno">
Heslo:
<input type="password" name="heslo">
<input type="submit" name="send" value="Prihlásiť">
</form>
buck
Profil *
jak jsem říkal, mě ten script fungoval, jediný co sem změnil je přihlášení do DB (takže i jména sloupců), md5 hesla, přesměřování a přihlásil jsem se normálně
na1k
Profil *
Tak zkus spustit ten samý dotaz na databázi přímo v PhpMyAdminovi nebo jiném rozhraní pro mysql. Za $name doplň svoje jméno a za $pass md5 hesla, to získáš např. přes PSPad (nástroje/Otisk). Jestli ti to nevyhodí žádný nalezený řádek při správně zadaných údajích, tak to bude v db - např. příliš krátký varchar pro sloupec s md5 hesla (to potřebuje 32 znaků).
Kiko
Profil *
nejde mi to...vobec...newiem ush v com je problem
Kiko
Profil *
:(
krteczek
Profil
Kiko: když něco nejde tak hledám co a proč.
1. po načtení stránky si echnu to co se mi poslalo z formuláře
echo var_dump($_POST);

2. postupne si echnu vsecny mezivysledky

3. zakomentuji presmerovani, a echnu si tam pomocne texty, nebo obsahy promennych

4. odsazuj text skriptu podle nejakeho rozumneho zpusobu, toto:

session_start();
if(isset($_POST['prihlmeno'])){
require 'db.php';
$name = $_POST['prihlmeno'];
$pass = md5($_POST['heslo']);
$query = MySQL_Query("SELECT * FROM `uzivatelia` WHERE `prihlmeno` =
'$name' and `heslo` = '$pass'") or die (mysql_error());
...

se čte rozhodne hure než:

session_start();
if((!empty($_POST['prihlmeno'])) && (!empty($_POST['heslo'])))
{
require 'db.php';
$name = $_POST['prihlmeno'];
$pass = md5($_POST['heslo']);
$dotaz = "SELECT * FROM `uzivatelia` WHERE `prihlmeno` = '$name' and `heslo` = '$pass'";
if($query = MySQL_Query($dotaz) )
{
$p = mysql_num_rows($query);
//!!!!!! sloupec `prihlmeno` musí mít nastaveno unique !!!!!!!
if($p == 1)
{
$radek = mysql_fetch_assoc($query);
...
}
else
{
//dotaz nic nevratil ale k chybě nedošlo
}
}
else
{
//došlo k chybě v dotaze
echo mysql_error();
}
}
rimidalf
Profil *
jen glosa k loginname a MD5.
Pouzivam MD5 nejak takto:
if ($_POST[fjmeno] !='' ){
$md5_fjmeno = md5(strtoupper(StrTr($_POST[fjmeno], "áäčďéěëíňóöřšťúůüýžÁÄČĎÉĚËÍŇÓÖŘŠŤÚŮÜÝŽ", "aacdeeeinoorstuuuyzAACDEEEINOORSTUUUYZ")));
}

SQL takto:
WHERE md5(upper(u.loginname)) = '$md5_fjmeno'

A funguje....
krteczek
Profil
rimidalf: proč odstranuješ z textu před hashováním diakritiku, a proč ten text převádíš na velká písmena? obojí je naprosto zbytečné. Funkcím md5 a sha1 je naprosto jedno jaký text se v proměnné skrývá, jejich úkolem je z něj vyrobit 32 (md5) a 40 (sha1) znakový řetězec.
něco jiného je přidávání soli k původnímu textu (k heslu se přidá náhodně vygenerovaný řetězec a celé se to zahashuje => dve stejné hesla mají jiný hash => musí se ukládat i sůl zvlášt do sloupce)
rimidalf
Profil *
2krteczek
Hash funkcim to jedno jest, jenze toto pouzivam v app, do ktere se nekteri uzivatele prihlasuji treba jen 1x za mesic kvuli vykazum a ver mi, log neuspesnych loginu mi dava za pravdu, ze nechapou, ze C a c nebo č neni totez (obcas vypadaj, ze nevi, ci jsou :-), ja navic tolik odvahy na hacky a carky v tomto sloupci DB nemam, ted volaji minimalne, pravda, pro jistotu jim po spravnem prihlaseni ulozim jejich loginname do kolacku, preci jen co lze, musi pracovat samo.
Takze, piste si velkym, malym, česky, je mi to sumak. A proc to prevadim i v DB? Zpetna kompatibilita, loginname je zcasti pouzit v realcich (diky Jirko Z.), lepe se v tom hleda nez nejaky uzivatel 3432...
krteczek
Profil
rimidalf: tvé řešení je pohodlné pro všechny ale bezpečné není ;-)
rimidalf
Profil *
2krteczek

Proc ne? Nejak nechapu? Na heslo jim nesaham a maji jen par pokusu, jejihz prekroceni mi prijde mailem, pak volaji nebo cekaji, nez se odemkne. No a mimo jejich CAPS LOCKu & spol nechodi nic.

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