用户登录后,我正在修改我的页面。(更改登录徽标并在其旁边显示欢迎用户名)。 到目前为止,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>';
}
答案 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;