首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >PHP -变量值的奇怪变化

PHP -变量值的奇怪变化
EN

Stack Overflow用户
提问于 2010-07-07 20:31:56
回答 1查看 129关注 0票数 0

A编写了以下代码:

代码语言:javascript
复制
<?php
require("../../config.php");
require("../php/funct.php");

try {
    $pdo = new PDO('mysql:host='.DB_HOST.';dbname='.DB_TABL.';', DB_AUSER, DB_APASS);
}
catch(PDOException $e) {
    echo 'Error: ' . $e->getMessage();
}
$idee=unique_id();
$insystem=true;

include('session_check.php');

unset($insystem);
    print($sesja);  ///// SECOND PRINT()
if($sesja!=1) {
    die("Session error");
    exit;
} else {    
       //some other code
}

session_check.php在这里:

代码语言:javascript
复制
<?php
if(isset($insystem) && $insystem) {
    if(!isset($_COOKIE['seid']))    {
        setcookie('seid', $idee, time() + COOKIELIFE);
        $sesja=0;
    } else {
        setcookie('seid', $_COOKIE['seid'], time() + COOKIELIFE);
        $dane=$pdo->prepare('SELECT s.id, s.ip, s.czas, s.prawa, p.nick, p.id FROM sessions s JOIN pracownicy p ON s.Pracownicy_id=p.id WHERE s.id=:id');
        $dane->bindValue(':id',$_COOKIE['seid'], PDO::PARAM_STR);
        $dane->execute();
        $dsesji = $dane -> fetch();
        $dane->closeCursor();
        unset($dane);
        if($dsesji!==false) {
            if(isset($_GET['lo']) && ($_GET['lo']==='lo') && isset($indeks) && $indeks) {
                $usun=$pdo->prepare('DELETE FROM sessions WHERE id=:id');
                $usun->bindValue(':id',$_COOKIE['seid'], PDO::PARAM_STR);
                $usun->execute();
                unset($usun);
                setcookie('seid', 'abc', time() - 42000);
                header("Location: index.php");
            }
            $sesja=1;
            $_nick=$dsesji['nick'];
            $_Pracownicy_id=$dsesji['id'];
            $_prawa=explode('|',$dsesji['prawa']);
            unset($_prawa[count($_prawa)-1]);
            if($dsesji['ip']!=$_SERVER['REMOTE_ADDR']) {
                $usun=$pdo->prepare('DELETE FROM sessions WHERE id=:id');
                $usun->bindValue(':id',$_COOKIE['seid'], PDO::PARAM_STR);
                $usun->execute();
                unset($usun);
                setcookie('seid', 'abc', time() - 42000);
                header("Location: index.php?lo=bs");
                exit;
            }
            $teraz=time();
            $roznica=$teraz-$dsesji['czas'];
            if($roznica>(TIMEOUT*60)) {
                $usun=$pdo->prepare('DELETE FROM sessions WHERE id=:id');
                $usun->bindValue(':id',$_COOKIE['seid'], PDO::PARAM_STR);
                $usun->execute();
                unset($usun);
                setcookie('seid', 'abc', time() - 42000);
                header("Location: index.php?lo=to");
                exit;
            }
            if($sesja!=0) {
                $idee=unique_id();
                setcookie('seid', $idee, time() + COOKIELIFE);
                $dane=$pdo->prepare('UPDATE sessions SET id=:nowyid WHERE id=:id');
                $dane->bindValue(':nowyid',$idee, PDO::PARAM_STR);
                $dane->bindValue(':id',$_COOKIE['seid'], PDO::PARAM_STR);
                $dane->execute();
                unset($dane);
                $_CURR_SID=$idee;
                unset($idee);
            }
            print($sesja);  ///// FIRST PRINT()
        } else {
            $sesja=0;

        }
    }
} else {
    die('aerr1');
}
?>

问题是:第一个打印(从session_check.php)打印出1-什么是期望值,但主脚本中的第二个打印输出0,这对我来说很奇怪,因为$sesja变量在这两个打印之间没有改变。

怎么了?

EN

Stack Overflow用户

发布于 2010-07-07 20:44:34

发生这种情况是因为include中的变量作用域。$sesja最初是在您包含的代码中设置的,并且只存在于其中。当代码执行返回到主PHP脚本时,$sesja就超出了范围并被遗忘了。

要解决此问题,您需要在include之前的某个位置设置$sesja = 0;。然后,包含的代码将继承作用域并修改正确的变量。

票数 2
EN
查看全部 1 条回答
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/3194664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档