-1

含まれている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

4 に答える 4

5

ベストプラクティスに従ってこれを実行する場合は、グローバル変数を使用するよりも次の方が適しています。

    function checklogin($user,$points)
    {
        if(isset($_SESSION['username'])){
            echo $user . ' Points: ' . $points;
        }
    }
于 2012-10-27T23:06:52.670 に答える
1

これらの変数はグローバルであるため、関数に含まれているとは期待できません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変数を含める必要がないように、例で渡します。

于 2012-10-27T23:03:05.343 に答える
1

PHPグローバル変数は、グローバルスコープにのみ存在します。関数内からそれらにアクセスするには、グローバルスコープを関数に取り込む必要があります。次のリンクを参照してください。

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

于 2012-10-27T23:03:23.043 に答える
1

コードには複数の問題があります。

  • そのファイルを含めると、session_start()2回あるため、警告が表示されます。
  • 関数のスコープにない変数にアクセスしようとしているため、通知が表示されます。
  • 短いオープンタグ(<?)を使用していますが、これは悪い習慣です。
  • エラーレポートが完全に有効になっていないか、エラー/通知が表示されます。

それらは本当に間違っていることです。

今、いくつかの一般的な改善のために:

  • あなたの関数にもっと良い名前を付けてください(m()そしてh()彼らが何をしているのかはっきりしないので、名前として吸ってください)。ハードディスクに十分なスペースがあるので、文字を惜しまないでください。来たる日にそれがmかhかzかpか覚えていないかもしれないなら、あなたはそれをあなた自身に感謝するでしょう。
  • プリペアドステートメントとバインドされたパラメーターを調べて、値をエスケープする必要がないようにします。
  • あなたconfig.phpは設定のものに関連していないようです。

これらの問題を修正するのに役立ついくつかの一般的なリファレンス:

于 2012-10-27T23:18:24.070 に答える