Ankündigung

Einklappen
Keine Ankündigung bisher.

Geolocation API Koordinaten übergeben

Einklappen

Neue Werbung 2019

Einklappen
X
  • Filter
  • Zeit
  • Anzeigen
Alles löschen
neue Beiträge

  • Geolocation API Koordinaten übergeben

    Hallo Community,

    es ist ja möglich sich mit der Geolocation API die Koordinaten des Clients zu holen der gerade auf eine Website oder App zugreift. Ich möchte mir bei Zugriff auf eine Website so die Koordinaten holen und einer Api übergeben und erst dann die Ausgabe starten.

    Soweit hab ich es schon hinbekommen das ich mir die Lat und Lon in $_POST variablen per http-request schreibe, bin mir aber nicht sicher ob das der richtige Weg ist, also die Daten asynchron zu holen. Ich bin ja dann nicht mehr im aktuellen scope also werden die $_POST Variablen nach dem eigentlichen server-request der Website gesetzt. Irgendwo steh ich grade auf dem Schlauch.

    Es sollen die Koordinaten gezogen werden und dann die entsprechenden Daten angezeigt werden, in einem Rutsch.

  • #2
    bin mir aber nicht sicher ob das der richtige Weg ist, also die Daten asynchron zu holen.
    PHP arbeitet nicht asynchron.

    Kommentar


    • #3
      Zitat von Dormilich Beitrag anzeigen
      PHP arbeitet nicht asynchron.
      Wenn du ein Bereich hast der asynchron aktualisiert wird, dann kann man durchaus darin mit PHP sehr gut arbeiten. Wie kann das Problem gelöst werden?

      Kommentar


      • #4
        Wenn du ein Bereich hast der asynchron aktualisiert wird, dann kann man durchaus darin mit PHP sehr gut arbeiten.
        Auch wenn du Client-seitig asynchron arbeitest, ändert das nichts daran, dass PHP weiterhin synchron arbeitet. Du schickst eine HTTP-Request an den Server, der wird dort (synchron) verarbeitet, und wenn das fertig ist, bekommst du den Response.

        Kommentar


        • #5
          Ja, verstehe ich schon. Klar arbeitet PHP nur asynchron. Ich kann mir aktualisierte Daten innerhalbe eines Skripts asynchron z.B. über REST-API´s z.B. in den DOM Baum einfügen und per Javascript verarbeiten, oder eben ganze "Frames". Hier geht es aber darum eigentlich die Geolocation JavaScript API zu benutzen, Lat und Lon des Clients zu ermitteln und zur Laufzeit dementsprechend diesbezüglich den View zu erzeugen.

          Also mein JavaScript sieht derzeit so aus:

          geoFindMe(); function geoFindMe(){ if(!navigator.geolocation){ alert("Geolocation wird von ihrem Browser nicht unterstützt"); } function success(position){ var request=new XMLHttpRequest(); var rand=Math.random(); request.open('post','stations.php?rand='+rand,true); request.setRequestHeader('Content-Type','application/x-www-form-urlencoded'); request.send('lat='+position.coords.latitude+'&lon='+position.coords.longitude); }; function error(){ alert("Es war nicht möglich Sie zu lokalisieren (HTTPS?)"); }; navigator.geolocation.getCurrentPosition(success,error); }
          (Wie stelle ich hier JavaScript Code dar?)

          Das rufe ich im Header auf. Setzt $_POST Variablen aber eben nicht im aktuellen Scope. Ist das überhaupt die richtige herangehensweise?

          Ich würde jetzt erstmal versuchen auf ein Verarbeitungsskript umzuleiten und dann erst den View erzeugen. Geht das aber auch einfacher?

          Kommentar


          • #6
            Ist das überhaupt die richtige herangehensweise?
            Nein. JavaScript setzt überhaupt nix in PHP, allein schon wegen der physischen Entfernung zwischen Client und Server.

            Kommentar


            • #7
              Ajax kann aber:

              Code:
              $.ajax({
                type:'POST',
                url:'getLocation.php',
                data:'latitude='+latitude+'&longitude='+longitude,
              
                ....
              
                });
              das setzt $_POST Variablen in PHP ... mit JavaScript.

              Kommentar


              • #8
                Zitat von ChookaP Beitrag anzeigen
                das setzt $_POST Variablen in PHP ... mit JavaScript.
                Indirekt über einen HTTP-Request. Und im Response antwortet dir PHP, was es damit gemacht hat.

                Kommentar


                • #9
                  versuch es in encodeURIComponent( position.coords.latitude ) einpacken.
                  oder guck mal in Error-console, wenn dien Code welchen Fehler verursacht.
                  Signaturrrrrrr

                  Kommentar


                  • #10
                    Ok, danke. Check, ich.

                    Kommentar


                    • #11
                      Hab hier mal ein Screenshot gemacht, vielleicht kann mir hier jemand zur Erleuchtung verhelfen:


                      Links.jpg
                      Das ist der Code für oben gezeigte Ausgabe:

                      PHP-Code:
                      <!DOCTYPE html>
                      <html>
                      <body>
                      <button onclick="getLocation()">Try to get it</button>
                      <p id="demo">GPS Location:</p>
                      <script src="https://code.jquery.com/jquery-1.10.2.js"></script>
                      <script>
                          var x = document.getElementById("demo");
                          function getLocation() {
                            if(navigator.geolocation){
                              navigator.geolocation.getCurrentPosition(showPosition);
                            }else{
                              x.innerHTML = "Geolocation is not supported by this browser.";
                            }
                          }
                          function showPosition(position) {
                              x.innerHTML = "Latitude: " + position.coords.latitude + "<br>Longitude: " + position.coords.longitude;

                              $.post("geolocation_api2.php", {
                                latitude: position.coords.latitude,
                                longitude: position.coords.longitude
                              },

                              function (data) {
                                // im Parameter data steht jetzt die Ausgabe
                                // des PHP-Skriptes zur Verfuegung
                                console.log(data);
                              });
                          }
                      </script>
                      <?php
                      $latitude 
                      $longitude "";

                      if(
                      $_SERVER["REQUEST_METHOD"] == "POST"){
                        
                      $latitude=input_test($_POST["latitude"]);
                        
                      $longitude=input_test($_POST["longitude"]);
                        echo 
                      "<pre>"; echo "hier"; echo "</pre>";
                      }

                      function 
                      input_test($daten){
                        
                      $daten=trim($daten);
                        
                      $daten=stripslashes($daten);
                        
                      $daten=htmlspecialchars($daten);
                        echo 
                      "<pre>"; echo "nein hier"; echo "</pre>";
                        return 
                      $daten;
                      }
                      echo 
                      "<pre>"print_r($latitude); echo "</pre>";
                      echo 
                      "<pre>"print_r($longitude); echo "</pre>";
                      ?>
                      <br>
                      </body>
                      </html>
                      Die Ausgabe oben geschieht nach aufrufen der URL und klicken auf den Button. Also zwei bzw. drei Ereigniße inklusive JQuery GET. Da ist jetzt auch ein callback dabei, mit Ajax über JQuery werden die Daten geholt und gepostet.

                      Mein Problem: wie komme ich an die $_POST Variablen? Eine Ausgabe in HTML will ich überhaupt nicht eigentlich. In der Console funktioniert die Variablenausgabe, oben im Fenster nicht.

                      Ich dachte ich hatte das Problem schon mit dem Callback gelöst.

                      Ein bestimmtes PHP Skript für den View soll aufgerufen werden, hier sollen die Koordinaten ermittelt werden, an das Model übergeben werden und erst dann der View erzeugt werden.

                      Aktuell baue ich halt an einer Benzinpreis App die soll sich per Geolocation automatisch die Position ziehen, dann die Tankstellen in der Nähe anzeigen und optional die Günstigste oder einen individuellen Umkreis an Tankstellen anzeigen können.

                      Kommentar


                      • #12
                        Du rufst mit der AJAX-Anfrage eine neue Instanz deiner Seite auf (m.M.n. total unsinnig). Und auf der bisherigen Seite wird auch kein PHP ausgeführt, da der Browser kein PHP kann.

                        Bei AJAX sollte man Daten (XML, JSON, etc.) zurückgeben, kein HTML.

                        Kommentar


                        • #13
                          Ok, erstmal danke für die Erläuterung und Erinnerung. Stimmt am besten als Text-Response. Ja aber wie komme ich an die Koordinaten? So daß ich die wie gewünscht verarbeiten kann? Kann doch nicht so schwer sein...

                          An einem DOM-Node die Daten holen? So mit getElementById(); Dann müsste ich aber wieder mischen...bzw. Sachen auf <hidden> setzen, holen und wieder callback...?

                          HTML soll ja weg...

                          Mit GET an die URL hängen?

                          Kommentar


                          • #14
                            Soll die Seite überhaupt ohne JavaScript funktionieren? Wenn nein, würd ich solche Bastellösungen gleich sein lassen, und was "ordentliches" wie Angular, Vue, etc. verwenden. PHP stellt dann nur mehr eine API zur Verfügung und liefert gar kein HTML aus.

                            Kommentar


                            • #15
                              Wenn ich mich recht erinnere benötigt Bootstrap Angular, ich benutze ja Bootstrap für das Frontend. JQuery hab ich hier auch drin. Aber ich weiß was du meinst. Das ist jetzt aber mehr eine philosophische Frage. Benutze ich ohne Verluste Frameworks, die natürlich sehr mächtig sind und auch mit Sicherheit die Handhabung sehr vereinfachen, oder bleibe ich eher konservativ, denn meine Seite soll in 10 Jahren am besten auch noch funktionieren. Meine HTML Seite dich ich mir vor 15 Jahren mal gebaut habe funktioniert immer noch, wenn ich das wollte.

                              Aktuelles Beispiel ist die google Maps Api, die jetzt gebührenpflichtig ist, da mußte so manches Unternehmen bestimmt intern ganz schön rudern, damit die Kunden weiterhin die Apps nutzen konnten.

                              Ich benutze die aber weiterhin da die einfach am aktuellsten und der Wiederkennungswert am höchsten ist. Wenn alle Websites nur noch mit Angular, VUE oder sonstwie funktionieren, wer besitzt dann die Websites? Du oder der Framework Host bzw. die Firma die dahinter steckt??

                              Aber ich schau mal ob ich was finde..

                              Kommentar

                              Lädt...
                              X