PHP String in Javascript Variable wandeln

sid61

Mitglied
Hi,
ich bin schon eine ganze Weile am basteln, bekomme es aber irgendwie nicht hin. Habe zwar ähnliche Beiträge gefunden, konnte aber leider kein positives Ergebnis ableiten, so das die gewünschte Funktion automatisch t..

Hier nun zum Problem...

Ich lese aus meiner Datenbank (MySQL) die Daten einer Tabelle aus.

Das Ergebnis der Abfrage kombiniere ich in einem String

in diesem Fall
Code:
$komplett="$ergebnis[postcode] $ergebnis[state] $ergebnis[address]";

mit echo $komplett; erhalte ich genau die gewünschten Daten, die man für diese Abfrage braucht. Im einzelnen geht es dabei um die Übergabe von Adressdaten für eine Google Maps Routine, die dann später die Fähnchen auf die Karte setzen soll.

Die Routine, die ich dafür benutzen möchte hat aber nun leider nur eine HTML Formular Abfrage, die dann die Daten an eine Javascript Function übergibt.

Im einzeln sieht das dann so aus...
Code:
<form onsubmit="showAddress(); return false">
<input id="search" size="40" type="text" value="<?php echo $komplett; ?>" title="No separators needed. Not case sensitive." >
<input type="submit" value="Enter" title="You can hit Enter key as well"></form></li>


Nun würde ich gern das ganze so anlegen, das innerhalb einer Schleife die Daten an die Funktion übergeben werden, die das dann mit Google abgleicht und die Pointer setzt.
So sieht es bisher aus und ich habe den lieben langen Tag probiert, bekomme es aber nicht hin (zu wenig Erfahrung damit)...

Code:
<?
include ("config.php");
mysql_connect($host,$user,$password);
	@mysql_select_db($database) or die( "Unable to select database");
	$sql = 'SELECT `id` , `type` , `postcode` , `state` , `address` FROM `jos_hp_properties` WHERE `approved` = 1' ;
       $query = mysql_query($sql);  
       while ($ergebnis = mysql_fetch_array($query, MYSQL_ASSOC))
   { 
   
     $komplett="$ergebnis[postcode] $ergebnis[state] $ergebnis[address]";
          
?>
---- hier habe ich bisher verschiedene Dinge ausprobiert um einen vieckigen Schlüssel in ein rundes Loch zu schieben, leider ohne Erfolg deshalb hier nochmal die originale Zeile eingefügt.. ----

<form onsubmit="showAddress(); return false">
<input id="search" size="40" type="text" value="<?php echo $komplett; ?>" title="No separators needed. Not case sensitive." >
<input type="submit" value="Enter" title="You can hit Enter key as well"></form></li>
<br/>
<?
}
?>


Soweit ich das verstehe, muss es irgendwie einen Weg geben, damit man meinen zusammen gesetzten String als Inhalt von "search" definieren kann und diesen dann an die Funktion showAddress(); übergibt. Im Prinzip soll es so sein, das die Datenbank alle Datensätze ausliest und dann der Reihe nach an diese Funktion übergibt, die Ihrerseits wieder die Google Map mit den entsprechenden Fähnchen versieht.

Ich bin irgendiwe nicht weiter gekommen und hoffe, das ich hier jemanden finde, der mir bei diesem Problem etwas helfen kann.

Vielen Dank für Ihr Interesse an diesem Beitrag.
sid61
 
darf ich fragen, was das mit Java zu tun hat? ;)

Zum Thema: Deine Stringkonkartenation ist schon etwas seltsam. Wie sieht das Format aus, was du brauchst? du brauchst doch nur die benötigten Strings mit dem . Operator verbinden

PHP:
$komplett = $teil1 . $teil2 . $teil3 . "foobar";

REINHAUN!
 
Hallo Oliver,

erst einmal danke für deine Hilfe. Es tut mir leid, das ich den Beitrag offensichtlich falsch unter gebracht habe, das war keine Absicht.

Nun zum Thema -

Die Formulardaten hatte ich nur eingebunden, damit man die ursprüngliche Form sieht.
Das Formular soll ja nicht mehr sein - denn so funktioniert es nicht.

Der Teil -

Code:
<form onsubmit="showAddress(); return false">
<input id="search" size="40" type="text" value="<?php echo $komplett; ?>" title="No separators needed. Not case sensitive." >
<input type="submit" value="Enter" title="You can hit Enter key as well"></form></li>

ist ja eben generell hinfällig. Im Prinzip muss ich diesen Teil gegen eine Lösung austauschen, da ja hier maximal nur 1 Datensatz übergeben wird. Genau an dieser Stelle müßte ich wie gesagt Hilfe haben...

Denn die Daten werden ja mittels des Forumlars an die Javascript Funktion showAdress() übergeben.

Die Funktion selber, die das empfängt sieht so aus...

Code:
function showAddress() 
{
var now=new Date();
lat.length=0;

document.getElementById("message").innerHTML = "searching";
var search = document.getElementById("search").value;
geo.getLocations(search, function (result)
{ 
// show status code

document.getElementById("message").innerHTML = status[result.Status.code]+"<br>";

if (result.Status.code == G_GEO_SUCCESS) 
{
//start stopwatch
var then=new Date();
// Loop through the results, placing markers
for (var i=0; i<result.Placemark.length; i++) 
{
lat[i]=result.Placemark[i].Point.coordinates[1];
lng[i]=result.Placemark[i].Point.coordinates[0];
html[i]="<small>"+(i+1)+": </small> "+ result.Placemark[i].address;
Accu[i] = "";
if(result.Placemark[i].AddressDetails){
Accu[i]=result.Placemark[i].AddressDetails.Accuracy;
}
precis[i]=3*html[i].split(",").length;
var point=new GLatLng(lat[i],lng[i]);
var coords="<small> ("+lat[i]+", "+lng[i]+")</small>";


marker[i]=new GMarker(point, {title:i+1});;
map.addOverlay(marker[i]);
miniMarker[i]=new GMarker(point,icon);
if(overV.getOverviewMap())overV.getOverviewMap().addOverlay(miniMarker[i]);
bounds.extend(marker[i].getPoint());
var addr=result.Placemark[i].address;
if(result.Placemark[i].AddressDetails){
var iso=result.Placemark[i].AddressDetails.Country.CountryNameCode;
}
createIW(i+1,marker[i],lat[i],lng[i],addr,iso);

document.getElementById("message").innerHTML +="<a href=javascript:go("+lat[i]+","+lng[i]+","+precis[i]+","+i+")>"+ 

html[i]+" "+coords+" "+Accu[i]+"</a><br>";
}

Ich benötige also Hilfe dabei, das ich den Inhalt des Strings ($komplett) an diese Funktion übergebe. Und zwar soll es dabei so funktionieren, das alle vorhandenen Datensätze nach und nach an diese Funktion übergeben werden - damit entsprechend der Daten die Fahnen gesetzt werden.

Das ich mich gelinde ausgedrückt dabei zu blöde anstelle, liegt in der Tatsache, das ich damit nicht genügend Umgang hatte. Ich bitte also zu entschuldigen, das diese Anfrage laienhaft oder absolut falsch wirkt. Aber ich gelobe Besserung und werde hoffentlich im Laufe der Zeit auch interessantere Fragen stellen ;-)

Liebe Grüße
sid61
 
Danke fürs verschieben. War net bös gemeint. Forenposts sollten ein Moodtag haben ;). Zum Thema. Ich steck zwar inhaltlich nicht wirklich drin, aber der Kern des Problems ist doch folgender.

Deine JavaScript Funktion liest einen String aus einem HTML Element mit der ID "search" und tut damit irgendwas. Wenn ich dich weiter richtig verstehe ist das der Content für eine Anfrage an Google Maps.

Meine Frage ist:

1. Was funktioniert den genau nicht?
2. Kennst du das Format / den Aufbau ("zwei x, danch eine zahl, danach whatever") des String, den du weg schicken willst?
3. Wo ist das Problem den String dann einfach nach diesem Format zusammenzubauen?

REINHAUN!
 
Hallo,

zuerst Danke Maik - ich werde zukünftig darauf achten, das ich es besser unterbringe.. :rolleyes:

An kuddeldaddeldu - diesen Beitrag hatte ich auch schon gelesen, aber dort gibt es eben auch nur die Lösung über das Formular, wie ich es ja auch habe. Ich habe ja auch schon einen funktionierenden Geo-Coder, aber ich muss ja keine Coordinaten haben, sondern (so blöd es sich anhört) nur noch die Adressdaten der Datenbank an die Funktion übergeben. In den Beispielen ist dies aber genau der Punkt, der nicht beschrieben ist - es endet eben auch dort alles mit einem Beispiel mit Formular, aber das ist leider nicht das, was ich benötige. Auch beim Wühlen in der Google Map Api hatte ich meine Probleme.

Vieles habe ich ja auch schon erfolgreich lösen können, aber bei dieser einen Sache stecke ich fest und komme nicht weiter.

An Oliver - Danke für deine Hilfe - und ja, ich habe Probleme mit der (aus deiner Sicht) einfachen Zusammenstellung. Ein Grund, warum ich mich in diesem Forum angemeldet habe.

Vielleicht drücke ich mich auch irgendwie ungeschickt aus, aber in meinem letzten Beitrag meine ich - es richtig formuliert zu haben.

Also noch mal -

1.) Ich habe im Gegenteil zu vielen Computermenschen nicht den absoluten Überblick, bin aber bestrebt es zu verbessern.

2). Mein Problem besteht in erster Linie darin, das ich den HTML Code (Formular mit Funktion der Sendung an die Javascript Funktion) gegen einen Code austauschen möchte, der dies ohne menschliches Zutun so generiert, das er eben automatisch (ohne Formular) - die Daten vollautomatisch der Variable in die Funktion schreibt.

Also statt "Press Button" - dann ein Datensatz an die Funktion automatisch übergibt und das gleiche wiederholt. Wobei ich den Teil mit der Schleife habe (ohne Zähler) - der anstatt des Formulars eben den (MÖCHTEICHHABEN CODE) ersetzt und alles brav an die Funktion sendet.

also

eine Lösung, die meine bereits generierte variable $komplett mit Inhalt (PLZ ORT ADRESSE)
Beispiel: 12345 Testerland Testerlandallee 12 (existiert auch schon in meinem merkwürdigen String ;-)
an showAddress() automatisch übergibt und bei jedem Durchgang einen Datensatz ablegt.

Im Sinne davon wird danach (so es dann geht) - für jede Adresse mit der Funktion showAddress() eine Fahne erzeugt und grafisch auf der Map angelgt. Aber genau hier habe ich das Problem - ich bekomme es nicht hin, das ich eine Syntax entwerfe - die genau diese Automatik übernimmt.

Eben Funktion innerhalb Schleife... So sieht mein Problem derzeit aus...

-> Daten kommen in Form $komplett an --> Ich bin eine Adresse von weiteren im String $komplett. Ich funktioniere tadellos, aber die Funktion showAddress() will mich nicht haben, weil ich nicht die richtige Sprache verwende...

-----> Hi, Ich bin das Problem Was mache ich nun mit dem Datensatz, den die Schleife bei mir abgelegt hat Wie sage ich der Funktion showAddress() ----> Hey, übenimm mal hier die Adresse, ich komme gleich wieder und bring dir die nächste Adresse, bis dahin solltest du wieder aufnahmefähig sein.... (Au weia...könnt ich es bloß richtig sagen, kann aber zuwenig Fremdsprachen)..

-> Ich bin die Funktion showAddress() und funktioniere bereits tadellos - und weiß nicht, was du jetzt eigentlich von mir willst.. Ich habe vorher alles aus dem HTML Formular erhalten ---> Du musst mir schon genau sagen, was du willst


Ufff - ich hoffe, das ich es jetzt besser geschrieben habe...

Ich weiß leider nicht, wie ich mein Problem noch genauer beschreiben kann..

Gruss
Sid61
 
Zuletzt bearbeitet:
Hi,

Du könntest per PHP eine zusätzliche Javascript-Funktion generieren, die Du dann onload aufrufst, also ungefähr so:

PHP:
<head>
   ...
   <script type="text/javascript">
      function showAllAddresses() {
<?php
   $sql = 'SELECT `id` , `type` , `postcode` , `state` , `address` FROM `jos_hp_properties` WHERE `approved` = 1' ;
   $query = mysql_query($sql);  
   while ($ergebnis = mysql_fetch_array($query, MYSQL_ASSOC)) { 
      $komplett=$ergebnis['postcode'] . $ergebnis['state'] . $ergebnis['address'];
      echo 'showAddress("' . $komplett . '");' . "\n";
   }
?>
   }

function showAddress(search) {
...
/** Die Zeile auskommentieren **/
/*var search = document.getElementById("search").value;*/
...
...
<body onload="showAllAddresses()">

Probier das mal...

LG
 
Hi Kuddeldaddeldu,

Hammer - Das habe ich gar nicht gewusst, das ich eine PHP-Datenbankabfrage direkt als Javascript Function bauen kann. Zuerst einmal ein fettes Danke - das hat wunderbar geklappt. Ich musste nur deinen String wieder gegen meinen austauschen..


$komplett="$ergebnis[postcode] $ergebnis[state] $ergebnis[address]";

Mit der von dir beschriebenen Zusammenstellung funktionierte es nicht, dann hat er mit den Adressdaten nix anfangen können - gab eine Fehlermeldung.. Ich nehme mal an, das deine String Variante dann die Ausgabe ohne Leerzeichen vornimmt und dann wäre die Adresse ja in einer Linie, was dann nicht interpretierte werden würde -

Beispiel von dir 12345testerstadttesteralleee 23 oder so ? 12345.testerstadt.testeralleee 23
Beispiel von mir 12345 testerstadt testerallee 23

Aber es geht und sogar echt gut, leider hat er jetzt trotz der funktionierenden Lösung nun ein neues anderes Problem.

Durch das auskommentieren der Zeile -

/*var search = document.getElementById("search").value;*/

wird beim Suchen der Wert nicht mehr erhöht. Das bedeutet, das alle Links dann eine 1 haben, statt fortlaufende Nummern bei der Suche.

Das unangenehme dabei ist, das er den ersten gefundenen Link zoomt und in die Mitte setzt. Da jetzt jede ankommende Adresse die Nummer 1 hat, springt die Map hin und her, bis der letzte punkt gesetzt wurde, denn für die Darstellung nimmt er ja nun an, das es die erste Adresse ist ;-)

Ich möchte deine Gutmütigkeit auch nicht überstrapazieren, aber hast du vielleicht eine Idee, wie ich nun den Wert in Javascript für jeden ankommenden Link um 1 erhöhen kann

Ich nehme an, das dies vorher durch .value; gesetzt wurde.

Aber dennoch, bedanke ich mich ganz doll bei dir, das hat mir wirklich sehr geholfen !
Falls wir uns nicht mehr **schreiben** - einen guten Rutsch in das neue Jahr !! (**auch an alle anderen**)
Gruss
sid61
 
Zuletzt bearbeitet:
Hi,

die Zeile, die Du da auskommentiert hast, liest nur die Adresse aus dem Formularfeld aus, das Du ja jetzt gar nicht mehr hast. Jetzt übergibst Du die Adresse als Parameter. Das liegt eher an der Funktion. Mit der kann ich aber nicht viel anfangen, hab' selbst noch nichts mit Google Maps gemacht. Wird aber wohl an der Schleife liegen, die geht ja bei jedem Punkt wieder bei 0 los. Da musst Du Dir halt überlegen, wie Du das steuern kannst, evtl. zusätzlicher Parameter.

LG
 
Zurück