Открытие модального окна с использованием PHP

Я создаю систему входа в систему в PHP, и я пытаюсь сделать это немного лучше.

Когда вы выйдете из системы, вы будете перенаправлены обратно на index.php. Как это:

header("loaction: index.php?logout=true")

Это делает URL похожим на www.mysite.com/index.php?logout=true. Затем я использую следующий код:

if(isset($_GET['logout'])) {

$logoutvalue = $_GET['logout'];

if($logoutvalue = "true") {
$notification = "You've been logged out!";  
}

чтобы получить значение выхода из URL-адреса и что-то сделать с ним.

У меня есть небольшое всплывающее окно, которое будет отображать значение переменной уведомления. В данном случае это "Вы вышли из системы!" У меня вопрос, как мне заставить модальное окно отображаться при загрузке страницы и когда URL равен /index.php?logout=true?

Все комментарии, ответы и предложения приветствуются!

Спасибо! - Райан

6 ответов

Прежде всего,

Вы не можете "Открыть модальное окно с помощью PHP" напрямую. Вы можете сделать это только путем обмена переменными (через JSON или XML) или встраивания условий PHP прямо в вашу разметку.

PHP и JavaScript независимы.

У меня вопрос, как мне заставить модальное окно отображаться при загрузке страницы и когда URL равен /index.php?logout=true?

Есть два способа добиться этого.
Во-первых: хорошо использовать встраивание условий PHP прямо в разметку.

Второе: есть где-то скрытый ввод, вроде (<input type="hidden" id="showModal" />), а затем проверьте, существует ли он через сам JavaScript.

Например:

<!DOCTYPE html>
<html>
<head>

   <script type="text/javascript">

      window.onload = function(){

           if ( document.getElementById('showModal') ){

               alert('Box'); //replace with your own handler
           }

      }

   </script>

</head>
<body>

<?php if ( isset($_GET['logout']) && $_GET['logout'] === 'true' ): ?>

<input type="hidden" id="showModal" />

<?php endif;?>
</body>
</html>

Вы ищете что-то вроде:

<script>
<?php if(isset($_GET['logout']) && $_GET['logout'] === 'true'){
    echo 'alert("You\'ve been logged out!");'
}
?>
</script>

РЕДАКТИРОВАТЬ: я думаю, что вы ищете что-то вроде этого для модального окна (с помощью jQuery)

<?php if(isset($_GET['logout']) && $_GET['logout'] === 'true'){
    $message = "You've been logged out!";
?>
    <script>
    $(function() {
        $("#dialog").dialog();//if you want you can have a timeout to hide the window after x seconds
    });
    </script>
    <div id="dialog" title="Basic dialog">
        <p><?php echo $message;?></p>
    </div>
<?php } ?>

Я знаю, что это старый пост, но чтобы помочь кому-то в будущем с подобным квестом, я думаю, что следующее может помочь в правильном направлении (я сам проверил приведенный ниже код, поэтому, пожалуйста, внесите изменения).

<?php if(isset($_GET['logout']) && $_GET['logout'] === 'true'){
        $message = "You've been logged out!";
    ?>
        <script>
        $(function() {
         $('#myModal').modal('show');
        });
        </script>

    <div class="modal fade" id="myModal" role="dialog">
        <div class="modal-dialog" role="document">
            <div class="modal-content">
                <div class="modal-header">
                    <button type="button" class="close" data-dismiss="modal">&times;</button>
                    <h4 class="modal-title">Edit Data</h4>
                </div>
                <div class="modal-body">
                    <div class="fetched-data"><?php $message ?></div> 
                </div>
                <div class="modal-footer">
                    <button type="button" class="btn btn-default" data-dismiss="modal">Close</button>
                </div>
            </div>
        </div>
    </div>

    <?php } ?>

Итак, ваш существующий код похож на этот фрагмент, и проблема в том, что вы хотите показать модальный jQuery/Bootstrap, запущенный с / с PHP, но jQuery/JS еще не загрузился (так что вы получите ошибка "$ undefined").

Когда вы говорите "маленькое всплывающее окно", я предполагаю, что вы имеете в виду модальный тип начальной загрузки.

if(isset($_GET['logout'])) {
  $logoutvalue = $_GET['logout'];

  if($logoutvalue = "true") {
    $notification = "You've been logged out!";  
  }
}

Я переместил блок кода PHP в конец файла.php, после jQuery (и т. Д.) И включил в него включение, так что это выглядело бы так (при условии, что имя вашего модального имени равно id = "logoutModal"):

logout.php

if(isset($_GET['logout'])) {
  $logoutvalue = $_GET['logout'];

  if($logoutvalue = "true") {
    include("logout-modal.php");  
  }
}

выход из системы-modal.php

<?php ?>
  <script>
    $('#logoutModal').modal('show');
  </script>
<?php ?>

Не уверен на 100%, что это отвечает на ваш вопрос, но это работает для меня. Надеюсь это поможет.

Лучший способ сделать это с помощью шаблона PRG.

index.php

1. Создайте элемент для модального контента в HTML

<div id=modal></div>

2. Стиль вашего #modal элемент

#modal {
    position: fixed;
    display: none; /*important*/
    color: white;
    text-align: center;
    z-index: 1000;
    width: 100%;
    height: 80px;
    top: 50%;
    left: 50%;
    transform: translate(-50%,-50%);
    background: crimson;
    line-height: 2;
}

3. Определите функцию, как показать и скрыть модальное поле с помощью jQuery.

'use strict'

window.jQuery ?

    $.fn.notify = function(interval) {      
        let el = $(this),
            text = el.text(),

            modal =()=> { // this will fire after the interval has expired
                el.fadeOut(),
                clearInterval(timer)
            },

            timer = setInterval(modal,interval)

        !text.match(/\S+/) || el.text('') // this will fire when modal box contains text    
            .append(`<h3>${text}</h3>`)
            .show()
    }

: alert('jQuery required.')

4. Прикрепить .notify() в селектор jQuery

$(()=>{
    $('#modal').notify(1500) // 1500 is the interval in milliseconds
})

5. Вставьте уведомление, отправленное с PHP внутри #modal элемент

<div id=modal>
    <?=
        @$_SESSION["notify"]; // if this variable is not set, nothing will happen
        unset($_SESSION["notify"]); 
    ?>
</div>

6. Выполните простую $_GET запрос

<a href=parse.php?logout>Logout</a>


parse.php

7. Вернуть значение с помощью PHP в $_SESSION переменная

if (isset($_GET["logout"])) {
    $_SESSION["notify"] = "You have been logged out.";
    header("Location: index.php");
}


Это хорошая практика. После отправки запроса на выход в PHP он будет перенаправлен на страницу индекса с результатом в переменной сеанса. Шаблон PRG не всегда требует запроса POST. В этом примере отправляется запрос GET, который подходит для выхода из системы. Обратите внимание, что вы должны разместить session_start(); в верхней части ваших файлов.

Пожалуйста, загрузите модальную библиотеку JS http://simplemodal.plasm.it/

и использовать условие

if(isset($_GET['logout'])) {

$logoutvalue = $_GET['logout'];

if($logoutvalue = "true") {
code to open the Modal as in the JS library..... 
}

Или вы могли бы даже написать скрипт внутри оператора if:

<?php
if(isset($_GET['logout']) && $_GET['logout'] === 'true'){ ?>
    <script type="text/javascript>
     window.open(yourhtml);
 </script>
</php } 
else {
// may be some other script
}
?>
Другие вопросы по тегам