Как изменить переменную в соответствии с пользователем, администратором - PullRequest
1 голос
/ 14 апреля 2019

У меня есть пользовательская таблица со столбцом с именем id_role.Всем новым пользователям по умолчанию присваивается значение id_role, равное 3.

Любым пользователям, которым требуются привилегии более высокого уровня, я вручную обновляю их до 2 для administrator и 1 для super_admin.

Проблема в том, что id_role все еще стоит стоимости последней зарегистрированной, и я не понимаю, почему.

https://imgur.com/IjEqzq9

Если я не добавлю нового пользователя id_role, это всегда будет 1, и все будут входить в систему superadmin, если я добавляю нового пользователя, id_role будет 3, и каждый (даже администратор) будетвойдите в систему как обычный пользователь.

Вот мой основной код:

<?php
session_start();

$Nom = $_POST["Nom"];
$mdp = $_POST["mdp"];
//$id_role = $_POST["id_role"];

try{
    $bdd = new PDO('mysql:host=localhost;dbname=azer', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch(Exception $e) {
    die("acces imlpossible");
}

$st = $bdd->query("SELECT * FROM membre WHERE Nom='".$Nom."'")->fetch();
$mangetesmorts = $bdd->query("SELECT * FROM membre WHERE id_role");

if (password_verify($mdp, $st['mdp'])) {
    $_SESSION['Nom'] = $Nom;
    $_SESSION['activite'] = $st['activite'];    //$_SESSION['id_role'] = $mangetesmorts['id_role'];
    //var_dump($_SESSION['id_role']);

    //print_r($id_role);
    while ($donne = $mangetesmorts->fetch()) {
        if ($_SESSION['activite'] =='cricket') {
            header("Location: cricket.php");
        } elseif ($_SESSION['activite'] == 'foot') {
            header("Location: foot.php");
        } elseif (($donne['id_role'] == 2)) {
            header("Location: admin.php");
        } elseif ($donne['id_role'] == 1) {
            header("Location: admin_super.php");
        } else {
            header("Location: index2.php");}
        }
   }

и вот что я попробовал после:

<?php
session_start();

$Nom = $_POST["Nom"];
$mdp = $_POST["mdp"];
//$id_role = $_POST["id_role"];

try{
    $bdd = new PDO('mysql:host=localhost;dbname=azer', 'root', '', array(PDO::ATTR_ERRMODE => PDO::ERRMODE_EXCEPTION));
} catch (Exception $e) {
    die("acces imlpossible");
}

$st = $bdd->query("SELECT * FROM membre WHERE Nom='".$Nom."'")->fetch();
$mangetesmorts = $bdd->query("SELECT * FROM membre WHERE id_role");

if (password_verify($mdp, $st['mdp'])) {
    $_SESSION['Nom'] = $Nom;
    $_SESSION['activite'] = $st['activite'];
    //$_SESSION['id_role'] = $mangetesmorts['id_role'];
    //var_dump($_SESSION['id_role']);

    //print_r($id_role);
    while ($donne = $mangetesmorts->fetch()) {
        $_SESSION['id_role']=$donne['id_role'];
        if ($_SESSION['activite'] =='cricket') {
            header("Location: cricket.php");
        } elseif ($_SESSION['activite'] == 'foot') {
            header("Location: foot.php");
        } elseif ($_SESSION['id_role'] == 2) {
            header("Location: admin.php");
        } elseif ($_SESSION['id_role'] == 1) {
            header("Location: admin_super.php");
        } else {
            header("Location: index2.php");
        }
    }
}

1 Ответ

1 голос
/ 14 апреля 2019

Ваш блок условных перенаправлений основан на втором запросе, который не ссылается на пользователя, который успешно вошел в систему. (Если этот запрос работает вообще).

Другими словами, while ($donne = $mangetesmorts->fetch()) { собираетсячтобы извлечь все строки из таблицы, а затем выполнить итерацию только первой строки, так как перенаправление завершит выполнение сценария.

Поскольку ваш первый запрос SELECT возвращает полную строку данных для пользователя в виде массива $stпросто используйте это для определения перенаправления.

if (in_array($st['activite'], ['cricket', 'foot'])) {
    header("Location: {$st['activite']}.php");
} elseif ($st['id_role'] == 2) {
    header("Location: admin.php");
} elseif ($st['id_role'] == 1) {
    header("Location: admin_super.php");
} else {
    header("Location: index2.php");
}

Вы можете объявить любые $_SESSION элементы, которые вам нравятся, я оставил их вне этого блока условий для ясности / согласованности.

...