【问题标题】:PHP - AJAX - mysql - Unable to insert data into database (works perfect when not using AJAX)PHP - AJAX - mysql - 无法将数据插入数据库(不使用 AJAX 时完美运行)
【发布时间】:2017-05-21 23:10:20
【问题描述】:

我有这个“注册用户”文件,其中有一个表格,我将在这里简化我所拥有的:

 <form action="" method="POST">
    <label for="user" class="control-label">User </label>
    <input type="text" name="user" class="form-control" id="user"  value="" required=""/>
    <label for="user" class="control-label">Password1 </label>
    <input type="text" name="password1" class="form-control" id="password1"  value="" required=""/>
    <label for="user" class="control-label">Password2 </label>
    <input type="text" name="password2" class="form-control" id="password2"  value="" required=""/>
    <button type="button" value="signUp" name="submit" class="btn btn-lg btn-primary btn-block" onClick="register()">Sign up!</button>

如您所见,其中有一个事件,在一个 JS 文件中。这个文件有所有的输入,它工作得很好(我不认为它是相关的,所以我不会发布它)。它还具有对 PHP 文件的 AJAX 调用,将数据插入数据库。

 function register(){

 if(validationRegister()){
        $.ajax({

                url: "http://localhost/myProject/extras/processSignUp.php", 
                type: "POST",
                data: {"user": user,
                       "password": password,
                       "password2": password2,
                       },
                dataType: "html",
                cache: false,
                beforeSend: function() {    
                    console.log("Processing...");
                },
                success: 
                      function(data){
                        if(data == "Registered"){
                           window.location.href = "http://localhost/myProject/index.php";
                        }else{
                           window.location.href = "http://localhost/myProject/signUp.php";
                        }
                    }

    });

}else{
    alert("Incorrect data");
}

}

这是 PHP 文件:

 <?php

    include_once "connection.php"; --> this has all the data for the connection to the database 

    if($_POST['user'] == '' || $_POST['password'] == '' || $_POST['password2'] == ''){ 
        echo 'Fill all the information'; 
    }else{ 

        $sql = 'SELECT * FROM `user`'; 
        $rec = mysqli_query($con, $sql); 
        $verify_user = 0; 

        while($result = mysqli_fetch_object($rec)){ 
            if($result->user == $_POST['user']){ 
                $verify_user = 1; 
            } 
        } 

        if($verify_user == 0){ 
            if($_POST['password'] == $_POST['password2']){ 
                $user = $_POST['user']; 
                $password = $_POST['password'];  
                $sql = "INSERT INTO user (user,password) VALUES ('$user','$password')";
                mysqli_query($con, $sql); 

                echo "Registered"; 
            }else{ 
                echo "Passwords do not match"; 
            } 
        }else{ 
            echo "This user has already been registered"; 
        }
    } 

?>

PHP 代码,单独使用时效果很好(它曾经在表单文件的开头,由 if($_POST['submit']){} 包围)但现在我想在一个单独的文件,并使用 AJAX,但我无法注册用户:/数据的值永远不会“注册”...有什么想法吗?

提前致谢! :)

【问题讨论】:

  • 记录data,这是什么?您对 SQL 注入持开放态度,应该对您的密码进行哈希处理。
  • 看看你的代码 特别是if($_POST['user'] == '' or $_POST['password']){ ?? or $_POST['password']什么
  • @chris85 是的,我知道,但是我正在学习并且刚刚开始这个项目,很快就会添加更多内容。 data 是 AJAX 调用接收的内容。我实际上在处理这个问题时遇到了很多麻烦,并且怀疑大部分问题都在那个部分:/
  • @RiggsFolly 嗨,是的,很抱歉。正如我所提到的,我已将代码编辑到最重要的部分以说明我的问题。在编辑时,我一定已经剪掉了必须存在的部分代码,但我没有意识到。将编辑帖子。
  • 我的意思是它的实际价值是多少 console.log(data); 也许你有一个新行,或者一些空格?

标签: javascript php mysql ajax


【解决方案1】:

请不要在实时环境中运行此代码,您的代码对 SQL 注入开放,您需要对密码进行哈希处理。

这一行:

if($_POST['user'] == '' or $_POST['password']){ 

看起来是你的问题。你想以某种方式测试$_POST['password'],比如$_POST['password'] == ''!isset($_POST['password'])

你的逻辑也很糟糕,你可能想去看看一些教程。例如为什么要获取所有用户只是为了测试是否存在,在 SQL 代码本身中执行该逻辑以避免无缘无故获取整个表。

【讨论】:

  • 嗨,谢谢,但问题毕竟是 url 中缺少文件夹,因此连接变量未定义。另外,我正在与其他人合作,所以部分逻辑实际上不是我的,我正在努力适应它。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 2016-12-08
  • 1970-01-01
  • 2016-12-12
  • 2021-07-20
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多