我在javascript中使用会话标志来表示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文件头部的会话:
<?php @session_start();
$_SESSION['flag']=0;
?>
请在小提琴中查看:http://jsfiddle.net/9mm5ougu/
配置-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");
}
?>
答案 0 :(得分:3)
您无法将PHP
代码放入JavaScript
文件,因为PHP
在服务器端解释,而JavaScript
在客户端解释(至少在你的用例中)。
如果你真的必须根据PHP $_SESSION
值进行条件处理,你有多种选择(从最差到最好列出一个恕我直言):
将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
文件
创建两个不同的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>
此解决方案优于第一个解决方案,因为它几乎解决了所有问题:文件缓存在客户端上,您不需要混合PHP
和JavaScript
代码。但这不是您可以拥有的最佳解决方案,因为它会带来大量代码重复,并且维护代码库会更加困难。
您可以将数据模型传递到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
班级名称。
答案 1 :(得分:1)
答案 2 :(得分:1)
使用AJAX从服务器获取所需的数据。
例如,创建get-data.php:
<?php @session_start();
_SESSION['flag'] = 0;
json_encode(_SESSION['flag']);
?>
从ajax调用它:
$(document).ready(function(){ // your DOM loaded
$.ajax({
url: '/get-data.php',
success: function(response){
$("#bag").click(function(){
if(JSON.parse(response) == 0){
$("#login").show();
$("#notlogin").hide();
} else {
$("#login").hide();
$("#notlogin").show();
}
});
},
error: function(){
alert('data not loaded');
},
complete: function(){
}
})
})