Henrique Köhler: javascript Werte nach HTML Formular

Hallo zusammen,

ich bin ein deutsch-brasilianischer Erfinder und habe ein Orientierungssystem entwickelt das auf imaginären Uhren basiert, siehe Video www.volksnav.de/aSimpleCircle.

Nun ein neues Problem: die Ergebnisse einer Leitzahlen-Suchmaschine werden bisher als Text angezeigt, siehe www.volksnav.de/searchYaounde (klicke search knopf). Nun sollen sie aber auf einer Karte zu sehen sein u. z. mittels javascript:

L.marker1([lat1, lon1]).addTo(map).bindPopup(name1).openPopup();
L.marker2([lat2, lon2]).addTo(map).bindPopup(name2).openPopup();

usw. Es können viele Ergebnisse sein.

Problem: Aufrufe wie

var name1 = "<?php echo json_encode($name1); ?>";

erscheinen korrekt als Text, werden aber nicht auf der Karte übernommen. Der Name im marker ergibt "null", siehe www.volksnav.de/searchWatchRose (klicke search). Eventuell hat jemand eine Ahnung woran es liegen kann, somit wäre Folgendes hinfällig.

Manuelle Testlösung: mit

<p id="name1">Bois museum</p>

und

var inhalt1 = document.getElementById('name1');
L.marker([testLat, testLon]).addTo(map).bindPopup(inhalt1).openPopup();

erscheint tatsächlich "Bois museum" wenn man den marker anklickt.

Die Frage ist: wie macht man aus javascript Werte HTML Formulare? Ich habe viel darüber gelesen, auch über hidden forms, nun bin ich ganz konfus. Ich nehme an, jemand kann mir den entscheidenden Hinweis geben ohne den kompletten code durchforsten zu müssen. Danke im Voraus.

Henrique

Edit Rolf B: Code mit ~~~-Blöcken als Code markiert

  1. Hallo Henrique,

    in deinem generierten Quellcode steht

    L.marker([poleLat+.03, poleLon-.03], {icon: streetSmartMarker}).addTo(map).bindPopup("null").openPopup();
    

    Leaflet tut also genau das, was du ihm gesagt hast. Wenn Du kein separates <p> Element anlegen willst, das danach ins Leaflet gesaugt wird, müsste als Argument von bindPopup wohl ein HTML String mit dem Sourcecode für dieses <p> Element erscheinen. Wenn da "null" steht, war in der Variablen, die Du da PHP seitig genutzt hast, ggf. nichts drin.

    Der Unterschied zwischen JavaScript- und PHP-Variablen ist Dir hoffentlich klar.

    Das hier ist auch nicht ganz gar:

    var name1 = "<?php echo json_encode($name1); ?>";

    json_encode ist der empfohlene Weg, um PHP Strings für JavaScript zu codieren, richtig. Aber: die Anführungszeichen bringt json_encode schon mit, die musst Du weglassen. Andernfalls dürfte das Script mit einem Error abbrechen.

    Und wenn, dann solltest Du auch die <?= ?> Syntax verwenden, das ist kompakter:

    var name1 = "<?= json_encode($name1); ?>";

    Es kann nun noch sein, dass Leaflet tatsächlich ein HTML Element erwartet und mit einem einfachen Text nicht klarkommt. Probier also im Zweifelsfall mal dies:

    var name1 = "<p>" + <?= json_encode($name1); ?> + "</p>";

    (Edit: Syntaxfehler berichtigt)

    Rolf

    --
    sumpsi - posui - obstruxi
    1. Hallo Rolf,

      Es kann nun noch sein, dass Leaflet tatsächlich ein HTML Element erwartet und mit einem einfachen Text nicht klarkommt. Probier also im Zweifelsfall mal dies:

      nein.

      https://blog.selfhtml.org/2019/jan/13/einstieg-in-leaflet

      https://leafletjs.com/reference.html#popup → ▶ Options inherited from DivOverlay

      Gruß
      Jürgen

      1. Hallo JürgenB,

        nein.

        Stimmt. Was ich schrieb, wäre ein Syntaxfehler gewesen. Wie ich selbst schrieb, erzeugt json_encode die Anführungszeichen mit. Wenn überhaupt, dann also so:

        var name1 = "<p>" + <?= json_encode($name1); ?> + "</p>";
        

        Oder bezog sich Dein

        nein.

        darauf, dass man kein <p> Element braucht und einfacher Text möglich ist?

        Rolf

        --
        sumpsi - posui - obstruxi
        1. Hallo Rolf,

          Oder bezog sich Dein

          nein.

          darauf, dass man kein <p> Element braucht und einfacher Text möglich ist?

          ja. Laut Doku darf ins Popup HTML oder Text oder auch eine Funktion, die HTML oder Text returnt.

          Oder prakmatischer: Ins Popup darf alles, was Leaflet dann in ein div packt.

          Gruß
          Jürgen

          1. Hallo Rolf, hallo Jürgen,

            ich hatte schon vorher alles mögliche ausprobiert: mit/ohne <p>, mit/ohne "" etc. Die einzige Wirkung auf der Karte war: statt "null" erscheint nichts und die Textfläche wird kleiner. Die kompakte Schreibweise <?= hat auch nichts gebracht.

            Der Text unterhalb der Karte wird immer korrekt mit echo erzeugt: Treffernummer, name, lat und lon. Auch wenn ich diese BeweisEchos weg lasse, ändert sich nix an der Problematik.

            Ich weiss nicht was den Text "null" generiert hat. Irgendwo habe ich gelesen dass es daran liegen kann dass zum benötigten Zeitpunkt die Information nicht mehr verfügbar ist. Any ideas?

            1. Hallo Henrique,

              ich schrieb neulich:

              Der Unterschied zwischen JavaScript- und PHP-Variablen ist Dir hoffentlich klar.

              Ich beginne, diese Hoffnung zu verlieren. Du hast programmiert (bzw. SOLLTEST programmieren - in deinem Code stehen Anführungszeichen die zu einem JavaScript-Fehler führen würden):

              var name1 = <?php echo json_encode($name1); ?>;
              

              In dieser Zeile generierst Du JavaScript. Im JavaScript wird eine Variable namens name1 definiert, und sie bekommt einen Wert zugewiesen. Diesen Wert holst Du aus der PHP Variable $name1.

              Damit sinnvolles JavaScript entsteht, muss $name1 in PHP einen sinnvollen Wert haben. Ist das der Fall? Hast Du das überprüft? Wenn $name1 nichts zugewiesen wurde, generiert PHP diese JavaScript-Zeile:

              var name1 = null;
              

              Das ist syntaktisch korrekt, aber eben leer.

              Wenn ich mir deinen Seitenquelltext anschaue, sehe ich im generierten Script genau sowas:

              <script>
              var treffer = null; 
              
              //var name1 = null;
              
              //var name1 = "<p>" + null + "</p>";
              var name1 =  null ;
              
              var name2 = "null";
              var lat1 = null;
              

              Es spricht alles dafür, dass $name1 im PHP nichts enthält.

              dass es daran liegen kann dass zum benötigten Zeitpunkt die Information nicht mehr verfügbar ist.

              Oder die Information ist nicht auf dem richtigen System verfügbar. Bei Dir laufen zwei Programme ab. Das erste ist das PHP Programm, es läuft auf deinem Server. Es generiert die HTML Seite und es generiert das JavaScript darin. Das JavaScript wird auf deinem Server aber nicht ausgeführt, d.h. Variablen, die das JavaScript-Programm verwendet, gibt's im PHP nicht.

              Die HTML Seite wird in den Browser übertragen, auf deinem PC. Und dort läuft das zweite Programm, die diversen <script>-Blöcke. Die Scripte wissen nur das, was in der HTML Seite steht. Variablen des PHP Programm gibt's dort nicht. Es gibt nur das, was das PHP-Programm in die Seite hineingeschrieben hat.

              Eine Variable brauchst Du übrigens auch gar nicht. Du kannst den Quelltext für das Popup direkt in den bindPopup-Aufruf hineingenerieren. Statt relativ zu poleLat und poleLon kannst Du auch gleich die richtigen Koordinaten ins Script schreiben.

              Mal angenommen, du hast ein Array mit absoluten Breiten- und Längenwerten, und Popup-Texten. Zu Demozwecken initialisiere ich dieses Array einfach mal:

              $trefferListe = [ 
                 [ "lat" => 3.8616, "lon" => 11.5158, "bezeichnung" => "National museum" ]
                 [ "lat" => 3.8714, "lon" => 11.5145, "bezeichnung" => "Bois St.Anastasie" ]
              ];
              
              // Jetzt PHP Modus schließen und <script> Block als Text mit
              // eingestreuten <?= ?> ausgeben.
              // NICHT mit echo arbeiten, das gibt Anführungszeichengulasch!
              // Für die foreach-Schleife die alternative Syntax mit 
              // foreach (): / endforeach nutzen, um kein } zu übersehen.
              
              ?>
              <script>
              <?php foreach ($trefferListe as $treffer): ?>   
                 L.marker( [ <?= $treffer["lat"] ?>, <?= $treffer["lon"] ?> ], 
                           { icon: streetSmartMarker })
                 .addTo(map)
                 .bindPopup(<?= json_encode($treffer["bezeichnung"]) ?>)
                 .openPopup();
              <?php endforeach; ?>
              </script>
              <?php
              // PHP wieder einschalten und weiter im PHP Programm
              

              Keine einzige JavaScript-Variable nötig!

              Wenn deine Trefferliste nur relative Positionen enthält, solltest Du sie bereits im PHP Script in absolute Positionen umrechnen. Das ist besser, als im JavaScript nochmals zu rechnen, wie Du es jetzt tust, denn den generierten JavaScript Quelltext siehst Du als Seitenquelltext. Da kannst Du relativ einfach schauen, ob die richtigen Werte entstanden sind und brauchst nicht im JavaScript zu debuggen.

              Rolf

              --
              sumpsi - posui - obstruxi
              1. Hallo,

                var name1 = <?php echo json_encode($name1); ?>;
                

                In dieser Zeile generierst Du JavaScript. Im JavaScript wird eine Variable namens var1 definiert,

                hier ist von @Rolf vermutlich nicht var1, sondern name1 gemeint…

                Gruß
                Kalk

                1. Hallo Tabellenkalk,

                  jo, hatte ich bemerkt bevor ich deinen Kommentar sah. Danke trotzdem.

                  Rolf

                  --
                  sumpsi - posui - obstruxi
                  1. Hallo Rolf,

                    besten Dank für Deine enorme Mühe. Ich gebe zu dass ich ein Zauberlehrling bin, aber ich wusste dass PHP sich in der Ferne abspielt und dass ich keine variablen brauche. Muss noch lernen mit debuggers zu arbeiten.

                    Wie schon erwähnt, ich hatte die PHP Werte überprüft, sie erschienen alle bei mir korrekt als Text unter der Karte, nur nicht AUF der Karte.

                    Um den Fehler suchen zu können, konzentrierte ich mich nun auf einen einzigen Erfolg:

                    PHP:

                    $name = ... ;
                    // kommt von der Suchmachine

                    // nur zur Überprüfung // echo $name;
                    // gibt es 2 Treffer, erscheinen unter der Karte 2 Namen, gibt es 3 erscheinen 3 usw. // für die Findung der Lösung machte es bisher kein Unterschied ob dieses echo aktiv oder kommentiert ist.

                    script:

                    L.marker([poleLat, poleLon-.02], {icon: streetSmartMarker}).addTo(map).bindPopup("blabla").openPopup(); L.marker([poleLat, poleLon-.05 ]).addTo(map).bindPopup(<?= json_encode($name) ?>).openPopup();

                    Und wieder erscheint kein $name auf dem marker. Klickt man den blabla marker, erscheint blabla. Bitte bestätigen: auf www.volksnav.de/searchWatchRose, klicke search

                    Besonderheiten:

                    • vertausche ich beide Zeilen, erscheint der blabla marker nicht.
                    • <?php endforeach; ?> lässt sich nicht kommentieren. //<?php endforeach; ?> hat negative auswirkungen

                    Any ideas?

                    1. Hallo Henrique,

                      Und wieder erscheint kein $name auf dem marker.

                      Nein, kann ja auch nicht, weil Du dieses JavaScript generierst.

                      L.marker([poleLat, poleLon-.05 ])
                       .addTo(map).bindPopup(null).openPopup();  //null  
                      

                      D.h. der Fehler ist auf der PHP Seite. Wenn Du das Script für den Marker ausgibst, steht in $name nichts drin.

                      Den Grund dafür kann ich Dir nicht nennen. Du offenbarst dein PHP ja nicht.

                      <?php endforeach; ?> lässt sich nicht kommentieren. //<?php endforeach; ?> hat negative auswirkungen

                      Lieber Herr Zauberlehrling, wenn Du den //-Besen im HTML statt im PHP schwingst, kann das ja auch keinen PHP Kommentar ergeben.

                      Wenn Du diese Schleife auskommentieren willst

                      <?php foreach ($xyz as $x): ?>
                         <li>$x ist <?= $x ?></li>
                      <?php endforeach; ?>
                      

                      dann musst Du aufpassen, weil das 3 PHP Segmente sind und Du möchtest vermutlich auch nichts vom Schleifenrumpf ausgeben. Es sollte so aussehen:

                      <?php /* foreach ($xyz as $x): ?>
                         <li>$x ist <?= $x ?></li>
                      <?php endforeach; */ ?>
                      

                      Damit kommentierst Du von foreach bis endforeach alles aus, inclusive des Ausstiegs aus PHP. Natürlich darf dein HTML kein */ enthalten, sonst wird der Kommentar vorzeitig beendet. Aber das ist wohl unwahrscheinlich.

                      Rolf

                      --
                      sumpsi - posui - obstruxi
                      1. Rolf,

                        der mySQL code umfasst mehrere verschachtelte Dateien und Ordern, das will ich niemandem zumuten wenn es nicht nötig ist.

                        Wäre es nicht Beweis genug wenn durch echo-Befehle im PHP die Ergebnisse bei mir richtig erscheinen, nur nicht auf der Karte? Gäbe es eine andere Methode, die PHP Werte zu überprüfen?

                        Henrique

                        1. Hallo Henrique,

                          natürlich kannst du echo verwenden, um Dir PHP Prüfwerte ins HTML zu schreiben.

                          Aber wie ich schon schrieb: wenn im PHP steht

                          ...bindPopup(<?= json_encode($name1) ?>)...
                          

                          und im Javascript daraus dies wird

                          ...bindPopup(null)...
                          

                          dann ist der Beweis schon erbracht, dass in $name1 kein Inhalt steht und Du musst von da aus rückwärts schauen, wo $name1 einen Wert herhaben sollte und dann herausfinden, warum das nicht so ist.

                          Rolf

                          --
                          sumpsi - posui - obstruxi
                          1. Hallo Rolf,

                            diese Anfrage hat sich schon deswegen gelohnt weil ich endlich die Notwendigkeit sah mich etwas näher mit dem debugger zu befassen.

                            Um die Fehlerquelle/Lösung finden zu können habe ich die Ergebnis-Seite möglichst original belassen, dafür eine neue Seite erzeugt für die die das Ergebnis doch auf einer Karte sehen wollen.

                            Aktuelles Ziel ist es, einen einzigen Namen auf derDieDas Karten-popUp zu bekommen. Wenn das klappt, ist alles andere easy.

                            So sieht es im Moment aus:

                            index.html:

                            Bitte in www.volksnav.de/searchWatchRose "search" klicken, führt zu "main.tpl"


                            main.tpl

                            Die "volksnav.php" liefert hierher die Treffer wie gehabt mit

                            for($n = 0; !empty($query[$n]); $n++) { $name = $query[($n+1)]; $name1 = $query[(1)]; ... }

                            Mit testweise echo $name; oder $name1; erscheinen die Namen ganz korrekt auf der obersten Zeile. Also die Ergebnisse sind nicht null.

                            Bitte show map klicken


                            showMap.html:

                            popup ist nach wie vor leer.

                            Jede andere Schreibweise als mit

                            L.marker([poleLat, poleLon-.05 ]).addTo(map).bindPopup("<?php echo json_encode($name); ?>").openPopup();

                            wird mit Kartenentzug und "expected expression, got '<' " bestraft. Auch dasselbe mit $name1 wird seltsamerweise bestraft.

                            Any ideas? Doch javascript nach HTML Formular?

                            Henrique

                            1. n'Abend,

                              ich fürchte, ich muss mal deutlich werden, auch auf die Gefahr, dass es weh tut.

                              Mein Eindruck ist, dass dir jede Menge elementares Grundwissen fehlt. Sowohl über HTML, als auch über Javascript. Und erst recht über HTTP, PHP und das Zusammenspiel von Client (Browser) und Webserver.

                              Bitte in www.volksnav.de/searchWatchRose "search" klicken, führt zu "main.tpl"

                              Nein. Das führt zu /searchWatchRose/php/volksnav.php, was für mich schon irgendwie seltsam aussieht.

                              Bitte show map klicken


                              showMap.html:

                              popup ist nach wie vor leer.

                              Welches Popup? Ich sehe da nur ein fest leeres weißes Fenster mit einem Link "Next search".

                              So. Sowohl /searchWatchRose/php/volksnav.php als auch /searchWatchRose/showMap.html enthalten völlig kaputtes HTML. Falsche Verschachtelungen, fehlende Start- oder Endtags, td-Elemente außerhalb einer Tabelle und ähnliche Kapitalfehler. Außerdem ...

                              Bitte show map klicken

                              ... ist das nur ein einfacher Link. Woher soll die augerufene Ressource die bisher ausgewählten Daten bekommen? Und da sie die Endung .html enthält, wird darin auch kein PHP-Code ausgeführt.

                              Du scheinst zwei fatalen Irrtümern aufzusitzen:

                              • Du glaubst, dass bei aufeinanderfolgenden HTTP-Requests der zweite etwas vom ersten wüsste. Das ist nicht der Fall. Jeder Request ist eine in sich abgeschlossene Angelegenheit. Wenn er zum Liefern der gewünschten Antwort irgendwelche vorher ermittelten Daten braucht, muss man die aktiv zur Verfügung stellen. Zum Beispiel als Formulardaten, als URL-Parameter oder in einer PHP-Session.
                              • Es sieht so aus, als erwartest du, dass du Javascript und PHP miteinander verzahnen kannst. Das ist falsch, weil beide in völlig verschiedenen Universen ausgeführt werden.

                              Wie läuft denn der Client-Server-Dialog eigentlich ab?

                              • Der Client (Browser) fragt irgendeine Ressource beim Server an. Ist es eine statische HTML-Datei, liefert der Server als Response einfach den Dateiinhalt; ist es ein PHP-Script, führt der Webserver es aus und sendet dann als Response die Ausgabe des PHP-Scripts.
                              • Der Client fällt über die Antwort her, interpretiert den HTML-Code darin, baut daraus das DOM auf (und wertet außerdem eingebundene Stylesheets aus). Außerdem sieht er nach, ob Javascript enthalten ist. Das führt er dann aus.

                              Wichtig zu verstehen ist dabei: Die Ausführung von PHP auf dem Server und die Ausführung von Javascript beim Client erfolgen nacheinander und völlig unabhängig voneinander! Das solltest du bitte verinnerlichen.

                              Einen schönen Tag noch
                               Martin

                              --
                              Dass Dr. Oetker in Amerika eine Puddingmine entdeckt und damit seine ersten Millionen gemacht hat, ist nur ein Gerücht.
                              1. Hi,

                                ... ist das nur ein einfacher Link. Woher soll die augerufene Ressource die bisher ausgewählten Daten bekommen? Und da sie die Endung .html enthält, wird darin auch kein PHP-Code ausgeführt.

                                Das kannst Du nicht wissen - der zuständige Server kann durchaus so konfiguriert sein, daß er auch bei Resourcen, deren URL auf .html endet, php ausführt.

                                cu,
                                Andreas a/k/a MudGuard

                                1. Hallo MudGuard,

                                  der zuständige Server kann durchaus so konfiguriert sein, daß er auch bei Resourcen, deren URL auf .html endet, php ausführt.

                                  ist er aber nicht, denn da steht im HTML

                                  L.marker([poleLat, poleLon-.05 ]).addTo(map).bindPopup("<?php echo json_encode($name); ?>").openPopup();  
                                  

                                  und weil der Inhalt des bindPopup-Parameters kein gültiges HTML ist, macht Leaflet daraus

                                  <div class="leaflet-popup-content-wrapper">
                                    <div class="leaflet-popup-content" style="width: 51px;">
                                      <!--?php echo json_encode($name); ?-->
                                    </div>
                                  </div>
                                  

                                  (Zeilenumbrüche und Einrückungen vor mir, Leaflet hat das alles hintereinander weg rausgehauen)

                                  Die Frage, die immer noch ungeklärt ist, lautet: Warum ist während der PHP Ausführung $name leer. Das ist ein serverseitiges Problem.

                                  Rolf

                                  --
                                  sumpsi - posui - obstruxi
                              2. Hallo Martin,

                                die Suchmaschine hat ein befreundeter SW-Entwickler definiert. Funktioniert perfekt www.volksnav.de/search. Er hat sich allerdings in Thailand unsterblich verliebt und hat sich zurückgezogen.

                                So musste ich nach jeder neuen PHP Version selbst herausfinden was ich im PHP aktualisieren muss.

                                Dabei habe ich gelernt dass kosmetische Änderungswünsche für die Ergebnissseite in der templates/main.tpl vorgenommen werden müssen.

                                Habe für Dich einen 2. Knopf in der main.tpl eingeführt der zu showMap2.html führt, die einen popUp "blabla" zeigt, stimmt's?

                                Nebenbei: die Suchmaschine und das Video www.volksnav.de/aSimpleCircle hat zu der weltweit ersten Public Private Partnership geführt die nicht auf public properties sondern auf intellectual properties basiert. Nota bene: ich war noch nie in Africa und musste niemandem schmieren.

                                Das Ministerium für Innovationen hat nun das National Cartographic Institute damit beauftragt das verständlicherweise Karten sehen will.

                                Nun wieder die Anfangsfrage: wie bekomme ich JS-Werte in einem HTML Formular? Würde für das Problem lösen bis endlich etwas Geld eingeht.

                                Henrique

                                1. Hallo Henrique,

                                  Habe für Dich einen 2. Knopf in der main.tpl eingeführt der zu showMap2.html führt, die einen popUp "blabla" zeigt, stimmt's?

                                  Ja, stimmt.

                                  Ist das hilfreich? Nö. Weil das ja eine Konstante im Script ist (nehme ich an).

                                  Nun wieder die Anfangsfrage:

                                  Warum ist $name oder $name1 in PHP leer? Wenn da was drin stünde, würdest Du auch im Popup was sehen. Die Übertragung ins JS würde so, wie Du es gemacht hast, funktionieren.

                                  Rolf

                                  --
                                  sumpsi - posui - obstruxi
                                2. Hallo,

                                  Habe für Dich einen 2. Knopf in der main.tpl eingeführt der zu showMap2.html führt, die einen popUp "blabla" zeigt, stimmt's?

                                  nein, unverändert: Ein weißes Fenster, das nichts weiter enthält als einen Link "Next search" etwa auf halber Fensterhöhe (Firefox 109.0 unter Windows 10).

                                  Einen schönen Tag noch
                                   Martin

                                  --
                                  Dass Dr. Oetker in Amerika eine Puddingmine entdeckt und damit seine ersten Millionen gemacht hat, ist nur ein Gerücht.
                                  1. Hallo Martin,

                                    was machst Du denn da? Gleicher Fuchs, gleiches OS (plusminus Updates), und ich sehe eine Karte mit "blabla" drin.

                                    Diese[r] URL: http://www.volksnav.de/searchWatchRose/showMap2.html

                                    Diese Seite ist, da statisch und vermutlich im HTML editiert, zwar wenig hilfreich, aber das schrub ich ja schon.

                                    Rolf

                                    --
                                    sumpsi - posui - obstruxi
                                    1. Hallo Rolf,

                                      was machst Du denn da? Gleicher Fuchs, gleiches OS (plusminus Updates), und ich sehe eine Karte mit "blabla" drin.

                                      Diese[r] URL: http://www.volksnav.de/searchWatchRose/showMap2.html

                                      jetzt, über deinen Link aus dem Forum heraus aufgerufen, ist das bei mir auch so.
                                      Und jetzt erkenne ich auch den entscheidenden Unterschied!

                                      Henrique hat keinen echten Link notiert, da fehlte das Protokoll. Da habe ich intuitiv https: ergänzt. Nur http:, also unverschlüsselt, bekomme ich das erwartete Ergebnis!

                                      Und ja, bei der ersten Variante ist das Popup leer, das kann ich jetzt auch bestätigen.

                                      Einen schönen Tag noch
                                       Martin

                                      --
                                      Dass Dr. Oetker in Amerika eine Puddingmine entdeckt und damit seine ersten Millionen gemacht hat, ist nur ein Gerücht.
                                      1. Hallo zusammen,

                                        Und ja, bei der ersten Variante ist das Popup leer, das kann ich jetzt auch bestätigen.

                                        was daran liegt, das im Quelltext

                                        L.marker([poleLat, poleLon-.05 ]).addTo(map).bindPopup("<?php echo json_encode($name); ?>").openPopup();  
                                        

                                        steht, und Leaflet daraus

                                        <div class="leaflet-popup-content" style="width: 51px;"><!--?php echo json_encode($name); ?--></div>
                                        

                                        macht. Aber das wurde ja auch schon angemerkt.

                                        @Henrique Köhler: Kümmer dich um das PHP, das $name ausgibt. Es scheint nicht interpretiert zu werden.

                                        Gruß
                                        Jürgen

                                        1. Habe nun den PHP sehr vereinfacht. Es wird nur noch gewünscht:

                                          $name1 = $query[(1)]; echo $name1;

                                          Auf der main.tpl erscheint oben name1 und unten die schlaue Leitzahl.

                                          Verändert man die Anfrage von sector m8 auf sector m10, erscheint ein anderer Name und eine andere Leitzahl.

                                          Ich sehe das als Beweis dafür dass die Informationsgewinnung korrekt ist. Diese Fehlersuche scheitert.

                                          Plan B: wie könnte man name1 in einem Formular sichern?

                                          1. Hallo Henrique,

                                            Du verlinkst von volksnav.php nach showMap.html. Wie soll denn in eine statische HTML Datei das Suchergebnis hineinkommen? Generierst Du im Verlauf der Suche die showMap.html jedesmal neu?!

                                            Hattest Du in früheren Versionen nicht die Kartenanzeige direkt auf der Seite mit der Trefferliste? Also als Teil der Ausgabe von php/volksnav.php? Dann hättest Du auch die Variable zur Verfügung, die Du da oben auf volksnav.php ausgibst.

                                            Rolf

                                            --
                                            sumpsi - posui - obstruxi
                                            1. Die ältere integrierte Version zeigte dasselbe Problem: Abfragewerte zu einem bestimmten Zeitpunkt korrekt, erscheinen aber nicht auf dem popUp. Ich werde es nochmals versuchen.

                                              Die neue Idee ist, das System zu entlasten: die Karte wird nur auf Kommamdo gezeigt, was oft nicht passiert weil man das Resultat verstanden hat: das gewünsche ist nicht dabei, die Suchkriterien Sektor/Radius/Klasse müssen geändert werden.

                                              Mein Verstand sagt: $name1 geht nicht verloren, ich müsste es auch im showMap abrufen können.

                                              Vielleicht doch mit Formular?

                                              1. Hallo,

                                                Mein Verstand sagt: $name1 geht nicht verloren, ich müsste es auch im showMap abrufen können.

                                                Vielleicht doch mit Formular?

                                                Kannst du bitte mal ganz genau den Ablauf beschreiben?!

                                                was soll wann und vorallem wo passieren. Ich habs bisher nicht verstanden bzw. hab den Eindruck, du versuchst mit Javascript PHP auszuführen…

                                                Gruß
                                                Kalk

                                                1. Hi,

                                                  hab den Eindruck, du versuchst mit Javascript PHP auszuführen…

                                                  nein, er ruft über einen Link eine statische HTML-Ressource auf, in der kein PHP interpretiert wird (was an Fragmenten von PHP-Code im Seitenquelltext erkennbar ist). Und selbst wenn dort PHP ausgeführt würde, wäre es immer noch ein neuer, unabhängiger Request, der nichts von den Variablen eines vorhergehenden Scriptaufrufs weiß - dann müsste man die relevanten Daten z.B. per URL-Parameter oder mit einer Session übergeben. Ein Formular ginge auch, wäre aber von hinten durch die Brust ins Knie.

                                                  Der eigentliche Knackpunkt ist aber, dass in der Ressource, die die Karte und das Popup anzeigen soll, kein PHP ausgeführt wird.

                                                  Das haben wir aber schon einige Male versucht zu erklären. Bisher erfolglos.

                                                  Einen schönen Tag noch
                                                   Martin

                                                  --
                                                  "Haben Sie meinen Hund gerade dämlich genannt? Unerhört!! Mein Hund ist intelligenter als ich!"
                                              2. Hallo Henrique Köhler,

                                                Mein Verstand sagt: $name1 geht nicht verloren, ich müsste es auch im showMap abrufen können.

                                                Vielleicht doch mit Formular?

                                                Wenn Dein Verstand mal aufnehmen würde, was Du hier lesen kannst, dann würde er Dir sagen: Wenn $name1 in volksnav.php gesetzt wird, geht es in dem Moment verloren, wenn volksnav.php endet. Aufbewahren kannst Du es:

                                                1. In einer PHP Session. Dann muss showMap.html aber ein PHP Script sein, das die Session lesen kann.
                                                2. In der HTML Seite, die von volksnav.php ausgegeben wird. Hier gibt es unterschiedliche Möglichkeiten, weiter vorzugehen:
                                                  1. PHP generiert Script, das die Treffer im localStorage unterbringt. In showMap.html ist JavaScript enthalten, das den localStorage ausliest und die Marker erzeugt.
                                                  2. PHP generiert Script, das die Karte auf der von volksnav.php erzeugten HTML Ausgabe auf Knopfdruck einfügt.
                                                  3. PHP generiert für den ShowMap-Link eine URL, die sämtliche Treffer als URL Parameter codiert. Das ist nicht trivial, dafür muss man sich eine Struktur überlegen. Der Link sähe dann bei 3 Treffern so aus: showMap.html?match=xxx&match=yyy&match=zzz. xxx, yyy und zzz sind codierte Treffer (Name und Ort). In showMap.html kannst Du mit dem folgenden Code alle Treffer als Array zurückbekommen. Aber das ist wirklich nicht trivial.
                                                   let myUrl = new URL(location);
                                                   let matches = myUrl.searchParams.getAll("match");
                                                

                                                Geht alles. Variante 2.3 hätte den Vorteil, dass man eine URL hat, die man teilen kann und Treffer anzeigt. Ist aber mühsam zu bauen.

                                                Ein Formular setzt voraus, dass serverseitig ein showMap.php läuft, nicht showMap.html. In dem Fall kämest Du damit weiter.

                                                Rolf

                                                --
                                                sumpsi - posui - obstruxi