Vydělávej až 160.000 Kč měsíčně! Akreditované rekvalifikační kurzy s garancí práce od 0 Kč. Více informací.
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.
Avatar
Jan Lupčík
Tvůrce
Avatar
Jan Lupčík:29.8.2014 14:12

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
TruckersMP vývojář
Avatar
Tomáš Maňhal:29.8.2014 14:19

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
Avatar
Odpovídá na Jan Lupčík
Martin Konečný (pavelco1998):29.8.2014 14:32

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í
+2,50 Kč
Řešení problému
Nahoru Odpovědět
29.8.2014 14:32
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Jan Lupčík
Tvůrce
Avatar
Jan Lupčík:29.8.2014 16:13

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
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
Martin Konečný (pavelco1998):29.8.2014 16:35

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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Jan Lupčík
Tvůrce
Avatar
Nahoru Odpovědět
29.8.2014 16:38
TruckersMP vývojář
Avatar
Odpovídá na Jan Lupčík
Martin Konečný (pavelco1998):29.8.2014 16:39

Ú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
Aktuálně připravuji browser RPG, FB stránka - https://www.facebook.com/AlteiraCZ
Avatar
Odpovídá na Jan Lupčík
Matúš Petrofčík:29.8.2014 16:40

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
Jan Lupčík
Tvůrce
Avatar
Odpovídá na Matúš Petrofčík
Jan Lupčík:29.8.2014 16:46

No jo. Ihned napraveno. :) Děkuji

Nahoru Odpovědět
29.8.2014 16:46
TruckersMP vývojář
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.