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??
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.
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.
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).
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>
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.
Aihe on jo aika vanha, joten et voi enää vastata siihen.