HTML5 Geodaten mit Ajax + PHP in eine Datenpankspeichern

  • HTML

Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von Neuling li.

    HTML5 Geodaten mit Ajax + PHP in eine Datenpankspeichern

    Guten Morgen Gemeinde,

    Ich habe eine frage die mich seid Tagen beschäftigt.

    Ich würde gerne HTML5 Geodäten in eine Datenbank schreiben. Ich habe gelesen das man das mit Ajax und PHP machen soll.

    Nun ich komme da leider nicht weiter.

    Soweit habe ich es schonmal :

    HTML-Quellcode

    1. <!DOCTYPE html>
    2. <html>
    3. <body>
    4. <p>Button druecken um Standort zu ermitteln</p>
    5. <button onclick="getLocation()">Ermitteln</button>
    6. <p id="demo"></p>
    7. <script>
    8. function getLocation() {
    9. if (navigator.geolocation) {
    10. navigator.geolocation.getCurrentPosition(showPosition);
    11. }
    12. }
    13. function showPosition(position) {
    14. var position = {
    15. "lat" : position.coords.latitude,
    16. "lon" : position.coords.longitude
    17. };
    18. $.ajax({
    19. data: position,
    20. url: 'verarbeiten.php',
    21. type: 'post'
    22. });
    23. }
    24. </script>
    25. </body>
    26. </html>


    der PHP teil habe ich aktuell so um anzuzeigen ob was ankommt aber lohne erfolg:

    PHP-Quellcode

    1. <?php
    2. #Variablen festlegen
    3. $lat = $_POST['lat'];
    4. $lon = $_POST['lon'];
    5. echo $lat;
    6. echo $lon;
    7. ?>


    Hat mir irgend jemand ein Lösungsansatz.

    Danke vorab schonmal.
    ist das was du in der "verarbeiten.php" hast alles bis Jetzt?
    wenn Ja, denn baust du mit mysqli eine Verbindung auf und sendest den Mysql-String per mysqli_query in die Datebank.
    Dafür brauchst du jedoch eine Datenbank und die min. eine Tabelle.

    Ist die Webseite nur für dich Privat oder Öffentlich?
    Öffentlich, denn solltest du die variable $lat und $lot Escapen.

    MFG
    Whitetiiger
    Hallo,

    du hast auf jedenfall vergessen jQuery einzubinden - das hättest du selbst ganz einfach herausfinden können indem du die Konsole geöffnet hättest - dort steht dann nämlich drin "$ is not defined" - das ist ein Indiz
    dafür das jQuery nicht vorhanden ist.

    Hab jQuery eingebunden und schon hat es wie gewünscht funktioniert.

    In die Datenbank kannst du es mit mysqli eintragen - ich hab deinen code mal erweitert.


    HTML-Quellcode

    1. <!DOCTYPE html>
    2. <html>
    3. <body>
    4. <p>Button druecken um Standort zu ermitteln</p>
    5. <button onclick="getLocation()">Ermitteln</button>
    6. <p id="demo"></p>
    7. <script src="http://code.jquery.com/jquery-latest.min.js" type="text/javascript"></script>
    8. <script>
    9. function getLocation() {
    10. if (navigator.geolocation) {
    11. navigator.geolocation.getCurrentPosition(showPosition);
    12. }
    13. }
    14. function showPosition(position) {
    15. var position = {
    16. "lat" : position.coords.latitude,
    17. "lon" : position.coords.longitude
    18. };
    19. $.ajax({
    20. data: position,
    21. url: 'verarbeiten.php',
    22. type: 'post',
    23. success: function(e) {
    24. e = $.trim(e);
    25. if (e == "erfolgreich") {
    26. alert("Daten wurden erfolgreich eingetragen");
    27. }
    28. if (e == "fehler") {
    29. alert("Fehler beim eintragen(Verbindungsdaten oder Query)");
    30. }
    31. },
    32. error: function(e) {
    33. alert("Fehler mit Ajax (stimmt der Pfad zur Datei?)");
    34. }
    35. });
    36. }
    37. </script>
    38. </body>
    39. </html>



    PHP-Quellcode

    1. <?php
    2. #Variablen festlegen
    3. $lat = $_POST['lat'];
    4. $lng = $_POST['lon'];
    5. #Daten für Datenbankzugriff festlegen
    6. $server = "localhost";
    7. $username = "root";
    8. $password = "";
    9. $dbname = "test";
    10. #Verbindung aufbauen
    11. $conn = new mysqli($server, $username, $password, $dbname);
    12. #prüfen ob ein Fehler aufgetreten ist
    13. if ($conn->connect_error) {
    14. die("Verbindung fehlgeschlagen: " . $conn->connect_error);
    15. }
    16. #Query vorbereiten
    17. $sql = "INSERT INTO geodaten (lat, lng) VALUES ('" . $lat . "', '" . $lng . "')";
    18. #Daten eintragen
    19. if ($conn->query($sql) === TRUE) {
    20. echo "erfolgreich";
    21. } else {
    22. echo "fehler";
    23. }
    24. #Verbindung schließen
    25. $conn->close();
    26. ?>
    @windowsfan
    Bitte dein Code ist unsicher.
    Jeder könnte einen POST Request senden mit eigenem Inhalt und könnte dadurch ne schöne SQL-Injection einsetzten.
    Weil man Blind die Post Daten in die Datenbank haut.
    Das hier durchlesen: secure.php.net/manual/de/mysqli.real-escape-string.php
    Oder gleich PDO und prepared statements verwenden.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen

    windowsfan schrieb:

    villeicht muss der code auch nicht sicher sein.


    Man sollte !immer! auf die Sicherheit achten. Tut man das nicht gewöhnt man sich das schlechte an und macht es nur noch.
    Lieber gleich immer sicher machen und validieren / escapen anstatt es wegzulassen.
    Grüße , xChRoNiKx

    Nützliche Links:
    Visual Studio Empfohlene Einstellungen | Try-Catch heißes Eisen