2012-02-12 2 views
0

Я хочу отправить географические данные (широта & долготы) в базу данных mySQL с помощью вызова Ajax и скрипта PHP. Оба сценария Ajax и PHP выглядят нормально для меня, но ничего не происходит в базе данных. Я пробовал различный синтаксис и параметр (например, PDO с массивом) для управления MySQL, но все равно ничего ... У вас есть представление о том, что происходит не так?Отправка данных в MySQL с помощью Ajax и PHP

Большое спасибо за вашу помощь, Flo.

Jquery код моей страницы Html прост:

 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 скрипт Стараюсь (вставка-в-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 и массива), то же имя: вставка-в-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()); 
} 
?> 
+0

Базовая отладка: что вы видите в 'var_dump ($ _ POST)' в PHP? –

+0

'mysql_query()' не принимает входные параметры, такие как ': latitude'. –

+0

Умм, почему заголовок? Также первый код не будет работать, второй выглядит нормально –

ответ

1

Я хотел бы сделать:

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

Вы, кажется, забыли соединение с mysql_query(), и я не уверен, об использовании: широта и т.д.

+0

Я думаю, что соединение из mysql_query() составляет $ bdd в коде. Я попробовал свои 2 строки, как это, но ничего не происходит в базе данных. – Flo

+0

Убедитесь, что вы передаете имя базы данных в виде строки, в вашем примере вы пропустили 's, это должно быть: mysql_select_db (' madb ', $ db); –

+0

Tx. Я изменяю строку $ select с помощью 's s и запрашиваю $ query, как вы это делали. Пустые всплывающие окна открываются, но все равно ничего в базе данных :-( – Flo

1

Для первого блока кода выполните следующие действия для запроса MySQL:

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

Кроме того, очень важно очистить данные перед вставкой в ​​базу данных - этот вид кода оставляет вас открытым для SQL-инъекции.

Вы должны использовать функцию mysql_real_escape_string вокруг ваших переменных. Вы можете ввести его, когда вы назначаете переменные post в $ longitude и $ latitude, или в самом запросе.

При вызове функции вам необходимо подключиться к mysql.

+0

Здравствуйте, когда я кодирую первый блок с этим, он дает мне всплывающие окна с «запросом на отправку ошибок». Запрос: mysql_query "INSERT INTO location (lat, lng) VALUES ('". $ Широта. "', '". $ Longitude. "')"; – Flo

+0

Текст «запрос на отправку ошибки» поступает из вашей функции обратного вызова. Попробуйте сделать предупреждение с помощью textStatus. Это может дать вам больше понимания. – hgolov

+0

Всегда полезно проверить скрипт непосредственно из браузера, прежде чем называть его через ajax. – hgolov

Смежные вопросы