PHP函数不显示变量

时间:2012-10-27 23:00:25

标签: php function

包含php文件:

    <?php
     session_start();

     $mysqli = new mysqli('[removed]', '[removed]', '[removed]', '[removed]') or mysqli_connect_error();

     function m($str, $mysqli) { return "'".$mysqli->real_escape_string($str)."'"; }
     function h($str, $mysqli) { echo $mysqli->htmlspecialchars($str); }

     $user = $mysqli->real_escape_string($_SESSION['username']);

     $user_query = "SELECT points FROM users WHERE username =" .m($user, $mysqli) ."";
     $result = $mysqli->query($user_query);
     $row = $result->fetch_assoc();
     $points = $row['points'];

     function checklogin(){
        if(isset($_SESSION['username'])){
        echo $user . " Points: " . $points; 
        }
      }
    ?>

html相关部分将是

<? include ('config.php')
   session_start(); 
   checklogin(); ?>

注意:在函数外部调用时,变量可以正常工作。

4 个答案:

答案 0 :(得分:5)

如果您想根据最佳做法执行此操作,则以下操作优于使用全局变量。

    function checklogin($user,$points)
    {
        if(isset($_SESSION['username'])){
            echo $user . ' Points: ' . $points;
        }
    }

答案 1 :(得分:1)

Thoses变量是全局的,所以你不能指望那些是checkLogin函数。因此,您将值作为函数参数传递:

function checklogin($user, $points, $session) {

    if (!isset($session['username'])) return;

    echo $user, " Points: ",  $points; 
  }

用法:

<?php
include 'config.php';
checklogin($user, $points, $_SESSION);

从技术上讲,您不需要将$_SESSION作为参数传递,我们在示例中执行此操作,以便稍后可以替换它,并且该函数不需要具有$_SESSION变量。

答案 2 :(得分:1)

PHP全局变量仅存在于全局范围内。要从函数中访问它们,必须将全局范围包含在函数中。请参阅以下链接:

http://php.net/manual/en/language.variables.scope.php

答案 3 :(得分:1)

您的代码中存在多处错误:

  • 如果您将该文件包含session_start()两次,则会产生warning
  • 您正在尝试访问不在函数范围内的变量,从而产生notice
  • 您使用的是短开标签(<?),这是不好的做法。
  • 您没有完全启用错误报告,或者您会看到错误/通知。

那些是真正错误的事情。

现在进行一些改进:

  • 为您的函数提供更好的名称(m()h()作为名称,因为它们不清楚它们在做什么)。你的硬盘上有足够的空间,所以不需要多余的信件。如果在即将到来的日子里你可能不记得它是m还是h,还是z或p,你会感谢你自己。
  • 查看预处理语句和绑定参数,这样您就不必再转义这些值了。
  • 您的config.php似乎与配置内容无关。

一些可帮助您解决这些问题的一般性参考: