Ist es möglich in php eine JavaScript Funktion auszulösen?


27.11.2022, 10:59

3 Antworten

Ich glaube du hast ein irrsinniges Konzept und du solltest diesen teil von Grund auf neu denken.

Ich kann mir vorstellen das es mit Jquery bzw Ajax (asynchrones nachladen von Inhalten) möglich ist, aber das ist mehr eine behelfslösung.

Dein Problem muss von Grund auf beseitigt werden.

Luna93136 
Fragesteller
 27.11.2022, 10:30

Ich habe Texte in einem accordion die schon perfekt angezeigt werden aber wenn php diese Texte aktualisiert schließt sich ja das accordion und das ist einfach nicht praktisch aber ich weiß absolut keine bessere Lösung da ich Anfänger bin und so etwas noch nie zuvor gemacht habe

1
Kiboman  27.11.2022, 10:34
@Luna93136

Warum muss der seitenwechsel denn mit PHP ausgelöst werden das ist wahrscheinlich der Fehler in deinem Konzept

0
NackterGerd  27.11.2022, 10:37
@Luna93136

Wieso

Du kannst doch beim aktualisieren des alten Status übernehmen wenn du diesen dem PHP mitliest.

Ohne diese Info könnte ja ein JS Aufruf auch dein Problem nicht lösen

Aber wieso werden überhaupt die Texte eines Acordeons aktualisiert.

0
TechPech1984  27.11.2022, 10:39
@Luna93136

das sich das accordeon schließt heist nur das du den status nicht speicherst , entweder browserseitig im cookie oder serverseitig in der session und dann in der ausgabe gleich als class mitangeben . oder wie schon erwähnt mit ajax im hintergrund arbeiten

0
Luna93136 
Fragesteller
 27.11.2022, 10:46
@Kiboman

Es ist kein Seitenwechsel, es wird nur ein Text aus einem anderen Dokument angezeigt

0
Kiboman  27.11.2022, 10:51
@Luna93136

Ja aber warum muss es von PHP ausgelöst werden.

Das macht überhaupt keinen Sinn.

Was veranlasst perpet dazu dass du möchtest das an seitenwechsel stattfindet ein Klick event?

Oder ist deine Frage eher wie du das Akkordeon nach einem neuen Laden der Seite an einer bestimmten Position wieder öffnen kannst?

0
elmex7  27.11.2022, 12:24
@Kiboman

Genau das (dein letzter Absatz) ist die Frage, die eigentlich auch schon "geklärt" wurde, siehe hier

Und @Luna93136 es heisst übrigens "DOCTYPE" und nicht "DOCKTYPE"

0

Natürlich kannst du mit PHP auch direkt diesen Wechsel zur Seite 2 ausführen

Php reagiert ja wohl bereits auf deinen Klick

Dazu brauchst du kein JS mehr

Luna93136 
Fragesteller
 27.11.2022, 10:44

und wie soll das möglich sein??

0
TechPech1984  27.11.2022, 10:51
@Luna93136

das wäre die header("location:..."); lösung im php , die du aber bei deinem problem gar nicht brauchst .

0
NackterGerd  27.11.2022, 10:52
@Luna93136

Dazu müsste man genauer verstehen wie deine Implementierung ist

Wie soll es funktionieren

Was möchtest du erreichen

<?php
header("Status: 301 Moved Permanently");
header("Location: http://www.beispiel.de");
exit;
?>

Das ist z.b. eine Weiterleitung in PHP

0
  1. HTTP ist stateless
  2. php wird ausgeführt und das ergebnis an den browser geschickt
  3. php wird beendet
  4. der server weiss dann von nichts .
  5. javascript für sich arbeite im browser
  6. php und javascript haben so gesehen gar nichts miteinander zu tun
  7. php kann aber javascript mit ausliefern , dieses läuft dann im browser
  8. eine seite die im browser geschlossen wurde ist weg , der ganze code ist weg
  9. über domain/port grenzen hinweg ist meist kein zugriff erlaubt , das verhindert die origin .
  10. damit das php weiss welcher user was tut und eben das stateless vom http protokoll zu überbrücken , gibt es sessions auf der serverseite , die durch eine ID im browser via cookie angelegt wird un bei jedem aufruf der webseite wird diese ID mitgeliefert , dann auf dem server mit dieser ID die gespeicherten daten geladen .

deine beschreibung lässt viele vermutungen zu aber keine eindeutige sache.

du kannst mit javascript im hintergrund eine anfrage an das php script stellen und dir daten zurückgeben lassen und mit einer funktion im browserjavascript darauf reagieren .

also am besten lädst du dein beispiel irgendo hoch udn erklärst genau wa du versuchst zu machen . vielleicht wird das dann so einduetig das man dir helfen kann .

in den meisten fällen scheitert aber dein konzept an dem stateless http und daran das eben php und browser komplett voneinander getrennt sind . wenn dein browser die seite bekommt ist das php schon lange beendet und der server weiss von nix .

willst du nur mit php auf eine andere seite , musst du mit einem

header("location:neueseite.php");

senden und den browser veranlassen diese seite zu laden . dabei darf vorher noch kein HTML etc ausgegeben worden sein .

NackterGerd  27.11.2022, 10:41

Gut zusammengefasst

Ohne wirklich zu wissen was der Fragesteller tatsächlich will

Gibt es viele Vermutungen und die unterschiedlichsten Ansätze die aber alle falsch sein können.

Warscheinlich gibt es für das Problem aber sogar eine einfache Lösung trotz dem Konstrukt.

Man muss nur wissen um wa es wirklich geht

0
Luna93136 
Fragesteller
 27.11.2022, 10:43

Irgendwie muss mein Vorhaben doch irgendwie gehen und wie lade ich mein Beispiel hoch? Bei meiner letzten Frage hatte ich damit auch schon Schwierigkeiten 😓

0
TechPech1984  27.11.2022, 10:47
@Luna93136

am besten nutzt du sowas wie pastebin.com lädst dort die einzelnen seiten hoch / html bzw php . und postest die einzelnen links . das können wir uns dann angucken und fachsimpeln , was die beste lösung wäre , oder obs eine andere lösung gibt .

0
TechPech1984  27.11.2022, 11:12
@Luna93136

ah ok , ja da hast du das problem , das du den status aufg dem server speichern misst , mach dich mal mit PHP sessions vertraut und übergebe dann entweder über post inputgelder oder über paramter an der url was der user aktuell nutzt und dann lade es direkt im php nach und füge es ein .

da gibt es verschiedene lösungen . du musst leider lernen was ich als antwort gestellt hab , die punkte die ich genannt habe , zeigen das grundsätzliche problem auf . deins erver weiss von nichts wenn du die seite neu hast , dem musst du aber mitteilen was der aktuelle zustand ist und das dein php diesen zustand erkennen muss und entsprechend die seite so ausgeben muss .

quasi musst du die parameter vorher abfragen und dann deine ausgabe anpüassen , das geht nicht so einfach mit php im html wie du es jetzt hast und vor allem micht ohne parameter .

0
Luna93136 
Fragesteller
 27.11.2022, 11:48
@TechPech1984

Jedes 7. Wort von dir klingt unbekannt, warum kann es nicht einmal einfach funktionieren mit onload oder so etwas.….wo sollte ich jetzt anfangen?

0
Luna93136 
Fragesteller
 28.11.2022, 23:32
@TechPech1984

Doofe Frage aber wäre es nicht eventuell einfacher gleich das ganze php beim Laden der Seite mit zu laden und den Button einfach weg zu lassen? Würde das gehen?

0
TechPech1984  29.11.2022, 05:52
@Luna93136

das problem ist, ds du dich erstmal mit der stuerung beschäftigen musst .

willst du einen bestimmten inhalt haben könntest du den z.b. so ansprechen

http://deinedomain.de/deineseite.php?artikel=1

in deinem php ließt du dann diesen parameter aus

$artikel = $_GET["artikel"];

jetzt weiss dein PHP welcher artikel geladen werden muss .

da aber server vergesslich sind, musst du das speichern in einer Session

pseudocode , da ich jetzt nicht dein accordeon kenne sondern hier nur die struktur darstellen will .

<?php
/* lade session */
session_start()
/* guck ob es schon ein artikel gibt , wenn nicht dann setze default auf 0 */
if (!isset($_SESSION["derartikel"])) {
   $_SESSION["derartikel"] = 0;
}
/* guck ob der user ein artikel gewählt hat , wenn ja dann trage das in die session ein */
if (isset($_GET["artikel"])) {
  $_SESSION["derartikel"] = $_GET["artikel"];;
}
/* binde artikel ein in deiner seite , entweder defaul 0 (keinen) oder vom webbesucher mit parameter bestimmt artikel z.b. 1 */
....
?>
<accordeon class="<?php if ($_SESSION["derartikel"] == 1) { echo " show "; }?>" ><?php echo "meinersterartikel";?></accordeon>
<accordeon class="<?php if ($_SESSION["derartikel"] == 2) { echo " show "; }?>" ><?php echo "meinzweiterartikel";?></accordeon>
.
.
.
0