PHP变量与JavaScript回显

时间:2019-04-11 04:38:38

标签: javascript php html

用户登录后,我正在修改我的页面。(更改登录徽标并在其旁边显示欢迎用户名)。 到目前为止,img swapworks仍然有效,但是我似乎无法在脚本中添加$ userId来显示会话用户名,如果我删除了$ userId,那么欢迎部分也可以使用。这很奇怪,因为当我使用PHP和HTML进行操作时,它很容易工作。

<?php 
if (isset($_SESSION['logged_in'])) { 
    $userId = $_SESSION['username'];

    echo '<script>  
        var img = document.getElementById("imgSwap");
        img.src = "images/lockClosed.png"; 
        </script>';

    echo '<script>
        var userId = '."$userId".';
        var text = document.getElementById("loggedInMsg");
        text.innerHTML = "Welcome Back, + userId"; 
        </script>';        
}

3 个答案:

答案 0 :(得分:2)

如果$userId是字符串,则需要在JS中用双引号引起来。

这应该有效:

<?php 
if (isset($_SESSION['logged_in'])) { 
    $username = $_SESSION['username'];

    // Let's end the PHP block and output our JS
    ?>

    <script>  
        var img = document.getElementById("imgSwap");
        img.src = "images/lockClosed.png"; 

        var username = '<?= $username ?>';
        var text = document.getElementById("loggedInMsg");
        text.innerHTML = "Welcome Back, " + username; 
    </script>;        

    <?php
    // Now when we're done with the JS, open the PHP block again
}

我认为,结束PHP块而不是使用PHP回显HTML和JS更加容易,因为这样您就可以正确地突出显示语法,而不必担心转义引号等问题。

(我还将变量$userId更改为$username,因为它是我们要输出的用户名,而不是id)

那么,实际的问题是什么?

您有几个问题:

第一期

'var userId = '."$userId".';`

由于$userId是带有用户名的字符串,因此不会被引号引起,并导致:var userId = foo;而不是var userId = 'foo';

您需要像这样报价:

'var userId = "' . $userId . '";`

如您所见,现在"在JS字符串中,而不是在PHP变量中。

第二个问题

`'text.innerHTML = "Welcome Back, + userId";` 

这是您不是在串联字符串,而是从字面上输出"Welcome Back, + userId";。对于要串联的字符串,您需要 end 第一个字符串:

`'text.innerHTML = "Welcome Back, " + userId;` 

答案 1 :(得分:0)

可能是引号问题。您可以在回显值时尝试使用引号

<?php if(isset($_SESSION['logged_in'])){ 
        $userId = $_SESSION['username'];
        echo '<script>  
            var img = document.getElementById("imgSwap");
            img.src = "images/lockClosed.png"; 
            </script>';
        echo '<script>
            var userId = "'.$userId.'";
            var text = document.getElementById("loggedInMsg");
            text.innerHTML = "Welcome Back, + userId"; 
            </script>';        
}

答案 2 :(得分:0)

如果要在javascript中将变量连接为字符串,则必须将其与字符串分开,因为  +只是另一个ASCI字符,如果用引号引起来并且没有串联:text.innerHTML = "Welcome Back, + userId";应该是text.innerHTML = "Welcome Back, "+ userId;