Autor Zpráva
pito
Profil
Zdravím,

Mám dvě skupiny uživatelé a admini. Na hlavní stránce index.php je přihlašovací formulář. V databazi maji uživatelé nastaveno hodnotu 1 jako práva a admini hodnotu 2. Potřebují když se přihlasí uživatel tak aby ho to přesměřovalo na jiný web než admina.

Zkoušel jsem to nějak takhle,ale někde je chyba
index
ob_start();
session_start();
require_once 'connection.php';


$error = false;

if( isset($_POST['prihlas']) ) {
    
    $name = trim($_POST['nazev']);
    $name = strip_tags($name);
    $name = htmlspecialchars($name);

    $pass = trim($_POST['heslo']);
    $pass = strip_tags($pass);
    $pass = htmlspecialchars($pass);
    
    if (!$error) {

        $password = hash('sha256', $pass); // password hashing using SHA256

        $sql="SELECT id, nazev, heslo FROM users";
        $result = $db->query($sql);

        if ($result->num_rows > 0) {
            // output data of each row
            while($count = $result->fetch_assoc()) {


                if( $count['nazev'] == $name && $count['heslo']==$password ) {
                    $_SESSION['nazev'] = $count['nazev'];
                    $_SESSION['aktivace'] = $count['aktivace'];
                    header("Location: login.php");
                } else {
                    $errMSG = "Nesprávny login nebo heslo!";
                }
            }
        }
    }
}

login
session_start(); 

if($_SESSION['aktivace'] == '2'){
    header("Location: admin/index.php");
} else if ($_SESSION['aktivace'] == '1'){
    header("Location: uzivatele/index.php");
} else {
    header("Location: index.php");
}
Slark
Profil
Proč při odeslání přihlašovacího formuláře vybíráš všechny uživatele a pak následně jednotlivé řádky porovnáváš se zadaným názvem(loginem)? Stačí si přece upravit ten SQL dotaz tak, aby jsi rovnou vybral uživatele podle sloupce "nazev" a následně jen kontroloval heslo. Nicméně po přihlášení můžeš kontrolovat $count["aktivace"] a podle toho upravit header("location ...").

Tvoje definice problému "Zkoušel jsem to nějak takhle,ale někde je chyba" není dostatečná k tomu aby se dala "chyba" nějakým způsobem řešit.
pito
Profil
takže myslíš jakože změním dotaz SQL tedy přidám WHERE nazev='$name' ORDER BY nazev" ?
Tak by to mělo přece jít. Odešlu formulář a zjistim nazev a heslo. Přes SQL (where) se mi v databazi najde uživatele kterého chci a pak se porovná heslo z formuláře a z databáze jestli je stejné, jestli je tak přidám data do session a přeměřuji na login.php kde podle $_SESSION['aktivace'] by mě to mělo přeměřovat. Jenomže když se chci přihlásit a zadám správné údaje tak se nestane nic
Keeehi
Profil
pito:
Order by je tam zbytečně a $name obsahuje vstup od uživatele, takže je potřeba ecapovat, ale jinak ano.
pito
Profil
jo,ale nestane se nic. Ani mně to nikde nepřesměruje. Formulář mám v index.php tam kde se zpracují data a porovnavají. Vše jsem kontroloval a neměl by být nikde žádný překlep názvu
Slark
Profil
Pošlete sem jak teď vypadá ten PHP kód na indexu

PS: máte doufám zapnuté vypisování chybových hlášek?

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: