2012-02-12 2 views
0

Ajax 호출 및 PHP 스크립트를 사용하여 지리 데이터 (위도 & 경도)를 mySQL 데이터베이스로 보내려고합니다. Ajax와 PHP 스크립트 모두 괜찮아 보이지만 아무것도 데이터베이스로 이동하지 않습니다. 나는 MySQL을 관리하기 위해 다른 구문과 옵션 (예 : 어레이가있는 PDO와 같은)을 시도했지만 아무 것도 ... 당신은 무엇이 잘못 됐는지를 알고 있습니까?Ajax 및 PHP로 MySQL에 데이터 전송

도와 주셔서 대단히 감사합니다. Flo.

내 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.'); 
      } 

      }); 

    }); 
} 

} 

나는 (삽입 -에 - bdd.php) 시도 첫 번째 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 스크립트 I , 같은 이름 (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

기본 디버깅 : PHP의'var_dump ($ _ POST)'에서 무엇을 볼 수 있습니까? –

+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라고 생각한다. 나는이 두 라인을 시도했지만 아무 것도 데이터베이스에 가지 않습니다. – Flo

+0

데이터베이스의 이름을 문자열로 전달했는지 확인하십시오. 예를 들어 놓친 경우 다음과 같이 입력해야합니다. mysql_select_db ('madb', $ db); –

+0

Tx. 나는 ''로 $ select 라인을 수정했고 $ query는 당신이하는 것처럼 작성했다. 빈 팝업 창이 열리지 만 여전히 데이터베이스에 아무 것도 :-( – Flo

1

를 첫 번째 코드 블록에 대한 MySQL의 쿼리에 대해 다음을 수행하십시오

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

또한 데이터베이스에 삽입하기 전에 데이터를 정리하는 것이 중요합니다. 이러한 종류의 코드는 SQL 주입에 열려 있습니다.

변수 주위에서 mysql_real_escape_string 함수를 사용해야합니다. 포스트 변수를 $ 경도와 $ 위도 또는 쿼리 자체에 할당 할 때이 값을 넣을 수 있습니다.

함수를 호출 할 때 mysql 연결이 필요합니다.

+0

안녕하세요,이 첫 번째 블록을 코딩 할 때 "오류 제출 요청"팝업 창이 나타납니다. 쿼리는 다음과 같습니다. mysql_query "INSERT INTO location (lat, lng) VALUES ('". $ latitude. "', '". $ longitude. "')"; – Flo

+0

'요청을 제출하는 중 오류가 발생했습니다'라는 텍스트가 콜백 함수에서 나옵니다. 대신 textStatus를 사용하여 알림을 보내보십시오. 그것은 당신에게 더 많은 통찰력을 줄 수 있습니다. – hgolov

+0

ajax를 통해 호출하기 전에 브라우저에서 스크립트를 직접 테스트하는 것이 좋습니다. – hgolov