2014-04-10 231 views
1

我打了几天墙壁,似乎无法解决这个简单的问题。通过AJAX插入PHP PDO

我想通过ajax做一个简单的插入。由于我是PHP的新手,我见过很多例子,阅读POST和http和php的东西,阅读te jquery.ajax文档,并且我也知道PDO文档。 仍然无法找到它不工作的原因。

这里去的代码,很简单:

指数

<body> 
    <form id="myForm" method="post" action="" > 
     Nome: 
     <input type="text" name="nome" required /> 
     <br/> 
     Tipo: 
     <input type="text" name="tipo" required /> 
     <br/> 


     <input type="submit" name="submit" value="save" id="sub"/> 


    </form> 

    <script src="script/jquery-2.1.0.js" type="text/javascript"></script> 
    <script src="script/ajaxInclude.js" type="text/javascript"></script> 
</body> 

Ajax调用

$(document).ready(function(){ 
    $('#myForm').submit(function(){ 
     var data = $(this).serialize(); 

     $.ajax({ 
      url: "DAO/insert.php", 
      type: "POST", 
      data: data, 
      success: function(data) 
      { 
       alert(data); 
      }, 
      error: function(){ 
       alert('ERRO'); 
      } 
     }); 

     return false; 
    }); 
}); 

配置:

<?php 

define('HOST', '127.0.0.1'); 
define('DB_NAME','test'); 
define('PORT', '3306'); 
define('USER','root'); 
define('PASS',''); 

$dsn = 'mysql:host='.HOST.'; port='.PORT.'; dbname='.DB_NAME; 

try { 
$bd = new PDO($dsn, USER, PASS); 
// $bd->setAttribute(PDO::ATT_ERRMODE, PDO::ERRMODE_EXCEPTION); 
} catch (PDOException $e) { 
echo 'Houve algum erro no Banco de Dados'; 
} 

?> 

插入:

<?php 
require_once('config.php'); 

if(isset($_POST['submit'])){ 

    $nome = $_POST['nome']; 
    $tipo = $_POST['tipo']; 

    $sql = 'INSERT INTO produto(id, nome, tipo, criado_em) '; 
    $sql .= ' VALUES (NULL, :nome, :tipo, NOW())'; 

    try { 
     $query = $bd->prepare($sql); 
     $query->bindValue(':nome', $nome, PDO::PARAM_STR); 
     $query->bindValue(':tipo', $tipo, PDO::PARAM_STR); 

     if($query->execute()){ 
      echo "Dados inseridos com sucesso"; 
     }else{ 
      echo "Falha na inser��o de dados"; 
     } 

    } catch (Exception $e) { 
     echo $e->getMessage(); 
    } 
} 
?> 

我已经改变了它一百万次,仍然,我甚至不能从插入返回,我只是从ajax的成功获得警报。

对不起,这么简单的问题,但我有一些不好的时间。我试图用我找到的最佳实践来做所有事情,但还没有找到一个可靠的例子。

+0

首先你必须明白,没有像“通过AJAX插入PHP PDO”**这样的东西。它可以是AJAX或PDO。他们从不干涉。因此,首先决定您的问题属于哪个领域 –

+6

您应该在您的Javascript控制台中看到错误。你在Javascript中使用'$ _POST',但这是一个PHP超全球化。它不存在于Javascript/jQuery中。 –

回答

3
var data = $_POST['#myForm'].serialize(); 

也许应该

var data = $(this).serialize(); 

此外,您应该检查所有必需parameteres它们是否设置,提交永远不会被设定,因为您提交输入没有name属性:

if(isset($_POST['nome'], $_POST['tipo'])) { 
    // your stuff here... 
} 

并以这种方式离开“PHP模式”可能会导致空行,你不知道他们来自哪里后:

?> 

<?php 
+0

其实这些PHP是分开的文件,我应该在这里更好地解释它,对不起。 要编辑我的报价 –

+0

同样的单个PHP文件,你通常会忽略结束标记;) – kelunik

+0

无论如何,我已经改变了序列化的行,并从Ajax的成功返回我的整个PHP文件。而且我仍然没有从插入模块返回。 –

2

1日由Kelunik提到你有PHP和JavaScript中混合:

var data = $_POST['#myForm'].serialize(); 

$_POST是一个PHP数组。这应该是:

var data = $(this).serialize(); 

二(和你看到一个空警报的原因),你不要对你的提交按钮的名称属性,所以在PHP中if(isset($_POST['submit']))条件检查失败。 变化:

<input type="submit" value="save" id="sub"/> 

到:

<input type="submit" name="submit" value="save" id="sub"/> 

最后,如果这个PHP文件产生其他输出(如您的意见建议)确保你返回你的性反应后,停止执行:

if(isset($_POST['submit'])){ 

    //your sql code and responces here 
    //then stop script 
    die(); 
} 
+0

实际上,从php文件输出的只是我在查询 - >执行的回声。我应该得到一个“数据插入成功”或“数据库错误”。但我只从ajax获得succes输出,甚至没有任何意义,因为我得到整个php文件 –

+1

@DaniloScanferla所以PHP没有被处理?你有没有尝试在你的服务器上运行一个简单的PHP脚本? – Steve

+0

Yeap,你刚刚杀了它。 对不起n00b错误,但服务器出了问题。我已经改变它,现在它的工作完美:) 非常感谢user574632和@kelunik –