2

多くの人がJavascriptコード内でのPHPコードの使用は悪い習慣だと考えているので、特定のPHP変数に特定の値がある場合にjavascript関数を実行する方法を考えます。

これは私が現在コードを書く方法です:

<script type="text/javascript">
function execute_this() {
some code;
}
<?php
if(!empty($_SESSION['authorized'])) :
?>
execute_this();
<?php
endif;
?>
</script>

この特定の例でJavascript内でPHPを使用しないようにする方法はありますか?

4

5 に答える 5

2

javascriptコード内にPHPコードを含めたくないが、php変数の値を知りたい場合は、サーバー側(PHP)とクライアント(JS)の間の通信を統合する必要があります。

たとえば、ajaxリクエストを使用して、応答に値を提供する小さなphpスニペットを呼び出すことができます。その値を使用すると、Javaスクリプトコードを続行できます。

私の意見では、努力する価値があるかどうかを判断する必要があります。

編集:

編集された質問に関して:PHPセッション値が存在しない場合にJS関数が呼び出されないことが重要な場合は、PHPコードを使用しますが、そのようにします。

<?php
if(!empty($_SESSION['authorized'])) :
?>
<script type="text/javascript">
function execute_this() {
some code;
}

execute_this();
</script>
<?php
endif;
?>

javascriptでセッション変数の値を評価する場合、提供された値が操作された場合にコードに問題が発生しないことを確認する必要があります。

于 2013-02-13T09:14:25.893 に答える
1

php変数をhtmlコードのどこかに保存してから、それにアクセスする必要があります。例えば:

<input type="hidden" id="hidval" value=<?php echo $_SESSION['authorized'] ?>/>

それからあなたのjsで:

var somevar=document.getElementById(hidval).value;
if(somevar==what you want){
  execute_this();
}
于 2013-02-13T09:15:28.443 に答える
1

それはコードスタイルの問題です。プロジェクトが成長するにつれて、プロジェクトを維持したり、機能を拡張したりすることがますます困難になります。より良い解決策は、ファイルの先頭で必要なすべての変数を初期化し、主要なJavaScript機能を外部化することです。

PHPの例:

<script type="text/javascript">
    MYCONFIG = {
        authorized: '<?php echo $_SESSION['authorized']; ?>',
        foo: 'something else'
    }
    $(document).trigger('init'); // fire init event, you can call it as you like
</script>

jQueryを使用したJSの例(カスタムトリガー「init」を使用していることに注意してください。好きなように呼び出すことができます):

$(document).on('init', function() {

    function execute_this() {
        document.write(MYCONFIG.foo);
    }

    if(MYCONFIG.authorized) {
        execute_this();
    }

})

これは外部JSファイルにある必要があり、PHPタグは必要ありません。

于 2013-02-13T09:21:50.373 に答える
1

あなたにはいくつかの基本的な設計上の問題があると思います、そして私たちは氷山の一角を見ているだけで、あなたを完全に助けることはできません。

この方法でphp関数を呼び出すことには本質的に問題はありませんが、いくつかの問題があります。

1)jsファイルを分離してキャッシュまたはcdnを許可することはできません

2)MVCは確かに「必須」ではありませんが、このタイプのロジックを「ビュー」(レンダリングされた出力)から分離することをお勧めします。

3)他の場所に大規模なセキュリティホールがあると思われます-セッションで「承認」されているかどうかに基づいて特定のパラメータを設定している場合、これは、アクセス許可の決定の基礎となる情報を送り返す可能性が高いことを意味しますどこかにphpコード。ページからこれを行わないでください。ページを制御できないため、すべてのデータはページ自体で「ニュートラル」である必要があります。

私がそれを言う理由がはっきりしない場合は、これを読んでください:http: //www.codebyjeff.com/blog/2012/12/web-form-security-avoiding-common-mistakes

于 2013-02-13T09:30:55.183 に答える
0

それを行うには3つの方法があります。

  1. 非表示フィールドを使用し、各フィールド内に必要な変数値を追加して、jQueryを使用してそれらを取得します。
  2. ユーザーjQueryセッションプラグインとphpセッション変数にアクセスします。
  3. phpにajax呼び出しを行い、json形式で応答を取得して応答にアクセスします。
于 2013-02-13T09:21:11.023 に答える