使用 Ajax 和 PHP 向 MySQL 发送数据

Posted

技术标签:

【中文标题】使用 Ajax 和 PHP 向 MySQL 发送数据【英文标题】:Sending data to MySQL with Ajax and PHP 【发布时间】:2012-03-04 08:04:21 【问题描述】:

我想通过 Ajax 调用和 php 脚本将地理数据(纬度和经度)发送到 mysql 数据库。 Ajax 和 PHP 脚本对我来说看起来都不错,但没有任何东西进入数据库。我尝试了不同的语法和选项(例如带有数组的 PDO)来管理 MySQL,但仍然没有...您知道出了什么问题吗?

非常感谢您的帮助, 弗洛。

我的 html 页面的 Jquery 代码很简单:

        function getCoordPosition()

        if(navigator.geolocation)
        navigator.geolocation.getCurrentPosition(function(position)
        var latitude = position.coords.latitude;
        var longitude = position.coords.longitude;
        $.ajaxSetup(
           url: "insert-in-bdd.php",
           type: "POST",
        );

        $.ajax(
            data: 'latitude='+latitude+'&longitude='+longitude,       
            success: function (msg) 
            alert (msg);,
            error: function (XMLHttpRequest, textStatus, errorThrown)
               
            alert('Error submitting request.'); 
            

            ); 

    );



我尝试的第一个 PHP 脚本 (insert-in-bdd.php) 是:

<?php
header('Content-type: text/html; charset=ISO-8859-1');
try

if(isset($_POST['latitude']) && isset($_POST['longitude']))
$latitude = ($_POST['latitude']);
$longitude = ($_POST['longitude']);
$db = mysql_connect(localhost, root, "");
$select = mysql_select_db(madb, $db);
mysql_query('INSERT INTO location (lat,lng)
           VALUES (:longitude, :longitude)');

 catch(Exception $e)

    echo 'Erreur : '.$e->getMessage().'<br />';
    echo 'N° : '.$e->getCode();

?> 

我尝试的第二个 PHP 脚本(使用 PDO 和数组),同名:insert-in-bdd.php 是:

<?php
 header('Content-type: text/html; charset=ISO-8859-1');
try

if(isset($_POST['latitude']) && isset($_POST['longitude']))
$pdo_options[PDO::ATTR_ERRMODE] = PDO::ERRMODE_EXCEPTION;
 $bdd = new PDO('mysql:host=localhost;dbname=madb', 'root', '');
$req = $bdd->prepare('INSERT INTO location(lat, lng) VALUES(:lat, :lng)');
//$req = $bdd->prepare('UPDATE location SET lat = :lat');
$req->execute(array(
'lat' => $_POST['latitude'],
'lng' => $_POST['longitude']
));

catch (Exception $e)

    die('Erreur : ' . $e->getMessage());

?> 

【问题讨论】:

基本调试:您在 PHP 中的 var_dump($_POST) 中看到了什么? mysql_query() 不接受:latitude 等输入参数。 呃,为什么是标题?第一个代码也不起作用,第二个看起来还可以 另外,在 PDO 中,输入参数键必须与 SQL 中声明的键匹配。如果我记得,这意味着他们需要:lat 中的::lng 而不是execute() 调用中的lat, lng @Michael 我相信两种方式都可以接受; PDO 手册页中有一条评论证实了这一点,IIRC 【参考方案1】:

我愿意:

$query="insert into location (lat,long) values('".$_POST['latitude']."','".$_POST['longitude']."');";
mysql_query($query,$connection);

您似乎忘记了 mysql_query() 的连接,我不确定是否使用 :latitude 等。

【讨论】:

我认为来自 mysql_query() 的连接在代码中是 $bdd 。我已经尝试过像这样的 2 行,但没有任何内容进入数据库。 确保您将数据库的名称作为字符串传递,在您的示例中,您错过了应该是的 ':mysql_select_db('madb',$db); 德克萨斯州。我已经用 ''s 修改了 $select 行,并像你一样编写了 $query 。一个空白的弹出窗口打开但仍然没有进入数据库:-( 找到显示 $query 的方法,在页面顶部回显它是最简单的方法,然后您可以检查查询是否有效 MYSQL,如果是,则问题可能与您的表/数据库。【参考方案2】:

对于您的第一个代码块,请尝试以下 mysql 查询:

"INSERT INTO location (lat,lng)  VALUES ('" . $latitude . "', '" . $longitude . "')"

此外,在插入数据库之前清理数据非常重要——这种代码让您容易受到 sql 注入的影响。

您应该在变量周围使用函数 mysql_real_escape_string。您可以在将 post 变量分配给 $longitude 和 $latitude 时将其放入,也可以在查询本身中放入。

调用函数时需要有一个可用的mysql连接。

【讨论】:

你好,当我用这个编码第一个块时,它会给我一个带有“错误提交请求”的弹出窗口。查询是:mysql_query "INSERT INTO location (lat,lng) VALUES ('" . $latitude . "', '" . $longitude . "')"; 文本“错误提交请求”来自您的回调函数。尝试使用 textStatus 发出警报。这可能会给你更多的洞察力。 在通过 ajax 调用之前直接从浏览器测试脚本也是明智的。

以上是关于使用 Ajax 和 PHP 向 MySQL 发送数据的主要内容,如果未能解决你的问题,请参考以下文章

使用 Ajax、PHP、MYSQL 更新表单

PHP 脚本如何向 Dojo 的 xhrGet 发送 JSON Ajax 响应?

通过 jQuery ajax() 向 PHP 发送多个复选框数据

ajax 向 php 发送请求而没有响应(每次都设置为 false)

这是正确使用 ajax 和 php - mysql - javascript 吗?

使用 AJAX + jQuery + PHP 将数据发送到 MySQL