【问题标题】:Insert PHP PDO via AJAX通过 AJAX 插入 PHP PDO
【发布时间】:2014-04-10 12:58:23
【问题描述】:

我已经碰壁好几天了,似乎无法解决这个简单的问题。

我想通过 ajax 进行简单的插入。由于我是 PHP 新手,我看过很多示例,阅读了 http 和 php 的 POST 内容,阅读了 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 的成功中获得警报。

很抱歉,这个简单的问题,但我有一些不好的时间。我正在尝试使用我发现的最佳实践来做所有事情,但还没有找到一个可靠的例子。

【问题讨论】:

  • 首先您必须了解没有像“通过 AJAX 插入 PHP PDO”这样的东西。它是 AJAX 或 PDO。他们从不干涉。所以,首先决定你的问题属于哪个领域
  • 您应该在 Javascript 控制台中看到一个错误。您在 Javascript 中使用 $_POST,但这是一个 PHP 超全局。它在 Javascript/jQuery 中不存在。

标签: php jquery mysql ajax


【解决方案1】:
var data = $_POST['#myForm'].serialize();

应该是

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

此外,如果设置了所有必需的参数,您应该检查它们,提交将永远不会设置,因为您的提交输入没有name 属性:

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

以这种方式离开“php模式”可能会导致空白行,您以后不知道它们来自哪里:

?>

<?php

【讨论】:

  • 其实这些php是分开的文件,我应该在这里解释得更好,对不起。要编辑我的报价
  • 对于单个 PHP 文件也是如此,您通常会省略结束标记 ;)
  • 无论如何,我已经更改了序列化行,并且来自 ajax 的成功正在返回我的整个 php 文件。而且我仍然没有从插入模块中得到任何回报。
  • @DaniloScanferla 可能你也忘了更改 php 文件中的 if
  • 我已经编辑了我的代码。我正在评估 if(isset($_POST['submit'])),我已经命名了我的 Button,如下面的@user574632 所述。不是也好用吗?
【解决方案2】:

第一,正如 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 文件产生其他输出(如您的 cmets 建议的那样),请确保您在返回响应后停止执行:

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

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

【讨论】:

  • 其实php文件的输出只是我在query->execute上的回声。我应该得到一个“数据插入成功”或“数据库错误”。但是我只从 ajax 获得了成功的输出,即使这样也没有意义,因为我得到了整个 php 文件
  • @DaniloScanferla 所以 php 没有被处理?你试过在你的服务器上运行一个简单的 php 脚本吗?
  • 是的,你刚刚杀了它。很抱歉出现 n00b 错误,但服务器出了点问题。我已经对其进行了更改,现在它运行良好:) 非常感谢 user574632 和 @kelunik
猜你喜欢
  • 2014-12-14
  • 2014-10-15
  • 2016-06-02
  • 1970-01-01
  • 2014-08-13
  • 2012-11-04
  • 2017-04-12
  • 2017-12-24
  • 2015-02-28
相关资源
最近更新 更多