Isset / empty PHP session (if else语句)给出未定义的索引

isset / empty php session (if else statement) gives undefined index

本文关键字:未定义 索引 语句 else empty PHP session if Isset      更新时间:2023-09-26

我一直想创建一个javascript函数来改变PHP会话的onclick。改变会话只是在一定程度上起作用。当我使用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在span中显示会话。改变会话是通过点击2个按钮引起的,其中左键将会话设置为"西班牙语",右键将会话设置为"英语"。可以看到,由于会话的初始化,span显示"english",但是当我单击其中任何一个按钮时,会弹出一个未定义的索引错误,表明(else)代码块中存在错误。使用empty代替isset也不能解决这个问题。而且我无法在疗程之间切换。希望我能找到解决办法。谢谢!

似乎有一个潜在的错误

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

特别是,这段代码没有检查$_REQUEST['lang']是否实际设置。也许你的意思是检查,而不是检查$_SESSION['lang'](其值被覆盖在这里)?