我在按下提交按钮时尝试加密密码。
我不明白为什么密码输入的值没有改变,ecryption正确完成。
<script>
function cript(){
var pass = CryptoJS.SHA1("<?php echo $_POST["password"]; ?>");
var passString = pass.toString();
console.log(passString);
document.getElementById('inputPassword').value = passString;
}
</script>
并在HTML表单上:
<input type="submit" class="btn btn-primary" value="Proceed" onclick="cript()">
有谁能告诉我解决方案?
答案 0 :(得分:6)
JavaScript在浏览器中执行。 PHP在服务器上执行。您编写的代码无法正常工作,因为它会尝试在浏览器中执行它们。
"<?php echo $_POST["password"]; ?>"
,而在服务器上构建页面。此时,密码可能不存在于服务器上,因此javascript中的值很可能是空白的。
"<?php echo $_POST["password"]; ?>"
变为""
当javascript在浏览器中加载时,它实际上是var pass = CryptoJS.SHA1("");
。您可以使用调试器(如firebug)或使用ZED等代理进行验证,也可以通过在浏览器中查看页面源来验证。执行此操作时,它不会进行任何哈希处理,因此不会在密码字段中存储任何内容。
发布时,密码字段为空,因为#2。您的服务器什么都没有,所以您的密码不会改变。
顺便说一下,
答案 1 :(得分:1)
调用cript
之前的表单帖子。
在表单的cript
事件中调用onsubmit
函数:
<form onsubmit="cript()">
答案 2 :(得分:1)
您的PHP代码无法在点击时执行。它只能在加载文件时由服务器执行,因为您正在等待用户输入密码然后调用它不起作用的功能。
您的javascript var pass为空,因为您此时没有POST。
可行的流程是: 执行PHP - &gt;提供html + javascript - &gt;用户输入 - &gt;地穴 - &gt;提交
因此,在这种情况下,您不能依赖PHP为您提供数据。你需要在这里采用不同的方法。
尝试
<script>
function cript(){
var pass = CryptoJS.SHA1(document.getElementById('inputPassword').value);
var passString = pass.toString();
console.log(passString);
document.getElementById('inputPassword').value = passString;
}
</script>
这只会解决与尝试传递PHP相关的问题 变量到javascript变量。有关SHA1的安全问题是 另一个话题,如果这是学校项目或摆弄 学习javascript然后就可以了。这个例子用于学习目的如何 使用javascript访问元素中的值是可以的。但是,如果这样 代码将被放在服务器上并被使用,然后SHA1应该 绝对要避免