Ankündigung

Einklappen
Keine Ankündigung bisher.

[Erledigt] PHP innerhalb von JS verarbeiten

Einklappen

Neue Werbung 2019

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

  • [Erledigt] PHP innerhalb von JS verarbeiten

    Hi *,

    gibt es eine Möglichkeit PHP innerhalb von JS aufzurufen?

    Ich versuche gerade folgendes:

    PHP-Code:
    <?php
    [...]
       
    //Datenbankabfrage
        
    $array $wpdb->get_results("SELECT * FROM $table_name");
    [...]
     echo
    "
    [...etwas html...]
    <script>

    //Jetzt mein Problem: Ergebnisse aus Datenbank in JS verarbeiten

    var addressPoint = [];

    foreach (
    $array as $point){ 
       addressPoint = [
    $point->lat$point->lon]
    }
    "
    Ziel soll es sein, die Koordinaten (lat und lon sind je eine Spalte in der DB) an eine Map-Api (Leaflet Markercluster http://leafletjs.com/2012/08/20/gues...-released.html) zu übergeben, um pro Koordinate einen Pin in die Karte zu zeichnen.

    Ich vermische da ja PHP mit JS. Kann man das irgendwie lösen? Oder bin ich da komplett auf dem Holzweg mit meinem Versuch und ein anderer Lösungsansatz ist kluger?

    Für eure Geduld Danke vorab.

  • #2
    Da du in einem echo bist, musst du die Anführungszeichen schließen, die Variable dann einfügen und dann die Anführungszeichen wieder öffnen.
    Beispiel:
    PHP-Code:
    echo "Ich heiße " $name " und bin " $alter "Jahre alt."
    In deinem Fall müsste das so aussehen:
    PHP-Code:
    echo"<script>

    var addressPoint = [];

    foreach (" 
    $array " as " $point ") { 
       addressPoint = [" 
    $point->lat ", " $point->lon "];
    }"

    Ungetestet, müsste aber funktionieren, habe ich so ähnlich schon verwendet.

    Kommentar


    • #3
      Also ganz verstehe ich die Fragestellung nicht, aber es ist so:

      PHP läuft am (Web-)Server, dort wird dein PHP Code verarbeitet und der gibt früher oder später (besser "später", siehe "E-V-A") reinen lesbaren Queltext (HTML, CSS und JS) raus an den ClientBrowser, der das dann dort ausführt/interpretiert. Das ist das was du mit "Quelltext anzeigen" sehen kannst, das gibt PHP quasi raus.

      Dh, wenn du mit JS eine Latte von Werten zur Verwendung haben willst musst du in PHP dafür sorgen das die im QUelltext mit zum Browser kommt.. nicht vergessen JS läuft ja "erst" im Browser, da ist PHP schon fertig.

      Das ist die eine Sache, ich glaube du meinst das?

      Ergebnisse aus Datenbank in JS verarbeiten
      Dh du musst in PHP dafür sorgen das der Quelltext schon alles erhält an Infos, was JS dann später zum Ausführen im Browser braucht.

      Oder: Das andere wäre AJAX, kannst ja mal googeln, klassisch dafür zB das dynamische Nachladen von Inhalten etc..

      Siehe auch: http://php-de.github.io/jumpto/was-ist-php/
      The string "()()" is not palindrom but the String "())(" is.

      Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
      PHP.de Wissenssammlung | Kein Support per PN

      Kommentar


      • #4
        Mist. Dann habe ich doch ein anderes Problem...
        Anführungszeichen schließen und dann mit dem Punkt verbinden hatte ich schon versucht, dachte aber es wäre falsch. Es kommt nämlich immer der Fehler "Undefined variable 'point'".

        Schreibe ich Schleife in PHP, funktioniert sie einwandfrei (getestet, indem ich die Werte habe ausgeben lassen)
        PHP-Code:
            foreach ($beobachtungen as $point){
               
        $addressPoint = [$point->lat$point->lon];} 
        Aber die Variable als PHP außerhalb von JS zu erzeugen bringt mich nicht weiter, da die Werte in JS so vorliegen müssen
        Code:
        var addressPoints = [
        [50.02081116426473, 10.259530078546957],
        [50.0243367, 10.261201],
        [50.0238082, 10.2616034],
        [...]
        ];
        um dann mit JS die Marker in der Karte zu erzeugen
        Code:
        for (var i = 0; i < addresPoints.length; i++) {
             marker = new L.marker([addressPoints[i][0],addressPoints[i][1]).addTo(map);
        		}
        Was mach ich denn da falsch?

        Kommentar


        • #5
          Du musst den JS Code quasi als einen String zusammensetzen den JS dann sauber interpretieren kann.. so auf die Schnelle..

          PHP-Code:
          <?php

          $addressPoint 
          "var addressPoints = [\n";

          foreach (
          $beobachtungen as $point) {
              
          $addressPoint .= "[".$point->lat.", ".$point->lon."],\n";
          }  

          $addressPoint .= "];";

          echo 
          $addressPoint;
          Wäre noch intersant wo die Werte herkommen, wie sieht denn $beobachtungen aus? Kannst du da mal ein var_dump() oder print_r() auf $beobachtungen machen.


          Und, abgesehen davon hast du bei jedem Durchlauf den Wert überschrieben.

          PHP-Code:
          foreach (...) {
              
          $addressPoint =  // String setzen / überschreiben
              
          $addressPoint .=  // mit Punkt ist String ergänzen ("concat"), ist ident wie:
              
          $addressPoint $addressPoint .  

          The string "()()" is not palindrom but the String "())(" is.

          Debugging: Finde DEINE Fehler selbst! | Gegen Probleme beim E-Mail-Versand | Sicheres Passwort-Hashing | Includes niemals ohne __DIR__
          PHP.de Wissenssammlung | Kein Support per PN

          Kommentar


          • #6
            Zitat von hausl Beitrag anzeigen
            Du musst den JS Code quasi als einen String zusammensetzen den JS dann sauber interpretieren kann..
            Vielen vielen Dank. Es funktioniert! Ich hab mir die komplette Woche echt die Zähne daran ausgebissen. Ich war auch schon mal bei
            PHP-Code:
            $addressPoint;

            foreach (
            $beobachtungen as $point) {
                
            $addressPoint = [$point->lat$point->lon];

            Code:
            for (var i = 0; i < $addressPoints.length; i++) {...}
            Was aber auch nicht funktioniert hat.

            Zitat von hausl Beitrag anzeigen
            Wäre noch intersant wo die Werte herkommen, wie sieht denn $beobachtungen aus?
            Das ist die Abfrage über die Wordpress spezifische Datenbank-Klasse wpdb (http://codex.wordpress.org/Class_Reference/wpdb). Also quasi $myrows = $wpdb->get_results( "SELECT * FROM mytable" );
            Zitat von hausl Beitrag anzeigen
            Und, abgesehen davon hast du bei jedem Durchlauf den Wert überschrieben.

            PHP-Code:
                $addressPoint .=  // mit Punkt ist String ergänzen ("concat"), ist ident wie:
                
            $addressPoint $addressPoint .  

            Auch das war völlig richtig und dafür ein dickes Dankeschön. Das werde ich mir merken.

            Kommentar


            • #7
              Hallöchen,

              in solchen Fällen ist es absolut empfehlenswert mit json_encode zu arbeiten:

              PHP-Code:
              <?php

              $array 
              = [
                  [
              'lat' => 1'lng' => 1],
                  [
              'lat' => 2'lng' => 2],
                  [
              'lat' => 3'lng' => 3]
              ];

              $string 'Hello World';

              printf('var array = %s;'json_encode($array));
              printf('var string = %s;'json_encode($str));
              Ausgabe:
              Code:
              var array = [{"lat":1,"lng":1},{"lat":2,"lng":2},{"lat":3,"lng":3}];
              var string = "Hello World";
              Viele Grüße,
              lotti
              [SIZE="1"]Atwood's Law: any application that can be written in JavaScript, will eventually be written in JavaScript.[/SIZE]

              Kommentar

              Lädt...
              X