Ajax表单数据达到.done(函数(数据)),但没有发布到数据库的数据

Ajax表单数据达到.done(函数(数据)),但没有发布到数据库的数据

问题描述:

我有一些信息发布到我的数据库的问题。我有其他信息在我的javascript中通过ajax调用发布到我的数据库中,并且它没有问题,但是,我不知道这部分代码出了什么问题。它拒绝发布到数据库。我想发布它,看看有没有人发现我不会阻止它进入数据库的东西。有趣的是,ajax调用正在为我的ajax调用在我的.done function(data)内部进行,但没有任何内容进入我的数据库。Ajax表单数据达到.done(函数(数据)),但没有发布到数据库的数据

下面我发布,我认为这是相关

$('#form-reg').on('submit', function(){ 
 
     // serialize the form 
 
     var formData = $(this).serialize(); 
 
     $.ajax({ 
 
      type  : 'POST', 
 
      url   : 'register.php', 
 
      data  : formData, 
 
      success: function(data){ 
 
      console.log(data), 
 
     }, 
 
     error: function(err){ console.log(err) 
 
     }; 
 
     }) 
 
     .done(function (data) { 
 
      console.log("lo"); 
 
      document.getElementById('form-reg').reset(function(){ 
 
       alert("signed up completed"); 
 
      }); 
 
     }) 
 
     .fail(function (error) { 
 
      alert("POST failed"); 
 
     }); 
 
     return false; 
 
    });
/*mysqli_connect.php -- note this is just an old file name. not important*/ 
 
<?php 
 
$dsn = 'mysql:dbname=test;host=127.0.0.1'; 
 
$user = ''; 
 
$password = ''; 
 

 
try { 
 
    $dbh = new PDO($dsn, $user, $password); 
 
} catch (PDOException $e) { 
 
    echo 'Connection failed: ' . $e->getMessage(); 
 
} 
 
?> 
 

 
/*register.php*/ 
 
<?php 
 
require 'mysqli_connect.php'; 
 
if((isset($_POST['name']) && !empty($_POST['name']))|| 
 
    (isset($_POST['email']) && !empty($_POST['email']))){ 
 

 
    $sth = $dbh->prepare('INSERT INTO test_table (comment) VALUES(?,?);'); 
 
    $name = $_POST['name']; 
 
    $email = $_POST['email']; 
 

 
    $sth->execute(Array($name, $email)); 
 

 
} 
 
else{ 
 
    echo 'error no comment entered'; 
 
} 
 
?>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/3.2.1/jquery.min.js" type="text/javascript"> 
 

 
<div id = "register-container"> 
 
    <form id = "form-reg"> 
 
     <label id ="x" for="name">Name</label> 
 
     <input id="name-reg" name="name"></br> 
 
     <label id = "y" for="email">Email</label> 
 
     <input id="email-reg" name="email"></br> 
 
     <input type="submit" value="submit" id = "submit-reg"> 
 
    </form> 
 
    </div>

所有代码。如果我错过了一些可以随意请求这段代码的东西。

+0

添加成功和错误回调到AJAX选项对象。这样你就会知道发生了什么事。 –

+0

如果你看一看,我的''.done'函数里面有一个回调,回调不起作用。所以不知道是否添加另一个会工作。这是一个单独的问题。我从来没有能够在我的'.done'中触发回调。 – Jengo

+0

$就({ 类型: 'POST', URL: 'register.php', 数据:FORMDATA, 成功:功能(数据){ 的console.log(数据), }, 错误:函数(err){ console.log(err), } }) –

看来问题是:

INSERT INTO test_table (comment) VALUES(?,?); 

为什么会出现一个col“(comment)”,而在VALUES中有两个(?,?)占位符?表“test_table”中有哪些列?我想查询可能是这样的:

INSERT INTO test_table (name, email) VALUES(?,?); 

我认为你的问题在于你的PHP。

$sth = $dbh->prepare('INSERT INTO test_table (comment) VALUES(?,?);'); 
$name = $_POST['name']; 
$email = $_POST['email']; 

您的SQL不知道问号(?)是什么,除非您给他们一个值。请看下面的例子:

$name = $_POST['name']; 
$email = $_POST['email']; 

$sth = $dbh->prepare('INSERT INTO test_table VALUES(?,?);'); 
$sth->bind_param('ss', $name, $email); // you must bind the values you wish to insert 
$sth->execute(); 

更多有关bind_param看看PHP文档: http://php.net/manual/en/mysqli-stmt.bind-param.php

+0

感谢您的快速反应,我给了它一个旋风,但没有运气。我一定会阅读这些文档! – Jengo