php javascript验证并发送当前密码和新密码

php javascript验证并发送当前密码和新密码,javascript,php,return,submit,Javascript,Php,Return,Submit,我正在写一个“更改密码”表单,但我不太擅长javascript,我需要一些帮助:) 这是我目前的职能: function changeformhash(form, currentpwd, password, conf) { // Check each field has a value if (currentpwd.value == '' || password.value == '' || conf.value

我正在写一个“更改密码”表单,但我不太擅长javascript,我需要一些帮助:)

这是我目前的职能:

function changeformhash(form, currentpwd, password, conf) {
    // Check each field has a value
    if (currentpwd.value    == ''   ||
        password.value      == ''   ||
        conf.value          == '') {

        alert('¡Debes proporcionar todos los datos solicitados!');
        form.currentpwd.focus();
        return false;
    }

    // Check that the current password is sufficiently long (min 6 chars)
    // The check is duplicated below, but this is included to give more
    // specific guidance to the user
    if (currentpwd.value.length < 6) {

        alert('Tu contraseña actual debe contener, como mínimo, 6 carácteres. Por favor, intentalo de nuevo.');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

    // At least one number, one lowercase and one uppercase letter
    // At least six characters

    re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}/;
    if (!re.test(currentpwd.value)) {

        alert('Tu contraseña actual debe contener, como mínimo, 1 númnero y 1 letra mayúscula y minúscula. Por favor, intentalo de nuevo.');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

    // Check that the new password does not match with the current password
    // and is sufficiently long (min 6 chars)
    // The check is duplicated below, but this is included to give more
    // specific guidance to the user
    if (password.value == currentpwd.value) {

        alert('¡No puedes usar la misma contraseña!');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

    if (password.value.length < 6) {

        alert('La contraseña debe contener, como mínimo, 6 carácteres. Por favor, intentalo de nuevo.');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

    // At least one number, one lowercase and one uppercase letter
    // At least six characters

    var re = /(?=.*\d)(?=.*[a-z])(?=.*[A-Z]).{6,}/;
    if (!re.test(password.value)) {

        alert('La contraseña debe contener, como mínimo, 1 númnero y 1 letra mayúscula y minúscula. Por favor, intentalo de nuevo.');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

    // Check password and confirmation are the same
    if (password.value != conf.value) {

        alert('¡Las contraseñas no coinciden!');
        currentpwd.value    = "";
        password.value      = "";
        conf.value          = "";
        form.currentpwd.focus();
        return false;
    }

     // Create a new element input, this will be our hashed current password field.
    var currentp = document.createElement("input");

    // Add the new element to our form.
    form.appendChild(p);
    p.name = "currentp";
    p.type = "hidden";
    p.value = hex_sha512(currentpwd.value);

    // Create a new element input, this will be our hashed password field.
    var p = document.createElement("input");

    // Add the new element to our form.
    form.appendChild(p);
    p.name = "p";
    p.type = "hidden";
    p.value = hex_sha512(password.value);

    // Make sure the plaintext password doesn't get sent.
    currentpwd.value    = "";
    password.value      = "";
    conf.value          = "";

    // Finally submit the form.
    form.submit();
    return true;
}
函数changeformhash(表单、currentpwd、密码、conf){
//检查每个字段是否有一个值
如果(当前pwd.value==“”||
password.value==“”||
conf.value==“”){
警觉(‘Debes Proponcionar todos los datos Lanctados!’);
form.currentpwd.focus();
返回false;
}
//检查当前密码是否足够长(最少6个字符)
//下面重复了该检查,但这是为了提供更多信息
//对用户的具体指导
如果(当前pwd.value.length<6){
警觉(“你是一个真正的德比·康莫·米尼莫,6个角色,赞成,新意”);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
//至少一个数字、一个小写字母和一个大写字母
//至少六个字符
re=/(?=.*\d)(?=.[a-z])(?=.[a-z])。{6,}/;
如果(!重新测试(当前PWD值)){
警惕(“反对者是真正的反对者,科莫·米尼莫,1努姆尼罗和1勒特拉·梅奥·斯库拉和米诺·斯库拉。赞成者,新的意愿”);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
//检查新密码是否与当前密码不匹配
//并且足够长(至少6个字符)
//下面重复了该检查,但这是为了提供更多信息
//对用户的具体指导
if(password.value==currentpwd.value){
警觉(‘不,不,不!’);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
if(password.value.length<6){
警惕(“La contraseña debe contener,como mínimo,6个角色。Por favor,intentalo de nuevo.”);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
//至少一个数字、一个小写字母和一个大写字母
//至少六个字符
变量re=/(?=.*\d)(?=.[a-z])(?=.[a-z])。{6,}/;
如果(!重新测试(密码值)){
警惕(“反对者,科莫·米尼莫,1努姆尼罗,1勒特拉·梅奥·斯库拉和米诺·斯库拉,赞成者,新政府内部”);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
//检查密码和确认是否相同
if(password.value!=conf.value){
警觉(‘Las contraseñas no concurren!’);
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
form.currentpwd.focus();
返回false;
}
//创建一个新元素输入,这将是我们散列的当前密码字段。
var currentp=document.createElement(“输入”);
//将新元素添加到表单中。
表3.儿童(p);
p、 name=“currentp”;
p、 type=“隐藏”;
p、 值=十六进制(当前pwd.value);
//创建一个新元素输入,这将是我们的哈希密码字段。
var p=document.createElement(“输入”);
//将新元素添加到表单中。
表3.儿童(p);
p、 name=“p”;
p、 type=“隐藏”;
p、 value=hex_sha512(password.value);
//确保未发送明文密码。
currentpwd.value=“”;
password.value=“”;
conf.value=“”;
//最后提交表格。
表单提交();
返回true;
}
但是首先,为了用户的安全和舒适,我想问一个问题:如果没有任何安全问题,如果新密码的检查失败,我可以让当前密码字段保持填充状态吗?我知道,从第一手资料来看,一遍又一遍地写密码是因为一些打字错误。。。可能真的很烦人:)

我还想,除了检查相同的密码,检查相似的密码,同时检查新的和当前的密码,我怎么做

实际上,如果所有检查都通过了,什么也没有发生,css悬停样式将冻结:

这就是我在firefox控制台中得到的:TypeError:Node.appendChild的参数1不是对象

我实际上使用的是input type=“button”,因为即使javascript返回false,submit也会发送,所以。。。如果返回false,我如何使用input type=“submit”并防止发送


提前谢谢

要回答有关检查类似密码的问题,您必须提到如何在数据库中存储旧密码?它是如何加密和持久化的?…对于您关于安全性的问题,我个人认为这不应该是一个问题,只要它在同一页上,并且您没有通过不安全的连接传输数据。要回答最后一个问题,可以使用提交按钮执行此任务。您需要在submit事件上创建一个处理程序,并且可以在最后返回false,这样表单就不会被提交。谷歌搜索您的最后一个问题,或者您可以参考-。。。。。。另外,我个人更喜欢使用jQuery或javascript来完成所有这些任务,但这只是我个人的选择。另外,您是否考虑过使用感谢您的回答,我将立即对此进行研究,我希望尽快完成这项工作。我已经修复了新元素输入,令人尴尬的错误:P Hmmm输入type=“hidden”的作用是什么?如果自动激活输入“按钮”,这就是我要找的,比如提交(你可以按回车键而不是点击)。密码是用hex_sha512和salt存储的。