2014-04-10 135 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 –