Zur Navigation

Adresse aus JavaScript in PHP Variable schreiben

1 schurik

Eine andere Frage noch:

wie kann ich das Ergebnis ( die Adresse ) aus diesem JavaScript in eine PHP Variable schreiben?






    <form onsubmit="showAddress(); return false">
      <input id="search" size="55" type="text" value="">
      <input type="submit" value="Go!">
      <input type="button" onclick="javascript:map.clearOverlays();return false" value="Clear markers">
    </form>
    
    <div id="message"></div>

	<a href="index.html">Zur&uuml;ck</a></p>

</div>

    <noscript><b>JavaScript must be enabled in order for you to use Google Maps.</b> 
      However, it seems JavaScript is either disabled or not supported by your browser. 
      To view Google Maps, enable JavaScript by changing your browser options, and then 
      try again.
    </noscript>

    <script type="text/javascript">
    //<![CDATA[
    
    if (GBrowserIsCompatible()) { 

      var map = new GMap(document.getElementById("map"));
      map.addControl(new GLargeMapControl());
      map.addControl(new GMapTypeControl());
      map.setCenter(new GLatLng(<?php echo $geodaten[GOOGLE_LAT]; ?>, <?php echo $geodaten[GOOGLE_LONG]; ?>),12);
      
      // ====== Create a Client Geocoder ======
      var geo = new GClientGeocoder(); 

      // ====== Array for decoding the failure codes ======
      var reasons=[];
      reasons[G_GEO_SUCCESS]            = "Success";
      reasons[G_GEO_MISSING_ADDRESS]    = "Missing Address: The address was either missing or had no value.";
      reasons[G_GEO_UNKNOWN_ADDRESS]    = "Unknown Address:  No corresponding geographic location could be found for the specified address.";
      reasons[G_GEO_UNAVAILABLE_ADDRESS]= "Unavailable Address:  The geocode for the given address cannot be returned due to legal or contractual reasons.";
      reasons[G_GEO_BAD_KEY]            = "Bad Key: The API key is either invalid or does not match the domain for which it was given";
      reasons[G_GEO_TOO_MANY_QUERIES]   = "Too Many Queries: The daily geocoding quota for this site has been exceeded.";
      reasons[G_GEO_SERVER_ERROR]       = "Server error: The geocoding request could not be successfully processed.";
      
      // ====== Geocoding ======
      function showAddress() {
        var search = document.getElementById("search").value;
        // ====== Perform the Geocoding ======        
        geo.getLocations(search, function (result)
          { 
            // If that was successful
            if (result.Status.code == G_GEO_SUCCESS) {
              // How many resuts were found
              document.getElementById("message").innerHTML = "Found " +result.Placemark.length +" results";

              // Loop through the results, placing markers
              for (var i=0; i<result.Placemark.length; i++) {
                var p = result.Placemark[i].Point.coordinates;
                var marker = new GMarker(new GLatLng(p[1],p[0]));
                document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+ result.Placemark[i].address + marker.getPoint();
                map.addOverlay(marker);
              }
              // centre the map on the first result
              var p = result.Placemark[0].Point.coordinates;
              map.setCenter(new GLatLng(p[1],p[0]),14);
            }
            // ====== Decode the error status ======
            else {
              var reason="Code "+result.Status.code;
              if (reasons[result.Status.code]) {
                reason = reasons[result.Status.code]
              } 
              alert('Could not find "'+search+ '" ' + reason);
            }
          }
        );
      }
    }
    
    // display a warning if the browser was not compatible
    else {
      alert("Sorry, the Google Maps API is not compatible with this browser");
    }

    // This Javascript is based on code provided by the
    // Blackpool Community Church Javascript Team
    // http://www.commchurch.freeserve.co.uk/   
    // http://www.econym.demon.co.uk/googlemaps/

    //]]>
    </script>

03.12.2007 16:54

2 Jörg Kruse

Möchtest du auf eine andere Seite weiterleiten, wo die Variable ausgewertet wird?

Da sehe ich zwei Möglichkeiten:

1. das Script löst eine Weiterleitung aus - die Variable wird im Query String übergeben

2. das Script schreibt die Variable in ein Input-Feld eines Formulars und schickt dieses ab

03.12.2007 17:20

3 schurik

Hallo Jörg, auch in diesem Thema. ;-)

Möchtest du auf eine andere Seite weiterleiten, wo die Variable ausgewertet wird?

Auf der selben Seite. Aber ist das gleiche oder?

Die Adresse in der Variable verwende ich für die Abfrage in der DB.
Ist ja bei mir alles mit PHP. Kenne mich JavaScript nicht aus.

03.12.2007 17:26 | geändert: 03.12.2007 17:31

4 Jörg Kruse

Ach jetzt verstehe ich, es geht um die Eingabe in diesem Feld:

<input id="search" size="55" type="text" value="">

Das würde ich dann eher so lösen, dass du nach Eingabe in einem normalen Submit-Formular zuerst auf die PHP-Seite weiterleitest, welche die Eingabe verarbeitet und anschließend das Google-Maps-Script aufruft und diesem die Variable übergibt. In dem Script müsste dann noch die Variablenaufnahme entsprechend geändert werden, also etwa so:

var search = '<?php echo $_GET['search'] ?>';

03.12.2007 18:11 | geändert: 03.12.2007 18:12

5 schurik

Hallo Jörg,

ja genau es geht um die Eingabe im Formular Feld.

Weiss nicht ob ich das richtig verstanden habe Aber ich glaube du meinst das anders rum. Du meinst von PHP Variable zu JavaScript? Aber ich hätte gerne das JavaScript Ergebnis in einer Variable.

Ist es das hier vielleicht?:

document.getElementById("message").innerHTML += "<br>"+(i+1)+": "+ result.Placemark[i].address + marker.getPoint();

Weiss nicht genau.

Das Feld gibt in diesem Formular den Wert an JavaScript und der GeoCoder gibt die Koordinaten und schreibt die Koordinaten und die Dazugehörige Stadt sogar in HTML auf meine Seite.

Ich sehe dann auf meiner Seite: Darmstadt, Germany ( .. Koordinaten.. )

Das was JavaScript in HTML Schreibt ( google Abfrage - Ergebnis ) möchte ich in einer PHP Variable damit ich sie z.B. in eine DB Abfrage verarbeiten kann.


Viele Dank

schurik

03.12.2007 19:36

6 Rudy

Das was JavaScript in HTML Schreibt ( google Abfrage - Ergebnis ) möchte ich in einer PHP Variable damit ich sie z.B. in eine DB Abfrage verarbeiten kann.

Dann kombinier das mit dem Ajax-Aufruf eines PHP-Skripts und poste die Daten, die Du brauchst, an das Skript...

z.B. mittels dieses knackigen Codes von Peter-Paul-Koch (http://quirksmode.org):

function sendRequest(url, callback, postData) {
  var req = createXMLHTTPObject();
  if (!req) return;
  var method = (postData) ? "POST" : "GET";
  req.open(method, url, true);
  req.setRequestHeader('User-Agent', 'XMLHTTP/1.0');
  if (postData)
    req.setRequestHeader('Content-type', 'application/x-www-form-urlencoded');
  req.onreadystatechange = function () {
    if (req.readyState != 4) return;
    if (req.status != 200 && req.status != 304) {
      alert('HTTP error ' + req.status);
      return;
    }
    callback(req);
  }
  if (req.readyState == 4) return;
  req.send(postData);
}

var XMLHttpFactories = [
  function () {return new XMLHttpRequest()}, 
  function () {return new ActiveXObject("Msxml2.XMLHTTP")}, 
  function () {return new ActiveXObject("Msxml3.XMLHTTP")}, 
  function () {return new ActiveXObject("Microsoft.XMLHTTP")}
];

function createXMLHTTPObject() {
  var xmlhttp = false;
  for (var i=0;i<XMLHttpFactories.length;i++) {
    try {
      xmlhttp = XMLHttpFactories[i]();
    }
    catch (e) {
      continue;
    }
    break;
  }
  return xmlhttp;
}

/*
Usage:

sendRequest('file.txt', handleRequest);

Now the file file.txt is fetched, and when that's done the function handleRequest() is called. This function receives the XMLHttpRequest object as an argument, which I traditionally call req (though, of course, you can use any variable name you like). Typically, this function reads out the responseXML or responseText and does something with it.

function handleRequest(req) {
  var writeroot = [some element];
  writeroot.innerHTML = req.responseText;
}
*/

z.B. sendrequest('myresponse.php', handleRequest, 'response=12&anderevar=3');

03.12.2007 19:57 | geändert: 03.12.2007 19:58

7 schurik

Oh je

Danke schön Rudy.

Jetzt brauche ich erst mal paar Tage um die Zeilen zu verstehen aber es sieht schon sehr knackig aus;-).




03.12.2007 20:02

8 Rudy

Du musst die Zeilen gar nicht unbedingt verstehen :) Die funktionieren gut... Du musst lediglich einen Aufruf machen, dort wo Du aus JS an das Skript posten willst, und zwar mit der Funktion sendRequest.

Das funktioniert so:

sendRequest(<php-Skriptname>, <response-funktion>, <postdaten>);

Der Parameter "PHP-Skriptname" sollte klar sein, das ist die URL oder der Pfad zur PHP-Datei. Die Postdaten sind ein Query-String, wie Du ihn von PHP gewohnt bist - die stöpselst Du Dir selbst in JS zusammen : var1=wert1&var2=wert2&... und übergibst die beim Aufruf von sendRequest an das PHP-Skript. Dort kannst Du die wie gewohnt über $_POST auslesen.
Die Response-Funktion ist eine JS-Funktion, die Du selbst schreiben musst, die so aufgebaut ist, wie die "handleRequest"-Funktion im kommentierten Teil. Die schreibst Du irgendwo im Script-Teil rein, sodass sendRequest diese dann aufrufen kann, sobald das PHP-Skript fertig hat (sonst weißt Du nicht, ob alles glattgelaufen ist). Z.B. machst Du ein <div id="serverantwort"></div> irgendwo im HTML-Text und schreibst dann mittels dieser Funktion die Antwort des PHP-Skripts (also das, was Du mit PHP echo/print ausgibst) hinein:

function handleRequest(req) {
  document.getElementById('serverantwort').innerHTML = req.responseText;
}

Einfach mal ausprobieren ... sieht komplizierter aus, als es ist.

03.12.2007 20:27 | geändert: 03.12.2007 20:32

Beitrag schreiben (als Gast)

Die Antwort wird nach der Überprüfung durch einen Moderator freigeschaltet.





[BBCode-Hilfe]