我是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");
}
});
});
非常感谢, 麦克
答案 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();
警告:
您不是sanitize您的意见(绝不相信您的意见)
您应该更喜欢Prepared statements PDO使其更好
更新:
由于OP需要了解有关清理输入的更多信息
有几个步骤或方法可用
$id = $_GET['id']; settype($id, 'integer');
使用mysql_real_escape_string()转义查询变量的函数
使用strip_tags()删除不需要的不需要的HTML
如果您有embeddedstring,请执行htmlspecialchars
输入可能是shell命令以破坏所有内容escapeshellcmd