i know this question is asked many times, but non of them having right solution. i am using ajax to get the response from PHP Page. After getting the response i want to use the value in PHP variable. Below code is getting result but i am confused with the usage of it.
below is my index.php
function getLocation() {
if(navigator.geolocation) {
navigator.geolocation.getCurrentPosition(geoSuccess, geoError);
} else {
alert("Geolocation is not supported by this browser.");
}
}
function geoSuccess(position) {
var glat = position.coords.latitude;
var glng = position.coords.longitude;
//alert("lat:" + glat + " lng:" + glng);
geocoding(glat,glng);
}
function geoError() {
alert("Geocoder failed.");
}
function geocoding(glat,glng){
$.ajax({
type:'POST',
url:'geolocation.php',
data:'latitude='+glat+'&longitude='+glng,
success:function(result){
if(result){
$("#locationg").val(result);
$("#htmllocation").html(result);
}
}
});
}
geolocation.php
<?php
session_start();
if(!empty($_POST['latitude']) && !empty($_POST['longitude'])){
//Send request and receive json data by latitude and longitude
$url = 'http://maps.googleapis.com/maps/api/geocode/json?latlng='.trim($_POST['latitude']).','.trim($_POST['longitude']).'&sensor=false';
$json = @file_get_contents($url);
$data = json_decode($json);
$status = $data->status;
if($status=="OK"){
//Get address from json data
$location = $data->results[0]->formatted_address;
//$location = $data->results[0]->address_components;
for($j=0;$j<count($data->results[0]->address_components);$j++){
$cn=array($data->results[0]->address_components[$j]->types[0]);
if(in_array("locality", $cn))
{
$city= $data->results[0]->address_components[$j]->long_name;
}
}
}else{
echo 'No Location';
}
echo $city;
}
?>
index.php
<?php
$city='<span id="htmllocation"></span>';
?>
when i echo $city
i am getting city name but in inspect elements its showing like
<span id="htmllocation">Visakhapatnam</span>
issue is that i can not use this in MYSQL because it in html format, and i just want to get only the city name nothing else.
i hope my issue is clear, please leave a comment if not clear.
example.com/index.php
, it displays a webpage.index.php
Is that correct? If so, you can't do it. Things not work like that. Webservers uses request-response modells. When your php finishes, the server kills the process, ei. $city
and everything else are destroied. After it, you get the user's location. If you want something from the server again, you must send a new request, because index.php
's process is no longer available. This is impossible to get the city's name before you get it from the client, and you can't get the location from the client at the moment he first requests index.php
, neither you can access an already-non-running process.
All you need to do is run your SQL query inside geolocation.php
. When you get the result from Google, then fetch the data from your database. There $city
doesn't contain any HTML codes, only the plain city name. Then send back some data related to that city to the user, and display it.
I don't have enough reput to comment then I ask here. May you post a dump of geocoding() call ?
edit: try to json encode your php response and use eval(), it's quick and dirty?
initially start session in PHP using
sessionstart()
method. then add this code after above code. First set session using Jquery as below:
$.session.set("yoursessioname", "storevalue");
then try to get this session variable in PHP as below:
$city = $_SESSION['yoursessioname'];
I haven't tried it yet. I Hope it helps. :)
Use PHP in built function strip_tags
to remove HTML tags from your statement to get only City in variable like below:
$city = strip_tags('<span id="htmllocation">Visakhapatnam</span>');
// Output will be Visakhapatnam only