Jump to content
  • Revista PROGRAMAR: Já está disponível a edição #60 da revista programar. Faz já o download aqui!

rs_pt

Insert na BD ao mudar localizaçao GPS

Recommended Posts

rs_pt

É o seguinte, a ideia é ao mudar a localização, a app enviar as coordenadas para uma base de dados.

estou a passar corretamente a lat e longitude para uma variavel string (usei um toast para testar), o ficheiro php parece-me estar correto, o problema estará mesmo no código utilizado para enviar a coordenada para a base de dados. O codigo é:

APP

    @Override
    public void onLocationchanged(final Location location) {
	    String link = "survteste.atwebpages.com/insertDB.php";

	    String latitude = String.valueOf(location.getLatitude());

String longitude = String.valueOf(location.getLongitude());

	    //teste
	    //Toast.makeText(getApplicationContext(), (String)latitude,
	    //	    Toast.LENGTH_LONG).show();

	    //INSERT NA BD


	    try {
		    URL url = new URL(link);
		    HttpURLConnection httpURLConnection = (HttpURLConnection) url.openConnection();
		    httpURLConnection.setRequestMethod("POST");
		    httpURLConnection.setDoOutput(true);

		    OutputStream OS = httpURLConnection.getOutputStream();
		    BufferedWriter bufferedWriter = new BufferedWriter(new OutputStreamWriter(OS, "UTF-8"));

		 String data = URLEncoder.encode(latitude, "UTF-8") + "&" +URLEncoder.encode(longitude, "UTF-8");

		    bufferedWriter.write(data);
		    bufferedWriter.flush();
		    bufferedWriter.close();
		    OS.close();
		    InputStream IS = httpURLConnection.getInputStream();
		    IS.close();
		    httpURLConnection.disconnect();

    } catch (MalformedURLException e) {
		    e.printStackTrace();
	    } catch (UnsupportedEncodingException e) {
		    e.printStackTrace();
	    } catch (ProtocolException e) {
		    e.printStackTrace();
	    } catch (IOException e) {
		    e.printStackTrace();
	    }
    }

eu imagino qe o problema esteja mesmo no String Data. Ja agora, aqui vai o ficheiro php:

<?php
$servername = " ";
$username = " ";
$password = " ";
$dbname = " ";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
   die("Connection failed: " . $conn->connect_error);
}

//Recebendo a informação
$latitude = $_POST['latitude'];
$longitude = $_POST['longitude'];

$query = "INSERT INTO coordenadas VALUES ($latitude, $longitude)";
mysqli_query($conn, $query);

$conn->close();
?>

Ocultei o nome da BD e a pass, mas eles estao la e estao certos.

Se alguem puder ajudar , ficaria muito agradecido.

Obrigado desde ja

Cumprimentos

Share this post


Link to post
Share on other sites
HappyHippyHippo

para que o formato da query SQL de inserção não necessite de especificar os campos dos dados é obrigatório dar os valores para todas as colunas do registo assim como os valores estarem pela ordem da estrutura da tabela.

caso contrário é obrigatório dar a lista dos campos refernetes aos valores que estás a fornecer na criação do registo


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

para que o formato da query SQL de inserção não necessite de especificar os campos dos dados é obrigatório dar os valores para todas as colunas do registo assim como os valores estarem pela ordem da estrutura da tabela.

caso contrário é obrigatório dar a lista dos campos refernetes aos valores que estás a fornecer na criação do registo

Na BD, a tabela coordenadas só contem as tabelas latitude e longitude e estao na ordem correta, podes ser mais especifico? nao estou mesmo a conseguir resolver este problema.

Share this post


Link to post
Share on other sites
HappyHippyHippo

dá um exemplo real dos dados da latitude e longitude assim diz qual o tipo de dados dessas colunas na base de dados


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

dá um exemplo real dos dados da latitude e longitude assim diz qual o tipo de dados dessas colunas na base de dados

os dados sao extraidos pela API em string. Portanto na base de dados tmb tenho em string, como ainda estou a testar por agora fica assim, se calhar mais tarde converto para float.Daí usar o UTF-8.

Edited by rs_pt

Share this post


Link to post
Share on other sites
HappyHippyHippo

se os dados da tabela é string, o SQL está errado, não estás a "criar" uma string correcta.

pensa bem na string SQL final ...


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

se os dados da tabela é string, o SQL está errado, não estás a "criar" uma string correcta.

pensa bem na string SQL final ...

podes-me dizer como é que se faz? estou empancado nisto. Nem encontro solução sequer...

Share this post


Link to post
Share on other sites
HappyHippyHippo

vamos supor que os dados de longitude e latitude são 1 e 2 respectivamente.

qual a string SQL que estás a criar para ser executada ?


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

Insert into coordenadas (latitude,longitude);

certo ? No ficheiro php isso ficou bem

Edited by rs_pt

Share this post


Link to post
Share on other sites
HappyHippyHippo

eu quero que digas qual a string completa que estás a criar aqui :

$query = "INSERT INTO coordenadas VALUES ($latitude, $longitude)";


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

Está igual...

Partindo do princípio que a lat=1 e long=2, para inserir valores na BD seria :

INSERT INTO coordenadas VALUES (1,2)

É isto que estás a perguntar ?

Sê direto na resposta sff porque estou enpancado nisto e este detalhe está a parar tudo .

Share this post


Link to post
Share on other sites
HappyHippyHippo

INSERT INTO coordenadas VALUES (1,2)

certo, mas disseste que os campos na base de dados são strings, e na query não tens strings, mas sim valores numéricos


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

faltam as "" nas variáveis ? Do género "$latitude"? Tenho impressão que já testei isso é não deu

Share this post


Link to post
Share on other sites
HappyHippyHippo

faltam as "" nas variáveis ? Do género "$latitude"? Tenho impressão que já testei isso é não deu

não são aspas mas apostrofes

Edited by HappyHippyHippo

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

Sim , isso , engano . vou tentar mas duvido que seja disso Pq Acho que já tinha feito dessa maneira . A String data do código android esta certa?

Share this post


Link to post
Share on other sites
HappyHippyHippo

A String data do código android esta certa?

não

testa e vê que dados estás a "criar" ou por outras palavras, qual a string final


IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites
rs_pt

não

testa e vê que dados estás a "criar" ou por outras palavras, qual a string final

Não esta a funcionar como é obvio, o String data está mal. Os dados que "estou" a criar, sao as coordenadas vindas da API que sao em String. O que eu nao sei mesmo é fazer a String data para depois o BufferedWriter.write() utilizar.

Share this post


Link to post
Share on other sites
HappyHippyHippo

deveria ser algo do género:

String data = URLEncoder.encode("latitude=" + latitude + "&longitude=" + longitude, "UTF-8");

IRC : sim, é algo que ainda existe >> #p@p

Share this post


Link to post
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now

×

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.