Javascript 当我们获得get参数时,如何停止消息以显示页面是否刷新?

Javascript 当我们获得get参数时,如何停止消息以显示页面是否刷新?,javascript,php,mysql,Javascript,Php,Mysql,嗨,我正在尝试在PHP中发生某些事件时实现通知。假设用户正在更改其密码,并且在提交表单后,该操作会将其转到update.php,如果成功更改密码,则页面将重定向到change.php?err=1,其中1有一个noty通知,显示密码已成功更改。如果出现问题,它会重定向到change.php?err=2 update.php中用于更新密码的代码:- $sql="UPDATE user_credentials SET password=? WHERE id=?"; $stmt = $result-&g

嗨,我正在尝试在PHP中发生某些事件时实现通知。假设用户正在更改其密码,并且在提交表单后,该操作会将其转到update.php,如果成功更改密码,则页面将重定向到change.php?err=1,其中1有一个noty通知,显示密码已成功更改。如果出现问题,它会重定向到change.php?err=2

update.php中用于更新密码的代码:-

$sql="UPDATE user_credentials SET password=? WHERE id=?";
$stmt = $result->prepare($sql);
$stmt->bind_param("si", $hash,$id);

if($stmt->execute()) {
    header('Location: ../change.php?err=1');
}
else {
    header('Location: ../change.php?err=2');    
 } 
下面的代码用于在change.php中显示消息

if(isset($_GET['err']))    
{
   $error_id = $_GET['err'];

    if ($error_id == 1) {
    echo "<script> noty({text: 'Password Changed Successfully',layout:   'topRight',timeout: 2500,closeWith: ['click', 'hover'],type: 'success'});</script>";
    }

   else
   if ($error_id == 2) {
   echo "<script> noty({text: 'Something went wrong',layout: 'topRight',timeout: 2500,closeWith: ['click', 'hover'],type: 'success'});</script>";
   }
}
if(isset($\u GET['err']))
{
$error\u id=$\u GET['err'];
如果($error\u id==1){
echo“noty({text:'密码已成功更改',布局:'topRight',超时:2500,关闭:['click','hover'],键入:'success'});”;
}
其他的
如果($error\u id==2){
echo“noty({text:'出错了',布局:'topRight',超时:2500,closeWith:['click','hover'],键入:'success'});”;
}
}
现在,如果页面被引用,它将一次又一次地显示消息。我只想在邮件被重定向而不是刷新时显示该邮件

我想到了一个解决方法,使用如下会话:-

if ($error_id == 1) {
    if(!isset($_SESSION['notify'])) {
      $_SESSION['notify'] = TRUE;
      echo "<script> noty({text: 'Password Changed Successfully',layout: 'topRight',timeout: 2500,closeWith: ['click', 'hover'],type: 'success'});</script>";
    }
}
if($error\u id==1){
如果(!isset($\u会话['notify'])){
$\u会话['notify']=TRUE;
echo“noty({text:'密码已成功更改',布局:'topRight',超时:2500,关闭:['click','hover'],键入:'success'});”;
}
}
但它会在刷新时停止消息,但在页面重定向时不会显示

我刚刚开始学习php,所以请让我知道我做错了什么,或者还有什么更好的方法来解决这个问题。非常感谢您的帮助。

除了 if(isset($_GET['err']){

您可以添加:

如果(isset($\u GET['err'])&&$\u服务器['HTTP\u REFERER']==您的上一页){}

在您的例子中,除了 if(isset($_GET['err']){

您可以添加:

如果(isset($\u GET['err'])&&$\u服务器['HTTP\u REFERER']==您的上一页){}


在您的例子中是update.php

这种功能通常在您使用调用时效果最好,这意味着:无需刷新页面

您可以在后台调用
update.php
(参见上面粘贴的链接的文档),并根据
update.php
脚本的响应,在ajax函数的回调中决定显示什么通知

编辑:简单示例

$.ajax({
  url: "/update-password.php",
  data: {
    user: "some-user",
    pass: "new-pass"
  }
}).done(function(response) {
  // Show notification, decide on contents based on response
});

这种功能通常在您使用呼叫时最有效,这意味着:无需刷新页面

您可以在后台调用
update.php
(参见上面粘贴的链接的文档),并根据
update.php
脚本的响应,在ajax函数的回调中决定显示什么通知

编辑:简单示例

$.ajax({
  url: "/update-password.php",
  data: {
    user: "some-user",
    pass: "new-pass"
  }
}).done(function(response) {
  // Show notification, decide on contents based on response
});

对于错误消息,请使用会话而不是GET。在检测到错误时,在header()调用之前设置错误:

在change.php中(以及在任何其他页面中都可能设置消息),执行以下类似操作:

session_start();

if (strlen($_SESSION['error'])) {
    echo $_SESSION['error'];
    $_SESSION['error'] = false;
}

对于错误消息,请使用会话而不是GET。在检测到错误时,在header()调用之前设置错误:

在change.php中(以及在任何其他页面中都可能设置消息),执行以下类似操作:

session_start();

if (strlen($_SESSION['error'])) {
    echo $_SESSION['error'];
    $_SESSION['error'] = false;
}

你能给我看一下变更代码吗。php@LemuelBotha捕捉参数和显示错误的代码已发布。您是否还需要代码的其他部分。能否显示设置$\u GET['err']的代码、表单的代码及其处理为什么还要使用GET?将错误消息放入$\u会话;对于每个页面,如果存在会话错误消息var,请打印并取消设置…@LemuelBotha我已使用编解码器更新帖子,您可以显示更改代码。php@LemuelBotha捕捉参数和显示错误的代码已发布。您是否还需要代码的其他部分。能否显示设置$\u GET['err']的代码、表单的代码及其处理为什么还要使用GET?将错误消息放入$\u会话;对于每个页面,如果存在会话错误消息var,则打印并取消设置…@LemuelBotha我已经用代码ajax更新了帖子,ajax可以/可以工作;事实上,它比这类解决方案更“2016”,但实现起来更复杂,如果您以前没有做过,而且没有太多时间,那么这将是一个更好的解决方案;事实上,这比这类解决方案要“2016”得多,但实施起来更复杂,如果您以前没有这样做过,也没有太多时间,那么这将是一个更好的解决方案。