Ajax / PHP / MySQL:将数据插入到不使用Ajax和PHP的数据库中

时间:2015-06-21 12:03:49

标签: php mysql ajax insert insert-into

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

我想通过点击按钮在数据库中存储用户电子邮件和所选语言 我的想法是我可以使用Ajax,所以我在我的JS函数文件中放置了下面的Ajax调用,将数据传递给一个单独的Ajax文件(ajax.php),然后将其插入到db(“{{1} }“)。

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

有人可以告诉我这里做错了吗?

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

success

我的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");
        }
    });
});

非常感谢, 麦克

2 个答案:

答案 0 :(得分:1)

你实际上并没有插入任何东西。为此,您需要在构建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();

答案 1 :(得分:1)

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

$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();

警告:

  1. 您不是sanitize您的意见(绝不相信您的意见)

  2. 您应该更喜欢Prepared statements PDO使其更好

  3. 更新:

    由于OP需要了解有关清理输入的更多信息

    有几个步骤或方法可用

    1. 如果您将整数作为输入,则将其设为整数。
    2. $id = $_GET['id'];
      settype($id, 'integer');
      
      1. 使用mysql_real_escape_string()转义查询变量的函数

      2. 使用strip_tags()删除不需要的不需要的HTML

      3. 如果您有embeddedstring,请执行htmlspecialchars

      4. 输入可能是shell命令以破坏所有内容escapeshellcmd