Diskuze: Nefunkční přihlášení/registrace
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Tvůrce
Zobrazeno 14 zpráv z 14.
//= Settings::TRACKING_CODE_B ?> //= Settings::TRACKING_CODE ?>
V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.
Ahoj,
je sice hezký, že ti to vyhodí čistou stránku, ale co třeba postnout nějaký kód, abychom se na to mohli podívat?
Myslíš, že ti bez ukázky kódu někdo bude umět poradit? Trošku víc podrobností by to chtělo...
Jo, na to jsem myslel.. Snad to příliš nezahltím.. Tohle je ta důležitá část z RegistraceKontroler.php :
public function zpracuj($parametry)
{
// Hlavička stránky
$this->hlavicka['titulek'] = 'Registrace';
if ($_POST)
{
try
{
$spravceUzivatelu = new SpravceUzivatelu();
$spravceUzivatelu->registruj($_POST['jmeno'], $_POST['heslo'], $_POST['heslo_znovu'], $_POST['rok']);
$spravceUzivatelu->prihlas($_POST['jmeno'], $_POST['heslo']);
$this->pridejZpravu('Byl jste úspěšně zaregistrován.');
$this->presmeruj('administrace');
}
catch (ChybaUzivatele $chyba)
{
$this->pridejZpravu($chyba->getMessage());
}
Odkazuje se to na správceUzivatelu.php :
public function vratOtisk($heslo)
{
$sul = 'fd16sdfd2ew#$%';
return hash('sha256', $heslo . $sul);
}
// Registruje nového uživatele do systému
public function registruj($jmeno, $heslo, $hesloZnovu, $rok)
{
if ($rok != date('Y'))
throw new ChybaUzivatele('Chybně vyplněný antispam.');
if ($heslo != $hesloZnovu)
throw new ChybaUzivatele('Hesla nesouhlasí.');
$uzivatel = array(
'jmeno' => $jmeno,
'heslo' => $this->vratOtisk($heslo),
);
try
{
Db::vloz('uzivatele', $uzivatel);
}
catch (PDOException $chyba)
{
throw new ChybaUzivatele('Uživatel s tímto jménem je již zaregistrovaný.');
}
}
// Přihlásí uživatele do systému
public function prihlas($jmeno, $heslo)
{
$uzivatel = Db::dotazJeden('
SELECT uzivatele_id, jmeno, admin
FROM uzivatele
WHERE jmeno = ? AND heslo = ?
', array($jmeno, $this->vratOtisk($heslo)));
if (!$uzivatel)
throw new ChybaUzivatele('Neplatné jméno nebo heslo.');
$_SESSION['uzivatel'] = $uzivatel;
}
a poslední co by to mělo ovlivňovat jsou tyto dvě metody v Dp.php :
public static function dotaz($dotaz, $parametry = array()) {
$navrat = self::$spojeni->prepare($dotaz);
$navrat->execute($parametry);
return $navrat->rowCount();
}
// Vloží do tabulky nový řádek jako data z asociativního pole
public static function vloz($tabulka, $parametry = array()) {
return self::dotaz("INSERT INTO `$tabulka` (`".
implode('`, `', array_keys($parametry)).
"`) VALUES (".str_repeat('?,', sizeOf($parametry)-1)."?)",
array_values($parametry));
}
Musí tam být ne úplně překlep, ale asi nějaká drobnost, kvůli které to vlastně vypisuje prázdné... (pole?) .
Ještě jsem příliš nepobral "nyní mi to vyhodí čistou stránku s hodnotou 1". Jako že ti to hodí jen bílou stránku a je tam napsaná 1?
Jo, přesně tak..předtím to házelo chybovou hlášku, kterou mám někde v kódu nastavenou.. trochu jsem si s tím pohrál a vypisuje to jedničku.. pouze jedničku..
Ta jednička je způsobena tímto řádkem ve spravceUzivatelu.php pod částí, kde se definuje $uzivatel :
die(print_r($uzivatel));
OK, a když ten die() odstraníš, tak?
Tak mi to píše "Neplatné jméno nebo heslo." byť to ale zadávám správně, přesně jako když jsem dělal registraci (u registrace mi to háže stejný problém, ale do db se uživatel vloží)
Něco je špatně v tom mechanismu, který obsluhuje kontrolu zadávaných údajů
Zkus si vypsat hash toho hesla, jestli souhlasí s tím v DB.
U podmínky WHERE záleží i na velikosti písmen (včetně jména).
To nebyl špatnej nápad, když si tam vypíšu hash zadaného hesla (aspoň myslím, že to je on) tak mi vyskočí ten samý co v db ale navíc je za tím nějaký další nesmyslný kus otisku toho hesla, který ale v db už není..
v db je otisk: 84990d792c1a6834d3fdcb60360006
a mě to vypíše navíc: d2c52387e03cbff7e9a11dfe1cb1e39de2 (tohle pokračuje
za tím nahoře)
Nechápu kde se to tam vzalo ale :/
Tak mám asi problém vyřešen! já si totiž v db nastavil velikost pole heslo varchar(30), jenže tento hash se vytváří asi tak sto znakový, možná i delší.. takže jsem pro jistotu navýšil na 250 a novou registraci mi to již dobře přesměrovalo do administrace!! to vypsání mi pomohlo, díky
Zobrazeno 14 zpráv z 14.