javascript - 如何在 php echo 中从表单调用 javascript 函数?
问题描述
下面的代码所做的是确保用户不允许提交评论,除非他使用 $_SESSION['login_user'] 超变量登录。但这给了我一个错误。我认为问题是因为我在 onsumbit="return(checkUser())" 中调用了一个 javascript 函数。那里有问题,但我不知道为什么。
我有以下代码:
<script type="text/javascript">
// notice the quotes around the ?php tag
function checkUser() {
<?php
if(isset($_SESSION['login_user'])){
$isExist = true;
}
?>
else{
$isExist= false;
alert( "Please register first!" );
}
var htmlString="<?php echo $isExist; ?>";
return isExist;
}
</script>
...
...
<?php
echo "<form method='POST' onsubmit="return(checkUser());" action='".setComments($connection, $res['post_id'])."'>
//echo "<form method='POST' action='".setComments($connection, $res['post_id'])."'>
<input type='hidden' name='uid' value='".$_SESSION['login_user']."'>
<input type='hidden' name='date' value='".date('Y-m-d H:i:s')."'>
<textarea name='message'> </textarea><br>
<button type='submit' name='commentSubmit'>Comment</button>
</form>";
getComments($connection, $res['post_id']);
?>
....
如果这不是阻止用户提交评论的正确方法,那么另一种方法可能是什么?
解决方案
除了@RonaldT 所说的,你需要了解 PHP 代码在发送到浏览器之前是在服务器上执行的。所以检查$_SESSION['login_user']
Javascript 函数内部有点傻,因为在用户刷新页面之前它总是相同的(只有这样 PHP 才会重新检查该值)。
所以你的功能可以像这样简化:
<script type="text/javascript">
// on page load, define a global variable using PHP
var isLoggedIn = <?php echo isset($_SESSION['login_user']) ? "true" : "false"; ?>;
function checkUser() {
// check that global variable every time checkUser() is called in Javascript
if (!isLoggedIn) {
alert( "Please register first!" );
}
return isLoggedIn;
}
</script>
请记住,这种“安全性”非常容易被愚弄(任何用户都可以打开他们的浏览器控制台,输入isLoggedIn = true;
并瞧瞧),因此请务必在提交表单时检查服务器。
或者更好的是:如果不允许用户做某事,就不要给他们机会。如果无论如何都不允许用户提交表单,为什么还要显示表单呢?
<?php
if (!isset($_SESSION['login_user'])) {
echo "Please register to add a comment";
} else {
echo "<form [...everything else...] /form>";
}
getComments($connection, $res['post_id']);
?>
推荐阅读
- .net - 如何从 JSON 转换的 .NET 列表中获取元素
? - javascript - 在 webpack 中使用 mini-css-extract-plugin 时通过帮助“require”在页面上注入样式
- c++ - 如何防止引用返回的私有结构发生突变
- c++ - ( [ ]( ){ 输出;}); 意思是?
- arabic - 如何
在阿拉伯语从左到右 (LTR) 文本中插入标签 - telegram - 如何在电报即时视图中从 html 中的 data-lazy-src 中提取图像 url
- javascript - Firefox 32 位不会触发 ondevicechange 事件
- r - 如何将数据框变量名称移动到第一行并将新变量名称添加到列表中的多个数据框?
- wpf - 如何在下拉列表中加载组合框项目
- python - 全局函数代码在 Python 中不起作用