0

我在一个名为site其他无害的东西的类中有这个:

private 
    $notice_type = '',
    $notice_msg = '';

public function setNotice($type,$msg){
    $this->notice_type=$type;   
    $this->notice_msg=$msg;
}

public function notice($what){
    switch($what){
        case 'type': return $this->notice_type; break;
        case 'msg': return $this->notice_msg; break;
    }
}

public function clearNotice(){
    $this->notice_type='';  
    $this->notice_msg='';
}

我已将此类设置为这样的会话: $_SESSION['site'] = new site();

这是我如何使用它的一个场景:
提交表单后;我将通知设置为:$_SESSION['site']->setNotice('success','success message');,如果是这种情况,则设置错误,并在此处使用header().

然后我在登录页面上输出这样的消息:
echo $_SESSION['site']->notice('msg');
$_SESSION['site']->clearNotice();.

但; 当我使用clearNotice()-function 时,两者的内容$notice_type都会$notice_msg在输出到浏览器之前被清除。

我需要它一直存在,直到用户以某种方式离开页面。我在这里想念什么?

4

1 回答 1

0

我不知道发生了什么。但不知何故,这个脚本开始按预期工作。
我已经一遍又一遍地重写了代码,据我所知,它和以前差不多。但不管怎么说; 这就是现在的工作:

site()-class:
这个类控制通知以及用户设置的设置——比如数据的首选排序方向和值得记住的选择,以获得更好的用户体验等。

<?php
class site {
    private 
        $notice_type = '',
        $notice_msg = '';

    public function newNotice($type,$msg){
    $this->notice_type=$type;   
        $this->notice_msg=$msg;
    }

    public function notice($what){
    switch($what){
            case 'type': return $this->notice_type; break;
            case 'msg': return $this->notice_msg; break;
    }
    }

    public function clearNotice(){
            $this->notice_type='';  
            $this->notice_msg='';
    }
}
?>

Yes我有一个文档,我通过将几个变量设置为or来配置整个站点No- 在这种情况下:$_SITE_CLASS_site

<?php
#   check to see if session is started
    if(!isset($_SESSION)){session_start();}
//
//  check if site()-class should be activated for this site
    if($_SITE_CLASS_site=='Yes'){
    #   if Yes; prevent resetting the class if it has already been started.
        if(!isset($_SESSION['site'])){$_SESSION['site']=new site();}
    //
    }
//
?>

我创建了一个模板,在输出页面内容之前我有这个代码:
基本上它只是检查是否有任何消息要显示

    <?php if ($_SITE_CLASS_site=='Yes'&&$_SESSION['site']->notice('msg')!=''): ?>
            <div id="site-notice-<?=$_SESSION['site']->notice('type')?>" class="grid_12"><p><?=$_SESSION['site']->notice('msg')?></p></div>
    <?php endif; ?>

然后我加载页面内容,最后我得到了这个:
在用户关闭它或离开页面之前,该通知应该是可见的。我不想或不需要保留消息

<?php 
    if ($_SITE_CLASS_site=='Yes'&&$_SESSION['site']->notice('msg')!=''):
        $_SESSION['site']->clearNotice();
    endif;
?>

现在; 每当我需要向用户提供有关其操作的反馈时——例如,在成功提交表单后——我可以在脚本末尾执行此操作:

$_SESSION['site']->newNotice('success','<b>Success!</b> Your request was submitted successfully...');
header('Location '.$_SERVER['HTTP_REFERER']);
exit;

它就像一个魅力......

于 2013-06-07T22:01:42.183 回答