【问题标题】:isset / empty php session (if else statement) gives undefined indexisset / 空 php 会话(if else 语句)给出未定义的索引
【发布时间】:2015-11-08 23:46:49
【问题描述】:

我一直想创建一个更改 PHP 会话 onclick 的 javascript 函数。更改会话仅在一定程度上起作用。当我使用 isset 放置 if else 语句时,它会为第二个条件块(else)给出未定义索引的错误。到处搜索,但根本找不到任何线索。帮帮我吧。谢谢!这是我的代码。

Javascript

function changeLangToSpanish(){
var lang = "spanish";
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    // Reload the page
    window.location.reload();
    }
  }
xmlhttp.open("POST","set_session.php?lang=" + lang,true);
xmlhttp.send();
}

function changeLangToEng(){
var lang = "english";
var xmlhttp;
if (window.XMLHttpRequest)
  {// code for IE7+, Firefox, Chrome, Opera, Safari
  xmlhttp=new XMLHttpRequest();
  }
else
  {// code for IE6, IE5
  xmlhttp=new ActiveXObject("Microsoft.XMLHTTP");
  }
xmlhttp.onreadystatechange=function()
  {
  if (xmlhttp.readyState==4 && xmlhttp.status==200)
    {
    // Reload the page
    window.location.reload();
    }
  }
xmlhttp.open("POST","set_session.php?lang=" + lang,true);
xmlhttp.send();
}

PHP (set_session.php)

 <?php
    if(!isset($_SESSION)){
    session_start();
   }
   if(!isset($_SESSION['lang'])){
        $_SESSION['lang'] = "english";
   }
   else if(isset($_SESSION['lang'])){
        $_SESSION['lang'] = $_REQUEST['lang'];
   }
?>

HTML(用于测试目的)

<html>
<head>
    <?php 
    include "header.php";
    include "set_session.php";
    ?>
</head>
    <body>
        <button id = "lol" onclick = "changeLangToSpanish()">lol</button>
        <button id = "lol" onclick = "changeLangToEng()">loll</button>
        <span id = "lols"></span>

        <?php 
        if(isset($_SESSION['lang'])){

            echo '<script>
                document.getElementById("lols").innerHTML = "'.$_SESSION["lang"].'";
            </script>';
        }
        ?>
    </body>
</html>

所以,基本上有一个 HTML 可以在一个跨度中显示会话。会话的更改是由单击 2 个按钮引起的,其中左侧按钮将会话设置为“西班牙语”,右侧设置为“英语”。可以看到span由于会话的初始化而显示为“english”,但是当我点击其中一个按钮时,弹出一个未定义的索引错误,表明(else)代码块中的错误。使用 empty 而不是 isset 也不能​​解决它。而且我无法在会话之间切换。希望我能得到一个解决方案。谢谢!

【问题讨论】:

  • @Brendan Rollinson 的答案看起来是正确的,但您还应该注意其他一些小问题。看起来您有两个具有相同 ID 的按钮 - ID 应该始终是唯一的。这也不是什么大问题,但说else if (isset ($_SESSION['lang'])){ 可能是不必要的冗长 - 设置的数组元素只有两种可能的状态:是或否。如果if 条件失败,则 else if 条件可能是这种情况。小事,我知道,只是说。
  • 注明。谢谢! HTML 上的小警告可以忽略,因为它只是为了测试而完成的。另外,PHP的冗余哦。只是想给一个更清晰的图像哈哈。尽管如此,仍然给我同样的错误。
  • 编辑 - 已解决。非常感谢!

标签: javascript php jquery html session


【解决方案1】:

看起来有一个潜在的错误:

else if(isset($_SESSION['lang'])){
    $_SESSION['lang'] = $_REQUEST['lang'];

特别是,此代码不检查是否实际设置了 $_REQUEST['lang']。也许您的意思是检查而不是检查 $_SESSION['lang'] (这里将覆盖其值)?

【讨论】:

  • 编辑 - 误解了您的解决方案。我对 $_REQUEST 进行了 isset 检查,它就像一个魅力。谢谢!
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2014-09-14
  • 2016-11-21
  • 2018-09-26
  • 1970-01-01
  • 1970-01-01
  • 2015-12-16
  • 1970-01-01
相关资源
最近更新 更多