#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