【问题标题】:If variable is set, show $_SESSION data如果设置了变量,则显示 $_SESSION 数据
【发布时间】:2013-08-08 03:36:46
【问题描述】:

我很难使用isset() 函数。究竟我如何告诉 php 只有当数据被分配给我的时候,比如说 $_SESSION['msg'];变量,然后才激活它并使用它......到目前为止,我收到了很多通知:未定义的索引并且这段代码也没有这样做:

if (isset($_SESSION['monster']) &
isset($_SESSION['spol']) &  
isset($_SESSION['combat']) &
isset($_SESSION['turns']) &  
isset($_SESSION['zmaga']) &
isset($_SESSION['zguba']) &
isset($_SESSION['cekini']) &
isset($_SESSION['post']) )

{
$monster = $_SESSION['monster'];
$spol = $_SESSION['spol'];
$combat = $_SESSION['combat'];
$turns = $_SESSION['turns'];
$zmaga = $_SESSION['zmaga'];
$zguba = $_SESSION['zguba'];
$cekini = $_SESSION['cekini'];
$_POST = $_SESSION['post'];
}

数据应该从重定向的前一个站点分配给它,但该站点并不总是激活,所以我需要一个替代方案。这就是我问这个的原因。

使用完整代码编辑:

session_start();

include 'razno.php';
include 'save.php';
include 'stats.php';

$igralec_ime = $_SESSION['username'];
$monster = prikazi_borba($igralec_ime);
$poskodbe = prikazi_stat('curhp', $igralec_ime);

if (prikazi_stat('curhp', $igralec_ime) == 0)
{
$moznost = 'Tvoje zdravje je resno ogroženo, vrni se domov!';
}

else if (isset($_SESSION['monster']) &&
isset($_SESSION['spol']) &&  
isset($_SESSION['combat']) &&
isset($_SESSION['turns']) &&  
isset($_SESSION['zmaga']) &&
isset($_SESSION['zguba']) &&
isset($_SESSION['cekini']) &&
isset($_SESSION['post']) )
{
$monster = $_SESSION['monster'];
$spol = $_SESSION['spol'];
$combat = $_SESSION['combat'];
$turns = $_SESSION['turns'];
$zmaga = $_SESSION['zmaga'];
$zguba = $_SESSION['zguba'];
$cekini = $_SESSION['cekini'];
$_POST = $_SESSION['post'];

}

update_save($igralec_ime, 'gozd', $monster);

include '../html/gozd.html';
?>

【问题讨论】:

  • 您使用的是按位 AND & 而不是逻辑 AND &&
  • 更简单,你可以使用if(isset($var1, $var2, $var3, ...)),如果所有变量都设置好了,它将返回true
  • 谢谢,是的,很有可能会缩短我的代码。虽然问题仍然存在,但我更新了我的问题
  • 我的猜测是,当未定义 $_SESSION 索引时,您没有设置变量,但无论如何您稍后都会尝试使用它们。例如,您在if 之后使用$monster,即使它可能未设置。

标签: php html mysql session


【解决方案1】:

您需要将 & 替换为 and:

if (isset($_SESSION['monster']) and isset($_SESSION['spol']) and isset($_SESSION['combat']) and isset($_SESSION['turns']) and isset($_SESSION['zmaga']) and isset($_SESSION['zguba']) &
isset($_SESSION['cekini']) and isset($_SESSION['post']) )

{
$monster = $_SESSION['monster'];
$spol = $_SESSION['spol'];
$combat = $_SESSION['combat'];
$turns = $_SESSION['turns'];
$zmaga = $_SESSION['zmaga'];
$zguba = $_SESSION['zguba'];
$cekini = $_SESSION['cekini'];
$_POST = $_SESSION['post'];
}

【讨论】:

  • 男士谢谢你,虽然我仍然得到“注意:未定义的变量:spol ...”并且变量是不可见的,就像它根本不存在一样。也许我的问题可能是其他的?我用完整的代码更新了我的问题
  • 它是否在您包含的文件中定义(我过去遇到过问题)?基于这个问题 (stackoverflow.com/questions/2830334/…),您需要将这些变量设置为 $GLOBALS['var_name']
  • 我没有包含我将页面重定向到新页面的文件,如果我使用 isset() 但在没有 isset() 的情况下工作,现在会出现问题。在我的重定向页面上,它们确实被定义为“$_SESSION['spol'] = $spol;”。你知道可能是什么问题吗?
  • 修复它,我使用“or”而不是“and”,因为并非所有变量都是同时定义的
【解决方案2】:

你应该看看 PHP 中的logical operators。在许多编程语言(包括 PHP)中,&'按位和' 运算符(不合逻辑)。由于您需要逻辑运算符,因此您需要使用&&and。还可以看看其他 PHP 运算符,只是为了熟悉它们并避免此类问题。

此外,如果您在 if/then 块之外使用这些值,您应该考虑您的语句为假的情况,并为这些变量分配一些默认值。

【讨论】:

  • 更正,他们只是不想被设置,我不知道为什么
猜你喜欢
  • 2012-11-17
  • 2019-08-07
  • 2018-05-22
  • 2021-01-01
  • 1970-01-01
  • 2014-09-18
  • 1970-01-01
  • 1970-01-01
  • 2021-11-29
相关资源
最近更新 更多