【问题标题】:ajax request issue when sending post request to db mysql向 db mysql 发送 post 请求时出现 ajax 请求问题
【发布时间】:2014-06-05 13:36:19
【问题描述】:

我对 ajax 请求和数据库的读/写有问题。

我有这个代码可以将表单提交到数据库:

$(document).ready(function(){
    $('#myForm').on('submit',function(e) {
        $.ajax({
            url:'save.php',
        type:'POST',

        });
        e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"===
    });
});

我将 save.php 文件与这段代码放在同一文件夹中:

<?php
include('dbconnection.php');

$Name= $_POST['Name'];
$surname= $_POST['surname'];
$Value= $_POST['Value'];

$sql = "INSERT INTO `results`(`Name`, `surname`, `Value`) VALUES('$Name', '$surname','$Value')";

$retval = mysql_query( $sql );

if(! $retval )
{
  die('Could not enter data: ' . mysql_error());
}   
?>

唯一的问题是这些值没有保存在数据库中。 我做错了什么?

【问题讨论】:

  • 首先,您没有在 AJAX 调用中发布表单数据。
  • 危险:您使用的是an obsolete database API,应该使用modern replacement。您也容易受到SQL injection attacks的影响,现代 API 可以让您更轻松地从 defend 中获得。
  • 在执行 sql 插入之前,通过添加 &lt;?php echo "&lt;pre /&gt;"; print_r($_POST); ?&gt; 检查是否所有已发布到 php 的变量,这将在您的 ajax 脚本警报中打印出所有已发布的变量。

标签: php jquery mysql sql ajax


【解决方案1】:

首先你应该知道Mysql php 扩展已被弃用,你可以考虑改用mysqliPDO

要解决您的问题,您应该使用 Ajax 调用发送数据。例如:

$(document).ready(function(){
    $('#myForm').on('submit',function(e) {
        $.ajax({
            url:'save.php',
        type:'POST',
        data: {'Name':'John', 'surname': 'Jonny', 'Value':'foo'}
        });
        e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"===
    });
});

要查看它是否有效,您可以使用以下命令调试您的 PHP:

var_dump($_POST);

【讨论】:

    【解决方案2】:

    您需要序列化表单数据并将其发送到数据库 -

    $(document).ready(function(){
        // var myData = $('#myForm').serialize();
        $('#myForm').on('submit',function(e) {
            $.ajax({
                url:'save.php',
                type:'POST',
                data: $(this).serialize()
            });
            e.preventDefault(); //=== To Avoid Page Refresh and Fire the Event "Click"===
        });
    });
    

    您还应该开始使用mysqli_ 或PDO 来处理您的数据库,因为mysql_ 函数已被弃用。更重要的是,您应该始终验证和清理您的数据 - 否则您要求进行 SQL 注入攻击。

    【讨论】:

    • 执行操作时,您需要打开浏览器的控制台并观察请求/响应周期,看看是否有任何错误。
    • 使用chrome控制台,请求后所有的var都是空的,没有发现错误
    • 我对代码进行了更改,请尝试一下,让我知道您的控制台中发生了什么。
    • 和以前一样,但我在控制台中没有看到任何输出请求
    • 它在这个小提琴中完美运行 - jsfiddle.net/jayblanchard/k9D9G 查看控制台中的网络选项卡。注意:我在序列化函数之后删除了一个错误的分号。
    猜你喜欢
    • 2019-08-08
    • 1970-01-01
    • 1970-01-01
    • 2021-07-30
    • 2021-12-21
    • 2019-10-15
    • 1970-01-01
    • 1970-01-01
    • 2022-08-03
    相关资源
    最近更新 更多