php окно предупреждения с кнопками ОК и Отмена - PullRequest
0 голосов
/ 07 мая 2020

У меня есть код php (также немного javascript) , как показано ниже, в котором предупреждающее сообщение отображается, когда второй пользователь пытается войти в форму с помощью один пользователь уже вошел в систему .

Проблема, с которой я сейчас сталкиваюсь, заключается в нажатии ok в окне предупреждения , он входит в блок if , но при нажатии кнопки «Отмена» этого не происходит. go внутри блока else вместо этого он снова входит в блок if .

<?php
    $message = "user " . $row['user_name'] . " is logged in. Do you want to take over ?";
    echo "<script type='text/javascript'>confirm('$message');</script>";
    if(confirm)
    {
        $stmt1=$connect->prepare("UPDATE trace_users SET write_access='0' WHERE write_access='1'"); // revoke write access of all users
        $stmt1->execute();
    }
    else
    {
        echo "I am in else block";  // Line A
        $stmt1=$connect->prepare("UPDATE trace_users SET write_access='1' WHERE write_access='0'"); // revoke write access of all users
        $stmt1->execute();
    }
?>

Я добавил Line A / Line B для отладки. При нажатии кнопки Ok вызывается линия A, а при нажатии кнопки Cancel линия A вызывается снова.

Ответы [ 2 ]

1 голос
/ 07 мая 2020

Вот краткий пример для начала:

index.php
<?php
//....
$user =  "John Doe"; // $row['user_name'];
$message = "User $user is logged in. Do you want to take over?";

if (isset($_GET['takeover'])) {
    if ($_GET['takeover'] == "confirm") {
        // $stmt1 = $connect->pre......etc
        exit(json_encode(["message" => "Access confirmed"])); // Send response to JS
    } else {
        // $stmt1 = $connect->pre......etc
        exit(json_encode(["message" => "Access revoked"])); // Send response to JS
    }
}
?>
<!DOCTYPE html>
<html lang="en">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>TEST</title>
</head>
<body>

  <h1>MY USER INTERFACE</h1>

  <script>
    const takeover = confirm("<?= $message ?>");
    fetch(`?takeover=${takeover ? "confirm" : "revoke"}`)
      .then(response => response.json())
      .then(data => {
        console.log(data);
      });
  </script>
</body>
</html>
  • сервер будет «убирать» теги PHP перед обслуживанием страницы, но отраженные значения останутся. Т.е.: $message внутри кода JavaScript.
  • При готовности документа запускаются триггеры confirm(), а в JS передается логическое значение.
  • В зависимости от этого значения просто выберите тот же файл (или любой другой, если хотите) с помощью запроса GET somepagename.php?takeover=confirm
  • Прослушайте PHP для $_GET запросов и ответьте на AJAX запрос с ответом JSON.
  • Откройте консоль и посмотрите, как сервер отвечает соответствующими данными объекта сообщения.

Удачного кодирования.

0 голосов
/ 07 мая 2020

На вашей странице пользователя. php у вас есть логин:

<a href="confirm_login.php?user_name=" . $row['user_name']>Log In</a>

в вашем confirm_login. php у вас есть подтверждение с двумя вариантами:

$message = "user " . $_GET[user_name] . " is logged in. Do you want to take over ?";
<a href="userpage.php?confirm=yes">Yes</a>
<a href="userpage.php?confirm=no">No</a>

Теперь, когда вы выбираете опцию, вы перенаправляетесь обратно на страницу пользователя. php:

if ( $_GET[confirm] == "yes" ) {
    $stmt1=$connect->prepare("UPDATE trace_users SET write_access='0' WHEREwrite_access='1'");
    $stmt1->execute();
} else if ( $_GET[confirm] == "no" ) {
    $stmt1=$connect->prepare("UPDATE trace_users SET write_access='1' WHERE write_access='0'"); // revoke write access of all users
    $stmt1->execute();  
}

Это простой метод PHP, описанный в вашей статье. Как говорят другие крутые парни, вы можете использовать AJAX, чтобы не менять URL.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...