的Ajax/PHP/MySQL的:将数据插入到数据库不使用Ajax和PHP
我新的PHP和MySQL,我期待与下面的帮助工作。的Ajax/PHP/MySQL的:将数据插入到数据库不使用Ajax和PHP
我想存储一个用户的电子邮件和选定的语言在数据库上按钮点击。
我的想法是,我可以使用Ajax这个,所以我把下面的Ajax调用在我的JS文件的功能将数据传递到一个单独的Ajax文件(ajax.php
),然后将其插入到数据库(“Users
”)。
当我提醒在JS的价值观,他们显示正确的,所以我的输入变量都OK,也是Ajax调用返回“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();
提前许多感谢, 麦克
你只是准备查询并不会触发它
$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
你实际上并没有插入任何内容。为此,您需要在构建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();
感谢这个的! – keewee279
非常感谢。这很好用!你能解释清楚你的意思吗? – keewee279
不客气,意味着消毒。你可以通过[转义](http://de1.php.net/manual/en/mysqli.real-escape-string.php),[过滤](http://php.net/manual/en/ function.filter-var.php)等, –
谢谢 - 我以为$ .trim就够了?我刚开始编程,你能给我举一些例子或典型的方法吗?我在提交时单独验证电子邮件输入(只是没有在这里添加)。 – keewee279