Kirjautuminen

Haku

Tehtävät

Keskustelu: Nettisivujen teko: Tietojen siirto JavaScriptista PHP:lle

pingis [22.12.2017 11:12:38]

#

Nappaan javascriptista PHP-koodiin

$lati= '<span id="lat"></span>';
$lgn = '<span id="lng"></span><br>';
echo 'Latitudi :'. $lati.'<br>';
echo 'Longitudi :'.$lgn.'<br>';

Tulostaa koordinaatit ihan tyylikkäästi

Latitudi :xx.095438599999994
Longitudi :xx.6236104

mutta kun yriän tallentaa ne tietokantaan niin muuttujat $lati ja $lgn ovatkin tyhjiä. Miksi??

groovyb [22.12.2017 11:14:32]

#

jos laittaisit myös loppukoodin, niin vika voisi selvitä. ylläolevan koodin mukaan ei kyllä vielä pitäisi näkyä mitään koordinaattiarvoja, koska tallennat muuttujiin vain <span> - elementit.

pingis [22.12.2017 11:30:39]

#

Tuollai yritän sitä tietokantaan mutta kun tulostan
echo $sql;
on muuttujien paikalla tyhjää.
Jos laitan vaikkaa $lati=10 ja $lgn=20 niin toimii.

$sql = "INSERT INTO kivi (lati, longi)
VALUES ('$lati', '$lgn')";
if ($conn->query($sql) === TRUE) {
    echo "New record created successfully";
} else {
    echo "Error: " . $sql . "<br>" . $conn->error;
}

$conn->close();

Lisäys: Nuo muuttujat on tietokannassa määritelty float-muuujiksi.

Metabolix [22.12.2017 11:55:11]

#

Tuossahan et todellakaan siirrä PHP-koodiin mitään. Olennaista on ymmärtää, että ensin suoritetaan aivan koko PHP-koodi, minkä jälkeen sivu siirtyy selaimelle, ja vasta silloin suoritetaan JavaScript-koodi. Mitään tietoa JavaScriptistä ei automaattisesti palaa PHP-koodiin, koska PHP:n suoritus on jo päättynyt. Tuossa siis PHP:ssä tulostat sivulle pari span-elementtiä, ja ilmeisesti JavaScript-koodi lisää niihin lukuja. Se, millä tavalla $lati ja $lgn tyhjenevät, ei selviä noista koodinpätkistä, mutta parhaimmillaankin ne voisivat tuossa sisältää samat tekstit (eli <span jne...>), jotka aiemmin niihin tallennat.

Jos haluat siirtää JavaScriptista tietoa PHP:lle, sinun täytyy lähettää lomake (form) tai käyttää muuta datan lähetykseen sopivaa rajapintaa (XMLHttpRequest tai Fetch API).

pingis [22.12.2017 12:52:54]

#

Tuossa vielä tuo koodi jolla PHP:ssa saan koordinaatit näkyviin mutta miten
saan ne PHP-muuttujiksi

<!DOCTYPE html>
<html lang="en">
<head>
  <title>Geocode  Example</title>

  <meta charset="utf-8">
  <meta name="viewport" content="width=device-width, initial-scale=1">
  <link rel="stylesheet" href="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css">

  <script src="https://ajax.googleapis.com/ajax/libs/jquery/1.12.4/jquery.min.js"></script>
  <script src="http://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/js/bootstrap.min.js"></script>

</head>
<body>
<center>
<?php
$lati= '<span id="lat"></span>';
$lgn = '<span id="lng"></span><br>';
echo 'Latitudi :'. $lati.'<br>';
echo 'Longitudi :'.$lgn.'<br>';
?>

<button id="btn">Paina tästä koordinaatit</button>
<script>

$(document).ready(function() {
    $('#btn').click(function(e) {
         $.ajax({
		type : 'POST',
		data: '',
		url: "https://www.googleapis.com/geolocation/v1/geolocate?key=AIzaSyCW0lvagDP67ulkwwP7yAIBHJoj2HT0apM",
		success: function(result){
        		$('#lat').html(result['location']['lat']);
				$('#lng').html(result['location']['lng']);
	    		}});

    });
} );

</script>

</body>
</html>

Metabolix [22.12.2017 15:01:27]

#

Koeta nyt käsittää, että tuossa koodissa ei ole PHP:llä mitään osuutta.

Voisit ihan hyvin korvata PHP-osuuden pelkällä HTML-koodilla, ja tulos olisi täsmälleen sama:

Latitudi : <span id="lat"></span><br>
Longitudi : <span id="lng"></span><br><br>

Luvut haetaan JavaScriptissa funktiolla $.ajax netistä. Nyt sinun pitäisi lisätä tuonne success-funktion sisään toinen $.ajax-kutsu, jossa tiedot lähetettäisiin toiselle PHP-sivulle tallennusta varten.

// Lisää tämä rivi ennen }}); -riviä:
$.ajax({'type': 'POST', 'data': result['location'], 'url': "tallenna.php"})

Sitten teet sivun tallenna.php, jossa haet $_POST-taulukosta arvot ja tallennat ne.

Et voi saada lukuja samalla sivulla oleviin PHP-muuttujiin, koska saman sivun PHP on jo lopetettu siinä vaiheessa, kun JavaScript hakee luvut.

Vastaus

Aihe on jo aika vanha, joten et voi enää vastata siihen.

Tietoa sivustosta