1

我正在尝试创建一个用于更改用户密码的表单。控制台中没有生成错误,但没有更新任何内容。验证方面也在工作,所以它必须归结为 Ajax 部分?

免责声明:我知道我不应该在 PHP 中使用 mysql,但我正在努力了解基础知识,并将在以后学习 mysqli :) 此外,config.php 用于多个其他函数,所以我知道 config。 php没问题。

知道出了什么问题吗?

HTML:

            <fieldset>
                <form method="post" name="password-form" id="form-password">
                <label>Password:</label> <br>
                <input type="password" name="password" id="password" value="" size="32" />
                <br>
                <br>
                <label>Re-Enter Password:</label> <br>
                <input type="password" name="password-check" id="password-check" value="" size="32" />
                <br>
                <br>
                <input type="submit" value="Submit" id="passsubmit">
                </form>
            </fieldset>   

查询:

$(function(){
        $("#passsubmit").click(function(){
        $(".error").hide();
        var hasError = false;
        var newpass = $("#password").val();
        var checkVal = $("#password-check").val();
        if (newpass == '') {
            $("#password").after('<span class="error">Please enter a password.</span>');
            hasError = true;
        } else if (checkVal == '') {
            $("#password-check").after('<span class="error">Please re-enter your password.</span>');
            hasError = true;
        } else if (newpass != checkVal ) {
            $("#password-check").after('<span class="error">Passwords do not match.</span>');
            hasError = true;
        }

        if(hasError == true) {return false;}

        if(hasError == false) {
                $.ajax({
                type: "POST",
                url: "resource/changepassword.php",
                data: {newpass:newpass},
                success: function(){}
                });
        };
    });
});

PHP:

<?php
session_start();
include('config.php');
$user_check=$_SESSION['login_user'];

$newpass=$_POST['newpass'];
$sql_rec = "select UserID from useradmin where username='$user_check' ";
$rs_rec = mysql_query($sql_rec);
$data_rec = mysql_fetch_object($rs_rec);

$userID = $data_rec->UserID; 



$updatesql="UPDATE useradmin SET passcode='$newpass' WHERE UserID=$userID";

mysql_query($updatesql, $bd) or die(mysql_error());


?>

$bd 是来自 config.php 的 MySQL 连接详细信息。

更新:

我已添加<div id="passsubmit2">123</div>到我的页面并将 jquery 更改为:

$(function(){
        $("#passsubmit2").click(function(){

而且它工作得很好,所以只有在使用表单按钮时它才不起作用?

4

4 回答 4

1

由于您通过 Ajax 请求将表单数据发送到服务器,因此您首先不需要提交类型的输入,因为这将尝试在单击时提交表单,并且您必须编写额外的代码来停止默认功能那个提交按钮。所以用简单的html按钮或链接替换那个提交按钮。

于 2013-10-20T19:15:41.090 回答
1

最终想通了。

我需要添加event.preventDefault();以防止触发正常的表单提交。

于 2013-10-20T16:19:35.063 回答
0

确保将所有必需的信息传递data给 PHP 服务器。现在,据我所见,您正在传递一个空变量。

info={
newpass : newpass,
checkVal: checkVal
};

$.ajax({
                type: "POST",
                url: "resource/changepassword.php",
                data: info,
                success: function(response){
                  console.log(response);
                }
      });

在 PHP 方面:

<?php
$newPassword=$_POST['newpass '];

编辑:更进一步,您真的想在会话中存储用户 ID(唯一数字 ID)而不是用户名。使用用户名作为唯一值引用整个 mysql 数据库是一个非常糟糕的主意(相信我,我犯了同样的错误)。

此外,您应该要求用户在更改当前密码时输入他们的旧密码(如果他们将网站留在他们的计算机上怎么办)。

于 2013-10-19T21:07:02.880 回答
0

将 ajax 中的数据更改为

if(hasError == false) {
                $.ajax({
                type: "POST",
                url: "resource/changepassword.php",
                data: {
                    newpass : newpass,
                },
                success: function(){}
                });
  };

因为您没有将数据发送到服务器并且未声明 info 变量

于 2013-10-19T20:55:57.937 回答