javascript - JS 在 PHP 中不起作用(document.getElementById)
问题描述
我正在为我的网络开发项目做一个非常菜鸟密码注册的事情,我被困在这里
<script>
<?php
if ( isset($_POST['enter']) ){
if ($_POST['password']=='0000'){
echo('document.getElementById("adminsection").style.display = "block";
document.getElementById("passsection").style.display = "none" ;');
}
else{
echo ("alert('password incorrect');");
}
}
?>
</script>
由于某种原因,当满足条件时,这部分似乎不起作用:
echo('document.getElementById("adminsection").style.display = "block";
document.getElementById("passsection").style.display = "none" ;');
adminsection 和 passsection 只是包含页面元素的部分标签,它们看起来有点像这样
<form style="width:100%; margin:10% 0 10% 0" action="administrator123.php" method="POST">
<section id="passsection">
<input style="margin-left:-5px" id="passfield" name="password" type="password" placeholder="****">
<input type="submit" id="password" name="enter" value="enter">
</section>
<section id="adminsection">
<p>hey</p>
</section>
</form>
此代码背后的目标是隐藏密码部分并在输入正确密码时显示管理部分如果您为我提供不涉及 jQuery 的解决方案,我将不胜感激
解决方案
您以错误的方式混合了 javascript 和 PHP。
普通表单提交。操作顺序为:
- 您在 html 中有一个表单(您缺少表单元素)
- 用户提交表单
- 这会将提交发送到服务器,导致页面加载/重新加载
- 服务器端 PHP 检查密码是否正确
- 新加载的页面会处理 PHP 输出。
<?php
if ( isset($_POST['enter']) ){
if ($_POST['password']=='0000'){
$loggedin = true;
} else {
$error="Password was incorrect";
}
}
?>
<?php if (!$loggedin) {?>
<section id="passsection">
<?php if ($error) {?>
<div class='error'>
<?php echo $error;?> </div>
<?}?>
<form method='post'>
<input style="margin-left:-5px" id="passfield" name="password" type="password" placeholder="****">
<input type="submit" id="password" name="enter" value="enter">
</form>
</section>
<?}?>
Ajax 表单提交。操作顺序为:
- 您在 html 中有一个表单(您缺少表单元素)
- 用户提交表单
- javascript防止表单重新加载页面,并通过ajax将表单数据发送到服务器
- 服务器端 PHP 检查密码是否正确并以 json_encode() 格式输出响应
- ajax 函数获取响应并使用该数据提供反馈。
您的 php 将位于一个单独的文件中
doLogin.php
<?php
$loggedin = false;
if ( isset($_POST['enter']) ){
if ($_POST['password']=='0000'){
$loggedin = true;
} else {
$error="Password was incorrect";
}
}
$response = array('isLoggedIn' => $loggedin);
if ($error) $response['error'] = $error;
echo json_encode($response);
?>
document.querySelector('#passsection form').addEventListener('submit', function(e) {
e.preventDefault(); // stop the page from reloading
var request = new XMLHttpRequest();
let url = "/php/doLogin.php";
request.open("POST", url, true);
request.setRequestHeader("Content-Type", "application/json");
request.onreadystatechange = function() {
if (request.readyState === 4 && request.status === 200) {
var jsonData = JSON.parse(request.response);
if (jsonData.isLoggedIn) {
document.querySelector('#passsection').style.display = "none"
} else if (jsonData.error) {
document.querySelector('#passsection form .error').innerHTML = jsonData.error
}
}
};
let data = JSON.stringify({
"passfield": document.getElementById("passfield").value
});
request.send(data);
});
<section id="passsection">
<div class='error'></div>
<form method='post'>
<input style="margin-left:-5px" id="passfield" name="password" type="password" placeholder="****">
<input type="submit" id="password" name="enter" value="enter">
</form>
</section>
推荐阅读
- django - Google App Engine 在文件上传中的响应时间很慢
- woocommerce - 将自定义费用添加到结帐时的 woocommerce 订阅经常性总额
- .net - 如何验证传递给模拟方法的特定方法
- java - JDBC Type Scroll Insensitive and Sensitive
- python - How I can divide a newline and two newline in regular expression?
- excel-formula - How to create summary from raw data
- python - 逐行输出随机数
- javascript - Find property then replace all its values - lodash
- java - java.lang.NoSuchMethodError:org.apache.hadoop.hive.metastore.HiveMetaStoreClient.alter_table
- c# - 所有剃刀视图都添加了对不存在的“WebApplication1”的引用