Avatar
IT Man
Redaktor
Avatar
IT Man:

Ahoj programátoři,
už dlouhou dobu řeším přihlašování. Jedná se o PHP a načítá to data z MySQL databáze. Bohužel, vše se načte (tedy IP i uživatelské jméno), ale jediná věc, co se mi nechce uložit do $_SESSION je hodnota admin. Admin je v číselné hodnotě (0 = uživ., 1 = redaktor, 2 = admin). Nevíte, co s tím je? Budu rád za každou pomoc. :)

<?php
        session_start();
        $error = "";
        if(isset($_POST['submit_login']))
                {
                $username = addslashes(mysql_real_escape_string($_POST['username']));
                $password = addslashes(mysql_real_escape_string($_POST['password']));
                if($username && $password)
                {
                        $pass = sha1(strtoupper($username) . ':' . strtoupper($password));
                        $query = mysql_query("SELECT id, admin FROM `users` WHERE `username` = '" . $username ."' AND `password` = '" . $pass . "'") or die(mysql_error());
                        if(mysql_num_rows($query) == 1)
                        {
                                $_SESSION['username'] = $username;
                                $_SESSION['admin'] = $query['admin'];
                                $_SESSION['current_IP'] = $_SERVER['REMOTE_ADDR'];
                                header('Location: http://application.wz.cz/administrace.php');
                        }
                        else $error = "Tento účet neexistuje!";
                }
                else $error = "Nevyplnil/a jste všechna políčka!";
                }
        echo $error;
?>
Odpovědět 29.8.2014 14:12
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
tomasmanhal
Člen
Avatar
tomasmanhal:

Já se tam nevyznám v těch jednoduchých uvozovkách toho SQL příkazu, je tam tuším jedna možná víc navíc, nemůže to být tím? :-)

Nahoru Odpovědět 29.8.2014 14:19
Kdyby nám dodali k životu zdrojový kód, vše by bylo jednodušší...
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Protože proměnná $query neobsahuje pole dat z DB. Musíš to ještě projít nějakou funkcí, např. mysql_fetch_as­soc().

Btw, do session bys měl uložil hlavně ID uživatele a roli (admin apod.). Jméno a IP není třeba.

Edit: Mám pocit, že funkce mysql_fetch_* vrací FALSE, když se nenalezl žádný záznam. Proto tam mysql_num_rows() vůbec nepotřebuješ a stačí ti:

$query = mysql_query("SELECT `id`, `admin` FROM ...");
$data = mysql_fetch_assoc($query);
if ($data !== FALSE) {
  $_SESSION["uzivatelId"] = $data["id"];
  $_SESSION["admin"] = $data["admin"];
} else {
  // chyba, podle jména a hesla se nic nenalezlo
}
Editováno 29.8.2014 14:34
Akceptované řešení
+20 Zkušeností
+1 bodů
Řešení problému
 
Nahoru Odpovědět  +1 29.8.2014 14:32
Avatar
IT Man
Redaktor
Avatar
IT Man:

Děkuji moc Martine. Zkusil jsem to, jak si řekl a povedlo se. Tedy sice nějak po 5 minutách (dříve jsem už udělal asi milión pokusů, ty se teprve teď ukázaly :D). Takže vše funguje tak jak má a já konečně mohu pokračovat ve své tvorbě. Ještě jednou děkuji. :)

Nahoru Odpovědět 29.8.2014 16:13
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Nemáš zač. Když tak se podívej na rozdíl mezi mysql_fetch_row(), mysql_fetch_assoc() a mysql_fetch_a­rray().

 
Nahoru Odpovědět 29.8.2014 16:35
Avatar
IT Man
Redaktor
Avatar
Nahoru Odpovědět 29.8.2014 16:38
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Avatar
Odpovídá na IT Man
Martin Konečný (pavelco1998):

Úplně v nejlepším případě by ses ale měl podívat na PDO. :) Funkce mysql_* jsou zastaralé a budou z PHP odstraněny.

 
Nahoru Odpovědět 29.8.2014 16:39
Avatar
Matúš Petrofčík
Šéfredaktor
Avatar
Odpovídá na IT Man
Matúš Petrofčík:

pozor na jednu bezpečnostnú chybu!!!
za presmerovaním cez header je vždy potrebné ukončiť skript pomocou exit; (alebo exit(); die; die(); - čo je vlastne to isté ale odporúčam exit)

header('Location: http://application.wz.cz/administrace.php');
exit;
Nahoru Odpovědět 29.8.2014 16:40
obsah kocky = r^2 ... a preto vlak drnká
Avatar
IT Man
Redaktor
Avatar
Odpovídá na Matúš Petrofčík
IT Man:

No jo. Ihned napraveno. :) Děkuji

Nahoru Odpovědět 29.8.2014 16:46
Když nevíš jak dál, podá ti ruku někdo, od koho by jsi to nečekal. A tu šanci musíš přijmout!
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 9 zpráv z 9.