очистите URL-адрес из $ _GET, затем отобразите предупреждающее сообщение после обновления

#php #bootstrap-4

#php #bootstrap-4

Вопрос:

Суть в том, чтобы изменить статус пользователя (активный / неактивный) с помощью кнопки, очистить URL от всех GET, а затем отобразить предупреждающее сообщение из bootstrap

Здесь URL-адрес: http://localhost:8282/userslist.php?deactive=59

Что я подразумеваю под очисткой: http://localhost:8282/userslist.php

Отобразить предупреждающее сообщение:

введите описание изображения здесь

Я могу очистить URL-адрес с помощью a location.href='userslist.php' , но мое предупреждающее сообщение не отображается (потому что обновление скрывает сообщение), или я могу отобразить предупреждающее сообщение, но я не могу очистить URL. Я пытался сделать это отдельно с помощью двух echo, но без какого-либо успеха.

Кнопка для активного / неактивного пользователя:

http://localhost:8282/userslist.php?deactive=52
http://localhost:8282/userslist.php?active=52

Мой код

 if (isset($_GET['deactive'])) {
    $deactive = preg_replace('/[^a-zA-Z0-9-]/', '', (int)$_GET['deactive']);
    userDeactiveByAdmin($conn, $deactive, $_SESSION["users_uid"]);
    $getProfile = getProfile($conn, $deactive);
    $username = $getProfile["users_uid"];
    //echo "<script>location.href='userslist.php';</script>";
    echo "<div class='alert alert-warning alert-dismissible fade show text-center' role='alert'>User <strong>"$username"</strong> inactive with success
    <button type='button' class='close' data-dismiss='alert' aria-label='Close'>
    <span aria-hidden='true'>amp;times;</span>
    </button>
    </div>";
}
  

Моя функция

 function userDeactiveByAdmin($conn, $id, $username)
{
    $sql = "UPDATE users SET isActive = 1, updated_by = '$username' WHERE users_id = $id;";
    $stmt = $conn->prepare($sql);
    $stmt->execute();
}
  

Я не знаю, как я могу сделать оба (очистить URL и отобразить предупреждающее сообщение).

Комментарии:

1. Я думаю, что самым простым решением было бы немного jquery. Взгляните на это itsolutionstuff.com/post /…

Ответ №1:

Один из распространенных подходов, поскольку вы уже используете $_SESSION значения, заключается в использовании header() перенаправления и сравнении с отдельной переменной сеанса вместо $_GET переменной.

Конечным результатом является то, что страница появится для быстрой перезагрузки после выполнения желаемого действия ( userDeactiveByAdmin() ), удаляющего строку запроса в URL, а затем отобразит сообщение на основе предоставленного $_SESSION значения.

Это также может быть преобразовано для изменения URL-адреса страницы обработки для реализации разделения проблем, например, /deactivate.php?user=59 вместо использования /userlist.php?deactive=59 .

Я рекомендую использовать filter_input функции и / или filter_var для очистки и проверки входных данных с помощью желаемых параметров фильтра. Это гарантирует, что вы не принимаете неожиданные значения.

 $deactive = filter_input(INPUT_GET, 'deactive', FILTER_VALIDATE_INT);
if (false !== $deactive) {
   userDeactiveByAdmin($conn, $deactive, $_SESSION["users_uid"]);
   $_SESSION['deactive'] = $deactive;
   header('Location: /userlist.php');
   exit;
}

if (!empty($_SESSION['deactive'])) {
    $deactive = filter_var($_SESSION['deactive'], FILTER_VALIDATE_INT);
    unset($_SESSION['deactive']);

    if (false !== $deactive) {
        $username = getProfile($conn, $deactive)["users_uid"];

        echo "<div class='alert alert-warning alert-dismissible fade show text-center' role='alert'>User <strong>"$username"</strong> inactive with success
<button type='button' class='close' data-dismiss='alert' aria-label='Close'>
<span aria-hidden='true'>amp;times;</span>
</button>
</div>";
    }
}
  

Приведенное выше также можно адаптировать для сохранения имени пользователя или всего сообщения, которое вы хотите отобразить.

 $deactive = filter_input(INPUT_GET, 'deactive', FILTER_VALIDATE_INT);
if (false !== $deactive) {
   userDeactiveByAdmin($conn, $deactive, $_SESSION["users_uid"]);

   $username = getProfile($conn, $deactive)["users_uid"];
   $_SESSION['warning'] = "User <strong>"$username"</strong> inactive with success";

   header('Location: /userlist.php');
   exit;
}

if (!empty($_SESSION['warning'])) {
    $warning = $_SESSION['warning'];
    unset($_SESSION['warning']);

    echo "<div class='alert alert-warning alert-dismissible fade show text-center' role='alert'>$warning
<button type='button' class='close' data-dismiss='alert' aria-label='Close'>
<span aria-hidden='true'>amp;times;</span>
</button>
</div>";
}
  

Что касается $deactive = preg_replace('/[^a-zA-Z0-9-]/', '', (int)$_GET['deactive']); .
Вам действительно нужно $deactive = (int)$_GET['deactive']; .
Однако, поскольку приведение к типу (int) "-"; или любое нечисловое значение приведет к 0, я настоятельно рекомендую использовать filter_input или filter_var вместо этого с желаемыми параметрами фильтра, что приведет к false тому, что будет предоставлено неожиданное значение. Пример: https://3v4l.org/YfCOH