2015-06-21 173 views
1

我新的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(); 

提前许多感谢, 麦克

回答

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,使其更好地

更新:

由于OP需要知道更多有关清理输入

有几个步骤或方法可用

  1. 如果你所得到的整数作为输入,然后让它为整数。
$id = $_GET['id']; 
settype($id, 'integer'); 
  • 使用mysql_real_escape_string()用于查询变量脱出功能

  • 使用strip_tags()以除去不想要的不想要的HTML

  • 如果你有嵌入字符串,然后做htmlspecialchars

  • 输入可能shellcommand爆一切escapeshellcmd

  • +0

    非常感谢。这很好用!你能解释清楚你的意思吗? – keewee279

    +1

    不客气,意味着消毒。你可以通过[转义](http://de1.php.net/manual/en/mysqli.real-escape-string.php),[过滤](http://php.net/manual/en/ function.filter-var.php)等, –

    +0

    谢谢 - 我以为$ .trim就够了?我刚开始编程,你能给我举一些例子或典型的方法吗?我在提交时单独验证电子邮件输入(只是没有在这里添加)。 – keewee279

    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(); 
    
    +0

    感谢这个的! – keewee279

    相关问题