【问题标题】:Inserting data in mysql using Ajax and PHP not working使用 Ajax 和 PHP 在 mysql 中插入数据不起作用
【发布时间】:2022-11-25 13:26:27
【问题描述】:

我尝试使用 ajax 和 PHP 创建一个 DB 注册,但结果不是我想要的。它总是返回 201 状态代码。

这是我的代码

    <script>    
        $(document).ready(function() {
        $('#butregister').on('click', function() {
        $("#butregister").attr("disabled", "disabled");
        var fullname = $('#fullname').val();
        var username = $('#username').val();
        var password = $('#password').val();
        var mobilenumber = $('#mobilenumber').val();
        if(fullname!="" && username!="" && mobilenumber!="" && password !=""){
                    $.ajax({
                        url: "includes/save",
                        datatype: "JSON",
                        type: "POST",
                        data: {
                            type: 1,
                            fullname: fullname,
                            username: username,
                            password: password,
                            mobilenumber: mobilenumber
                        },
                        cache: false,
                        success: function(dataResult){
                            var dataResult = JSON.parse(dataResult);
                            if(dataResult.statusCode==200){
                                $("#butregister").removeAttr("disabled");
                                $('#register_form').find('input:text').val('');
                                $("#success").show();
                                $('#success').html('Registration successful !');                        
                            }
                            else if(dataResult.statusCode==201){
                                $("#error").show();
                                $('#error').html('Username already exists !');
                            }
                            
                        }
                    });
                }
                else{
                    alert('Please fill all the field !');
                }
                
            });
        });
    </script>

这是我创建的 php 代码

<?php
    include 'connect.php';
    session_start();
    if($_POST['type']==1){
        $fullname=$_POST['fullname'];
        $username=$_POST['username'];
        $password=$_POST['password'];
        $mobilenumber=$_POST['mobilenumber'];
        
        $md5password=md5($password);
        
        $datetime = new DateTime();
        $timezone = new DateTimeZone('Asia/Manila');
        $datetime->setTimezone($timezone);
        
        $dateregistered = $datetime->format('m/d/Y g:i A');
        
        $duplicate=mysqli_query($conn,"select * from userlists where username='$username'");
        if (mysqli_num_rows($duplicate)<0)
        {
            $sql = "INSERT INTO `userlists`( `realname`, `contactnumber`, `username`, `md5password`, `dateregistered`)
            VALUES ('$fullname','$mobilenumber','$username','$md5password','$dateregistered')";
            if (mysqli_query($conn, $sql)) {
                echo json_encode(array("statusCode"=>200));
            } 
        }
        else{
                echo json_encode(array("statusCode"=>201));
            }
        mysqli_close($conn);
    }

现在,在我运行它之后,结果总是 statusCode=>201

有什么我可以做的吗?谢谢

【问题讨论】:

  • 来自 PHP 的 md5 手册:“警告 由于此散列算法的快速特性,不建议使用此功能来保护密码。有关详细信息和最佳实践,请参阅Password Hashing FAQ" PHP 有 password_hashpassword_verify
  • mysqli_num_rows() 可以小于 0 吗?
  • @brombeer 出现错误我相信mysqli_num_rows 可以返回-1
  • 您的代码很容易受到 SQL 注入攻击并且不安全。您需要努力确保 AJAX 发送的数据是干净的,并且 MySQL 使用 Prepared Statements。
  • mysqli_num_rows 更好的是在你的 SQL 查询本身中使用 SELECT COUNT(*),这会给你一个更可靠的结果;即你总是会得到一个结果。

标签: php mysql ajax


【解决方案1】:

仅当从该选择查询返回的行数为 -1 或更少时,您的插入查询才会运行。我相信这永远不会发生。将其更改为:

if (mysqli_num_rows($duplicate)<=0)
    {

【讨论】:

  • 如果mysqli_num_rows 不会返回小于零的值,为什么要检查它?
【解决方案2】:

改变你的 if 条件。

if (mysqli_num_rows($duplicate) > 0) {

【讨论】:

  • 请在您的答案中添加一些解释,以便其他人可以从中学习。通过将其更改为您建议的行,如果在数据库中找到用户名,将触发 INSERT 查询。我怀疑这是否符合要求
猜你喜欢
  • 1970-01-01
  • 2014-11-26
  • 2016-12-12
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2017-12-07
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多