Geolocation + Ajax + PHP - what am I doing wrong?

Asked

Viewed 769 times

6

<body>
    <script type='text/javascript'>
        var lati = '';
        var long = '';
        var cidade = '';
        var estado = '';
        var pais = '';
        var dadosajax = '';

        navigator.geolocation.getCurrentPosition(function (posicao) {
            var url = "http://nominatim.openstreetmap.org/reverse?lat=" + posicao.coords.latitude + "&lon=" + posicao.coords.longitude + "&format=json&json_callback=preencherDados";

            var script = document.createElement('script');
            script.src = url;
            document.body.appendChild(script);
            lati = posicao.coords.latitude;
            long = posicao.coords.longitude;

        });

        function preencherDados(dados) {
            cidade = dados.address.city;
            estado = dados.address.state;
            pais = dados.address.country;



            alert('cordenadas:' + lati + ',' + long + '    Lugar:' + cidade + ',' + estado + ',' + pais);
            dadosajax = cidade;

            alert(dadosajax);


            $.ajax({
                type: "POST",
                url: "teste6.php",
                data: {cidade: cidade}

            });

        }
        ;

    </script>
</body>

filing cabinet teste6.php:

<?php
require_once './php/conn_db.php';

    $cidade = $_POST['cidade'];
    $sql = "INSERT INTO arq011 (codigo,cidade) VALUES (null, :cidade)";
    $stmt = Conexao::getInstance()->prepare($sql);
    $stmt->bindParam(':cidade', $cidade, PDO::PARAM_STR);
    $executa = $stmt->execute();

?>

not saving... what I’m doing wrong?

  • How far have you checked if the data is being passed? Does ajax send something? The $_POST has values? , etc...

  • Sergio, I couldn’t pass data to the test file6.php. Until the Alert(dadosajax) instruction I got results, but nothing within $.ajax({

  • The url url: "teste6.php", Is that correct? There won’t be a sub-folder?

  • "teste6.php" is in the same folder.

  • What gives echo var_dump($cidade);?

  • nothing. It seems that it doesn’t even 'call' teste6.php

  • What says the "network" tab of the Browser tools?

  • Uncaught Referenceerror: $ is not defined

  • Knuckle <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script> in the <head> page...

  • Sergio, the error no longer appears in the console-network. However, it is still not saved in the bd. Ajax is not 'calling' teste6.php :(

Show 5 more comments

2 answers

0

The match, that’s all:

//$("#localizacao").submit(function (e) {
//    e.preventDefault();
//    alert(dadosajax);
    $.ajax({
        type: "POST",
        url: "teste6.php",
        data: dadosajax
    });
//});

-1

I found why I wasn’t sending data.

Follow the full code and working.

<html>
<head>
<script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.3/jquery.min.js"></script>
    <title>Geolocation</title>
    <meta name="viewport" content="initial-scale=1.0, user-scalable=no">
    <meta charset="utf-8">
    <style>
        html, body {
            height: 100%;
            margin: 0;
            padding: 0;
        }
        #map {
            height: 100%;
        }
    </style>
</head>
<body>
    <form id="localizacao" >

        <input id="cidade" value="">
        <input id="estado" value="">
        <input id="pais" value="">

        <button   type="submit" class="btn btn-default ">Salvar</button>
    </form>

    <script type='text/javascript'>

        var lati = '';
        var long = '';
        var cidade = '';
        var estado = '';
        var pais = '';
        var dadosajax = '';

        navigator.geolocation.getCurrentPosition(function (posicao) {
            var url = "http://nominatim.openstreetmap.org/reverse?lat=" + posicao.coords.latitude + "&lon=" + posicao.coords.longitude + "&format=json&json_callback=preencherDados";

            var script = document.createElement('script');
            script.src = url;
            document.body.appendChild(script);
            lati = posicao.coords.latitude;
            long = posicao.coords.longitude;

        });

        function preencherDados(dados) {
            cidade = dados.address.city;
            estado = dados.address.state;
            pais = dados.address.country;



            alert('cordenadas:' + lati + ',' + long + '    Lugar:' + cidade + ',' + estado + ',' + pais);


            document.getElementById('cidade').value = cidade;
            document.getElementById('estado').value = estado;
            document.getElementById('pais').value = pais;


            dadosajax = {'cidade':cidade, 'estado':estado, 'pais':pais};

            $("#localizacao").submit(function (e) {
                e.preventDefault();
                alert(dadosajax);
                $.ajax({
                    type: "POST",
                    url: "teste6.php",
                    data: dadosajax

                });
            });




        }
        ;



      </script>
    </body>
</html>

File teste6.php

<?php
require_once './php/conn_db.php';

    $cidade = $_POST['cidade'];
    $estado = $_POST['estado'];
    $pais = $_POST['pais'];
        $sql = "INSERT INTO arq011 (codigo,cidade, estado, pais) VALUES (null, :cidade, :estado, :pais)";
    $stmt = Conexao::getInstance()->prepare($sql);
    $stmt->bindParam(':cidade', $cidade, PDO::PARAM_STR);
    $stmt->bindParam(':estado', $estado, PDO::PARAM_STR);
    $stmt->bindParam(':pais', $pais, PDO::PARAM_STR);    
    $executa = $stmt->execute();


?>

Now how can I save city, state and parents WITHOUT having to click the SAVE button? (meaning that when detecting geolocation, automatically save to the database!)

Browser other questions tagged

You are not signed in. Login or sign up in order to post.