Wie baue ich php Code in js Code ein?

rernanded

Erfahrenes Mitglied
Moin,

wie baue ich am besten php Code in js Code ein, welche Extension muß die Datei haben und wie baue ich das Ganze dann in eine html ein?

Zum Einbinden benutze ich noch: <script type="text/javascript" src="javascript.js"></script>

MONI
 
Guten Morgen Moni,
manche meinen, PHP-Code in Javascript einzubauen sei grundsätzlich böse und verboten aber das trifft nicht zu. Es erfordert nur etwas Überlegung und man muss sich darüber im Klaren sein, dass PHP auf dem Server ausgeführt wird, d. h. bevor die Seite an den Client bzw. den Browser ausgeliefert wird. Will man erst später, z. B. bei einem bestimmten Event wie Klick, PHP ausführen, muss man Ajax verwenden.
Welches von beiden trifft denn bei dir zu?
 
Zuletzt bearbeitet:
Ich hatte die Frage ehrlich gesagt erwartet. Und entscheide mich für Ajax. Meine Ausführung soll zB durch ein body onload bestimmt werden. Also prinzipiell durch "Aktionen" des Users mit/auf seinem Gerät/Browser.

MONI
 
Ich geb Dir auch mal Infos was genau ich vorhabe.

Aus einer list.txt müssen Werte in eine js übernommen werden. Ich dachte da an:

PHP:
<?php
  $fn = fopen("list.txt","r");
 
  while(! feof($fn))  {
    $result = fgets($fn);

foreach (array($result) as $WERT) {

//echo $WERT."<br />";

}
}

fclose($fn);
?>

Die Werte (es sind Namen) sehen so aus (Beispiele): mmeyer oder m.meyer oder m_meyer oder m-meyer
Keine Leerzeichen, am Ende der Zeile kein Komma oder Semikolon.
Sie sind alle Zeile für Zeile geschrieben.

Die Werte müssen nun hier ins js rein:

HTML:
var configProfile$WERT = {
  "profile": { "listName": '$WERT' },
  "domId": 'ex$WERT',
  "maxT": 1,
  "enableL": true,
  "showU": false,
  "showT": true,
  "showI": false,
  "showR": false,
  "lang": 'en' };
tFetcher.fetch(configProfile$WERT);

Vllt. gibt auch es eine andere Lösung (wahrscheinlich), aber diese hier habe ich im Sinn.

MONI
 
Zuletzt bearbeitet:
OK, danke für die Erklärung. Was ich noch nicht verstehe: In der Textdatei steht ja offenbar eine Liste von Namen, jeweils einer pro Zeile. Dieses configProfile$WERT ist jedoch ein Objekt und kein Array. Die Frage ist, ob jetzt für jedes Element in der Liste aus list.txt solch ein Objekt configProfile aufgebaut werden und jedes Mal die Funktion tFetcher.fetch aufgerufen werden soll?
 
Ja genau, für jeden Wert in der Liste (Namen) muß solch ein Objekt erzeugt werden.

Und jedes Mal muß die Funktion dazu aufgerufen werden. Was man aber vllt. auch vereinheitlichen kann, d.h. ev. nur mit einer Funktion für alle Objekte umsetzen kann. Dafür reicht jedoch mein Wissen nicht.
MONI
 
Zunächst einmal kannst Du das PHP stark vereinfachen: Es gibt die Funktion file, die eine zeilenorientierte Textdatei in ein Array einliest:
https://www.php.net/manual/de/function.file.php
Dieses kannst Du dann JSON-kodiert ausgeben:
PHP:
$list = file('list.txt');
echo json_encode($list);
Dann dies Array durch fetch vom Server holen und die Namen darin in einer Schleife abarbeiten:
Code:
        fetch('das-php-script.php').then(res => {
            // JSON dekodieren
            return res.json();
        }).then(res => {
            // Jetzt steht das dekodierte Array in res bereit
            console.log(res);
            res.forEach(item => {
                // item enthaelt den aktuellen Namen
                const configProfile = {
                    "profile": { "listName": item },
                    "domId": 'ex' + item,
                    "maxT": 1,
                    "enableL": true,
                    "showU": false,
                    "showT": true,
                    "showI": false,
                    "showR": false,
                    "lang": 'en'
                };
                tFetcher.fetch(configProfile);
            });
        });
(ungetestet)
 
Ich hab's hingekriegt. Danke sehr.
Habe noch ein anderes Problem.

Am Ende habe ich die Werte(=Namen) jeweils in einem Formular-input (type="text") stehen und zwar in Verbindung mit weiterem Text und einer Zahl. Jede Zahl ist nur einmal vorhanden. Die Zahlen können unterschiedlich viele Stellen haben.

1234567890
10987
2000111
789654321999000789

Die Werte(=Namen) plus Text plus Zahl sehen dann im input so aus (Beispiel):

HTML:
<input type="text" value="beispielsfirma.beispielsabt/Achim_Mayer/berichtstatus/1234567890" />

Sie unterscheiden sich nur anhand des Namens - Achim_Mayer
Und nur anhand der Zahl ganz hinten - 1234567890
Zu einem Namen kann es mehrere Zahlen geben.
D.h. Namen können mehrfach vorkommen, Zahlen jedoch nur einmal.
Es handelt sich um ganze Zahlen, also vorne keine 0, ohne Komma oder Punkt.

HTML:
<input type="text" value="beispielsfirma.beispielsabt/Achim_Mayer/berichtstatus/1234567890" />
<input type="text" value="beispielsfirma.beispielsabt/Beate_Schubert/berichtstatus/908070" />
<input type="text" value="beispielsfirma.beispielsabt/Achim_Mayer/berichtstatus/999123456" />

Ich muß in einem nächsten Schritt alle Zeilen so anordnen, dass eine Sortierung nur anhand der Zahl erfolgt.
Die Zeile mit der höchsten Zahl steht oben, die mit niedrigster unten. Der Name bleibt erstmal unberücksichtigt und ist für die Sortierung unwichtig.


Dazu würde ich das Formular abschicken (submit) um eine sortierte Liste auszugeben.

beispielsfirma.beispielsabt/Achim_Mayer/berichtstatus/1234567890
beispielsfirma.beispielsabt/Achim_Mayer/berichtstatus/999123456
beispielsfirma.beispielsabt/Beate_Schubert/berichtstatus/908070



MONI
 
Zuletzt bearbeitet:
Dazu würde ich das Formular abschicken (submit) um eine sortierte Liste auszugeben.
Verstehe ich so, dass Du das Formular abschicken willst, dann auf dem Server mit PHP entsprechend der Zahl sortieren und dann wieder eine Liste ausgeben willst? Zunächst hatte ich das so verstanden, dass du im Browser die Eingabefelder umsortieren willst. Das wäre genau so gut möglich.
In jedem Fall wirst Du eine Sortierfunktion mit Callback brauchen, entweder das sort von Javascript:
Array.prototype.sort() - JavaScript | MDN
oder, wenn Du es in PHP machst, usort. Und die Zahl müsstest Du mit Regex aus dem vollständigen String heraus ziehen.
 
Zurück