使用 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 发送数据的主要内容,如果未能解决你的问题,请参考以下文章
PHP 脚本如何向 Dojo 的 xhrGet 发送 JSON Ajax 响应?
通过 jQuery ajax() 向 PHP 发送多个复选框数据
ajax 向 php 发送请求而没有响应(每次都设置为 false)