【问题标题】:How can I pass data from jQuery to php for saving into a database?如何将数据从 jQuery 传递到 php 以保存到数据库中?
【发布时间】:2012-05-14 13:34:22
【问题描述】:

我已经阅读了有关 jQuery.ajax 方法的信息,并相信这应该是我所需要的——但到目前为止还不能让它工作。

我用一个名为“users”的表创建了一个测试 mysql 数据库,在该表中添加了“name”和“location”的行,然后确保我可以使用命令行将数据保存到它,我可以。然后我制作了一个带有按钮的测试页面,并将这个副本添加到我的脚本文件中($.ajax 部分直接来自 jQuery api 示例):

$('#button').click(function(){
    saveData();
});

function saveData(){  
$.ajax({
       type: "POST",
   url: "process.php",
   data: { name: "John", location: "Boston" }
    }).done(function( msg ) {
 alert( "Data was saved: " + msg );
    });
}

我确实收到了一条警告消息,“数据已保存”,但实际上并没有将任何内容保存到我的数据库中。我一定是对 process.php 做错了,但不确定是什么。这是 process.php 中的代码(我为数据库、db_host、用户等设置了变量,我没有在这里显示):

// 1. Create a connection to the server. 
$connection = mysql_connect($db_host, $db_user,$db_pwd);

// make sure a connection has been made
if (!$connection){
die("Database connection failed: " . mysql.error());
}

// 2. Select the database on the server
$db_select = mysql_select_db($database, $connection);
if (!$db_select){
die("Database selection failed: " . mysql.error());
}

// START FORM PROCESSING
if (isset($_POST['submit'])) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}

【问题讨论】:

  • 正确缩进很重要...

标签: php jquery mysql


【解决方案1】:

其他人已经告诉过使用“成功”和“错误”这确实是捕获成功/错误回调的更好方法。但这并不是为什么没有插入任何内容的问题。除此之外,您的 Ajax 调用看起来还不错。

我看到的另一个问题是您只传递了以下参数:

data: { name: "John", location: "Boston" }

但在您的 PHP 代码中,您确实会检查是否设置了提交按钮:

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

显然情况并非如此,因为发送的唯一内容是您在 Ajax 调用的“数据”属性中传递的内容。而是使用:

if ( $_SERVER['REQUEST_METHOD'] == 'POST' )

【讨论】:

  • 成功了,谢谢!我没有意识到这是怎么回事: if (isset($_POST['submit']))
  • @adamKiryk 那么至少接受这个作为答案也许是个好主意? :-)
【解决方案2】:

在这个例子中,$_POST['submit'] 没有被设置,因为你没有像往常一样发送表单,你是用 ajax 重新发送数据并且没有任何名为“submit”的变量。

这可能会更好:

if ((isset($_POST['name'])) && (isset($_POST['location']))) { // Form has been submitted.
    $name = trim(mysql_prep($_POST['name']));
$location = trim(mysql_prep($_POST['location']));

// INSERT THE DATA 
$query = "INSERT INTO user ( name, location )
              VALUES ( '{$name}','{$location}' )";
        // Confirm if the query is successful.
        $result = mysql_query($query, $connection);
}

【讨论】:

    【解决方案3】:

    “完成”并不意味着“成功”。而不是 done:,使用它来查看它是否成功完成:

    success: function(data)
        {
           alert(data);
        },
    error:function (xhr, ajaxOptions, thrownError){
            alert("Error Status: " + xhr.status + " Thrown Errors: "+thrownError);
        }
    

    【讨论】:

      【解决方案4】:

      所有这些

      .done(function( msg ) {
           alert( "Data was saved: " + msg );
      });
      

      告诉你ajax请求已经完成。您可能需要查看.success。此外,您的代码没有显示这一点,所以我假设它没有这样做,但为了让 msg 在您的 php 中有任何东西需要实际返回一些东西。 (PHP 人们帮我解决这个问题,我是 .Net 帮我解决 JS 的人 :))

      【讨论】:

        【解决方案5】:

        由于您不是通过传统表单提交,而是使用 ajax,我怀疑提交不是帖子的一部分。通过将以下 else 子句添加到您的代码中来检查这一点。如果您正在点击该 die 语句,则删除 if 测试

        if (isset($_POST['submit'])) { // Form has been submitted.
            $name = trim(mysql_prep($_POST['name']));
        $location = trim(mysql_prep($_POST['location']));
        
        // INSERT THE DATA 
        $query = "INSERT INTO user ( name, location )
                      VALUES ( '{$name}','{$location}' )";
                // Confirm if the query is successful.
                $result = mysql_query($query, $connection);
        } else {
          die("$_POST['submit'] didn't exist");
        }
        

        【讨论】:

          【解决方案6】:

          这是一个简单的错误。您在更新数据库之前检查它的存在时,在发布到 process.php 时离开了 submit

          $('#button').click(function(){
              saveData();
          });
          
          function saveData(){  
          $.ajax({
                 type: "POST",
             url: "process.php",
             data: { name: "John", location: "Boston",submit:"submit" }
              }).done(function( msg ) {
           alert( "Data was saved: " + msg );
              });
          }
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2021-12-17
            • 2018-02-17
            • 2020-02-23
            • 2011-10-26
            • 1970-01-01
            相关资源
            最近更新 更多