Ajax / PHP / MySQL:将数据插入到数据库中但无法使用 Ajax 和 PHP
Ajax / PHP / MySQL: Inserting data into db not working with Ajax and PHP
我是 PHP 和 MySQL 的新手,正在寻求以下方面的帮助。
我想在单击按钮时将用户电子邮件和所选语言存储在数据库中。
我的想法是我可以为此使用 Ajax 所以我将下面的 Ajax 调用放在我的 JS 函数文件中以将数据传递到单独的 Ajax 文件(ajax.php
)然后将其插入数据库(“Users
”)。
当我提醒 JS 中的值时,它们显示正确,因此我的输入变量正常,而且 Ajax 在传递数据后调用 returns“success
”,但 我无法在我的数据库中插入任何内容。
当我 运行 在数据库中手动插入相同的 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");
}
});
});
我的 PHP(在我的 ajax.php 文件中):
$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();
非常感谢,
麦克
你实际上并没有插入任何东西。为此,您需要在构建 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();
警告:
你不是sanitize你的输入(永远不要相信你的输入)
你应该更喜欢Prepared statements PDO让它变得更好
更新:
因为 OP 需要了解更多关于清理输入的信息
有几个步骤或方法可用
- 如果您将整数作为输入,则将其设为整数。
$id = $_GET['id'];
settype($id, 'integer');
使用mysql_real_escape_string()作为查询变量的转义函数
使用strip_tags()去掉不需要的html
如果你有嵌入字符串,那么做htmlspecialchars
输入可能是 shellcommand 爆裂一切escapeshellcmd
我是 PHP 和 MySQL 的新手,正在寻求以下方面的帮助。
我想在单击按钮时将用户电子邮件和所选语言存储在数据库中。
我的想法是我可以为此使用 Ajax 所以我将下面的 Ajax 调用放在我的 JS 函数文件中以将数据传递到单独的 Ajax 文件(ajax.php
)然后将其插入数据库(“Users
”)。
当我提醒 JS 中的值时,它们显示正确,因此我的输入变量正常,而且 Ajax 在传递数据后调用 returns“success
”,但 我无法在我的数据库中插入任何内容。
当我 运行 在数据库中手动插入相同的 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");
}
});
});
我的 PHP(在我的 ajax.php 文件中):
$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();
非常感谢, 麦克
你实际上并没有插入任何东西。为此,您需要在构建 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();
警告:
你不是sanitize你的输入(永远不要相信你的输入)
你应该更喜欢Prepared statements PDO让它变得更好
更新:
因为 OP 需要了解更多关于清理输入的信息
有几个步骤或方法可用
- 如果您将整数作为输入,则将其设为整数。
$id = $_GET['id']; settype($id, 'integer');
使用mysql_real_escape_string()作为查询变量的转义函数
使用strip_tags()去掉不需要的html
如果你有嵌入字符串,那么做htmlspecialchars
输入可能是 shellcommand 爆裂一切escapeshellcmd