gpt4 book ai didi

php - session 标志在 Javascript 中不起作用

转载 作者:行者123 更新时间:2023-12-01 02:54:59 24 4
gpt4 key购买 nike

我在 javascript 中使用 session 标志作为 IF 函数。如果 session 标志为 1,则 JavaScript 将在单击时显示特定的 div。我已经手动尝试过,但代码似乎不起作用。

这是我的 JS 代码:

$(document).ready(function(){
check = <?= $_SESSION['flag'] ?>;
$("#bag").click(function(){
if(check==0){
$("#login").show();
$("#notlogin").hide();
} else {
$("#login").hide();
$("#notlogin").show();
}
});
});

这是 html 文件头部的 session :

<?php @session_start();
$_SESSION['flag']=0;
?>

请在 fiddle 中查看:http://jsfiddle.net/9mm5ougu/

config-haslogin.php

<?php
error_reporting(E_ALL ^ E_NOTICE);
ini_set("display_errors", 1);
mysql_connect("mysql.com","name","password") or die("cannot connect");
mysql_select_db("databasename") or die("Fail here");
$myemail= $_POST['myemail'];
$mypassword= $_POST['mypassword'];
$sql= "SELECT * FROM user WHERE myemail='".$myemail."' and mypassword='".$mypassword."'";
$result=mysql_query($sql);
$count=mysql_num_rows($result);
if($count==1)
{
echo "Login successful";
$_SESSION['flag']=0;
header("Location:index.php");
}
?>

最佳答案

你不能输入PHP代码写入 JavaScript文件,因为 PHP在服务器端解释,而 JavaScript在客户端进行解释(至少在您的用例中)。

如果确实要基于PHP做条件处理$_SESSION值,您有多种选择(从最差到最好一个恕我直言):

解决方案1:使用动态JavaScript文件(最差)

PHP代码在你的 JavaScript文件,但使用 .php扩展名而不是 .js 。你的 JavaScript 代码看起来像这样:

file.js.php

$("#bag").click(function(){
<?php if ($_SESSION['flag'] === 0): ?>
$("#login").show();
$("#notlogin").hide();
<?php else: ?>
$("#login").hide();
$("#notlogin").show();
<?php endif; ?>
});

您可以包含此 PHP文件为 JavaScript文件:

index.php

<script src="file.js.php"></script>

这是最糟糕的解决方案:- 当您混合使用两种语言时,您的文件很快就会变得不可读- 因为文件现在是动态的,所以用户的浏览器无法将其放入客户端缓存中- 您正在不必要地使用 PHP 服务器的资源- 您无法将文件部署在 CDN 或专用于提供静态文件的简单服务器上- 你无法缩小你的JavaScript文件

解决方案 2:使用两个不同的 JavaScript 文件

创建两个不同的JavaScript文件,一个用于登录用户,一个用于注销用户。使用 $_SESSION 加载正确的文件值。

loggedOut.js

$("#bag").click(function(){
$("#login").hide();
$("#notlogin").show();
});

loggedIn.js

$("#bag").click(function(){
$("#login").show();
$("#notlogin").hide();
});

index.php

<body>
<!-- page content here -->


<?php if ($_SESSION['flag'] === 0): ?>
<script src="loggedIn.js"></script>
<?php else: ?>
<script src="loggedOut.js"></script>
<?php endif; ?>

</body>

这个解决方案比第一个解决方案更好,因为它解决了几乎所有问题:文件缓存在客户端上,并且您不会混合 PHPJavaScript代码。但这并不是最好的解决方案,因为它会带来大量代码重复,并且代码库的维护会更加困难。

解决方案 3:将模型引入客户端(或某种程度)

您可以将数据模型传递给JavaScript文件,然后直接从那里使用它。例如,您可以在<body>上有一个类名。依赖于 $_SESSION['flag'] 的标签值,以及您的JavaScript文件的行为将根据该值而有所不同。这是一个例子:

index.php

<?php
$className = $_SESSION['flag'] ? 'logged-in' : 'logged-out';
?>

<body class="<?php echo $className; ?>">
<!-- page content here -->

<script src="yourFile.js"></script>
</body>

yourFile.js

$(document).ready(function(){

var isLoggedIn = $('body').hasClass('logged-in');

$("#bag").click(function() {
if (isLoggedIn)
{
$("#login").show();
$("#notlogin").hide();
}
else
{
$("#login").hide();
$("#notlogin").show();
}
});

});

如果该类仅由JavaScript使用代码(这意味着这个类不会在CSS代码中使用),你应该在它的前面加上这个js-将其与真实的 CSS 区分开来类名。

关于php - session 标志在 Javascript 中不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25602610/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com