Ajax/PHP/MySQL:在数据库中插入数据时不使用Ajax和PHP

Ajax/PHP/MySQL:在数据库中插入数据时不使用Ajax和PHP,php,mysql,ajax,insert,insert-into,Php,Mysql,Ajax,Insert,Insert Into,我是PHP和MySQL新手,正在寻求以下方面的帮助 我想在单击按钮时将用户电子邮件和所选语言存储在db中 我的想法是我可以使用Ajax来实现这一点,所以我在JS函数文件中加入下面的Ajax调用,将数据传递到一个单独的Ajax文件(Ajax.php),然后将其插入数据库(“用户”) 当我提醒JS中的值时,它们显示正确,因此我的输入变量正常,并且Ajax调用在传递数据后返回“success”,但是我无法让它在我的db中插入任何内容 当我在数据库中手动运行相同的INSERT时,它工作得很好 有人能告诉

我是PHP和MySQL新手,正在寻求以下方面的帮助

我想在单击按钮时将用户电子邮件和所选语言存储在db中
我的想法是我可以使用Ajax来实现这一点,所以我在JS函数文件中加入下面的Ajax调用,将数据传递到一个单独的Ajax文件(
Ajax.php
),然后将其插入数据库(“
用户
”)

当我提醒JS中的值时,它们显示正确,因此我的输入变量正常,并且Ajax调用在传递数据后返回“
success
”,但是我无法让它在我的db中插入任何内容
当我在数据库中手动运行相同的INSERT时,它工作得很好

有人能告诉我我做错了什么吗

我的Ajax调用(在我的函数文件中):

$('#btnID').on('click', function(){
    var email = $.trim( $('#email').val() ).toLowerCase();
    var lang = $.trim( $('#lang').val() );

    $.ajax({
        url: "ajax.php",
        type: "post",
        cache: "false",
        data: {
            email: email,
            lang: lang
        },
        success: function(data) {
            console.log(data);
            alert("success");
        },
        error: function(){
            alert("failure");
        }
    });
});
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')";
$conn->close();
我的PHP(在我的ajax.PHP文件中):

$('#btnID').on('click', function(){
    var email = $.trim( $('#email').val() ).toLowerCase();
    var lang = $.trim( $('#lang').val() );

    $.ajax({
        url: "ajax.php",
        type: "post",
        cache: "false",
        data: {
            email: email,
            lang: lang
        },
        success: function(data) {
            console.log(data);
            alert("success");
        },
        error: function(){
            alert("failure");
        }
    });
});
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')";
$conn->close();
多谢各位,
Mike

您实际上没有插入任何内容。为此,您需要在构建sql之后调用
$conn->query($sql)

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" .      $lang . "')";
$conn->query($sql); //check the return value here and do what you want
$conn->close();

您只是准备查询,而不是触发它

$conn->query($sql)
所以,你应该有

$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')";
if ($conn->query($sql)) 
{ 
echo 'success'; 
} 
else 
{ 
echo 'failure'; 
}
$conn->close();
警告:

$('#btnID').on('click', function(){
    var email = $.trim( $('#email').val() ).toLowerCase();
    var lang = $.trim( $('#lang').val() );

    $.ajax({
        url: "ajax.php",
        type: "post",
        cache: "false",
        data: {
            email: email,
            lang: lang
        },
        success: function(data) {
            console.log(data);
            alert("success");
        },
        error: function(){
            alert("failure");
        }
    });
});
$conn = new mysqli($servername, $username, $password, $dbname);
$conn->set_charset("utf8");
if($conn->connect_error){
    die("Connection failed: " . $conn->connect_error);
}
$email = $_POST["email"];
$lang = $_POST["lang"]; 
$sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')";
$conn->close();
  • 你不是你的投入(永远不要相信你的投入)

  • 你宁愿把它做得更好

  • 更新:

    $('#btnID').on('click', function(){
        var email = $.trim( $('#email').val() ).toLowerCase();
        var lang = $.trim( $('#lang').val() );
    
        $.ajax({
            url: "ajax.php",
            type: "post",
            cache: "false",
            data: {
                email: email,
                lang: lang
            },
            success: function(data) {
                console.log(data);
                alert("success");
            },
            error: function(){
                alert("failure");
            }
        });
    });
    
    $conn = new mysqli($servername, $username, $password, $dbname);
    $conn->set_charset("utf8");
    if($conn->connect_error){
        die("Connection failed: " . $conn->connect_error);
    }
    $email = $_POST["email"];
    $lang = $_POST["lang"]; 
    $sql = "INSERT INTO Users (email, lang) VALUES ('" . $email . "', '" . $lang . "')";
    $conn->close();
    
    因为OP需要了解更多关于清理输入的信息

    有几个步骤或方法可用

  • 如果将整数作为输入,则将其设置为整数
  • 用于查询变量的转义函数

  • 用于删除不需要的html

  • 如果你有嵌入字符串,那么就做

  • 输入可能是SHELL命令,用于突发所有事件


  • 也谢谢你!不客气。。这意味着消毒。你可以这样做,等等,当然。。。更新我的答案:)没关系,您可以执行
    echo$sql
    并将其放入phpmyadmin中,看看会发生什么?让我们一起来看看。正如聊天中所讨论的,his现在正在使用您的更新解决方案-非常感谢!