Php javascript

Liebe/-r Experte/-in,
ich habe mal ein Problem. Und zwar möchte ich das nach anklicken eines Links die Ursprungsseite neu geladen wird.
Aber kein forwarding wie mit

Also:

Ich habe zwei Seiten. seite1.php und pdf_generieren.php
Auf seite1.php steht eine Tabelle aller DBeinträge, wovon noch kein pdf erstellt wurde.
Bsp. id1,id2,id3,id4

Seite1.php hat eine Tabelle und einen Link. Beim Klick wird via fpdf ein pdf generiert und am Ende des Skiptes wird die Datenbank aktualisiert.

update einsaetze set pdf\_generiert=1 where id=4  

Das pdf kann ich dann speichern, versenden oder sonstwas. Dann schließe ich das Fenster mit dem pdf.
Auf der nun noch offenen Seite seite1.pdf steht nun immer noch der veraltete Eintrag der id4.

Mit javascript oder einem einfachen meta refresh werde ich von der Seite pdf_generieren.php auf seite1.php weitergeleitet. Das möchte ich nicht.
Auch ein zeitlicher Refresh, also nach dem Klick warte erst 5 Sekunden und lade dann neu oder lade alle 5Sekunden neu finde ich unpassend, da in dem pdf auch etwas gerechnet wird und die Generierung schon mal ein paar Sekunden dauern. Setzte ichs höher und die berechnung geht fix, ists auch Käse.
Wie bekomme ich die Herkunftsseite aktualisiert? Ich würde php vorziehen…
Danke im vorraus für eure Mühe!
Oliver Eikel

Hallo,

ich habe so spontan da zwei kleine Ideen.

  1. Was ist mit Sessions?

    1. Script

session_start

if sessionid_vorhanden
{pdf_generieren} //mit include
else
{seite1}

und in pdf_generieren
nach dem update die session_loeschen

oder 2. Alternativ evtl. mit header-Befehl arbeiten
header („Cache-Control: no-cache, must-revalidate, max_age=0“);
oder header mit location. -

Hoffe ich konnte zumindest gedanklich etwas weiterhelfen.

Waow, das war schnell! Danke.
Header leitet mich nur weiter, oder?
Was ich möchte:
Seite1.php laden
Klick
pdf in Seite2.php erzeugen und anzeigen
Seite1.php aktualisieren und offen lassen.

Beim, header wird von Seite2.php nach Seite 1.php weitergeleitet.
Bei ner session muss ich aber trotzdem den reload irgendwie anstossen…

Das pdf wird beim klick auf den Link generiert.
Gruß
Oliver Eikel

Hallo,

ich habe so spontan da zwei kleine Ideen.

  1. Was ist mit Sessions?

    1. Script

session_start

if sessionid_vorhanden
{pdf_generieren} //mit include
else
{seite1}

und in pdf_generieren
nach dem update die session_loeschen

oder 2. Alternativ evtl. mit header-Befehl arbeiten
header („Cache-Control: no-cache, must-revalidate,
max_age=0“);
oder header mit location. -

Hoffe ich konnte zumindest gedanklich etwas weiterhelfen.

Hallo Oliver,

dein Problem ist nicht unüblich. Am besten hat sich bewährt, die Seite für den Ausdruck per JavaScript in einem separaten Fenster zu öffnen. Auf der Ursprungsseite kannst Du dann per JavaScript prüfen, ob das Fenster noch offen ist (im Intervall von zB 1 Sekunde). Sobald das PDF Download-Fenster geschlossen wird, kann das JavaScript der ersten Seite dann die eigene Seite aktualisieren (neu laden oder per AJAX etc.).

Du kannst Dir noch überlegen, ob das Schliessen des PDF-Fensters auch irgendwie automatisiert werden kann oder dort den Hinweis einblenden, das Fenster nach dem Download zu schliessen.

Grüße,

Kukulkan

Hallo Kukulan,

danke für Deine Antwort! Dann ist aber das ganze abhängig vom schliessen des Fensters.

Ich habe auch schon einen Vorschlag mit javascript bekommen. Dort funktionierts, aber die zweoite Seite wird weitergeleitet,

Gruß
Oliver

Hallo,

dann mache es doch so, dass Du auf Seite 1 per JavaScript im Intervall von einigen Sekunden den Status auf dem Server abfragst. Die Routine, welches das PDF erstellt, muss das im Datensatz kennzeichnen. Die Routine, die vom JavaScript abgefragt wird, liefert das dann an die Ursprungsseite. Diese reagiert dann, sobald sich der Status geändert hat.

Du wirst, bei diesen Anforderungen, um etwas AJAX nicht drumherum kommen. Allerdings benötigst Du dafür kein Framework sondern kannst mit nur wenig JS das schon erreichen.

Grüße

Hallo,
das heisst aber massiv Traffic, oder?
Du meinst, ein select ist_generiert from tabelle where id=3 alle 5 Sekunden ausführen


if($ausgabe[‚ist_generiert‘]!=0)
window.reload

Der Datensatz wird im generator gekennzeichnet.
(DB update tabelle set ist_generiert=1

Aber und dann? Von der 2. Seite an die 1. Seite den Status zurückgeben.
Habe ich dann nicht eine Endlosschleife?
Gruß
Oliver Eikel

Hallo,

Du meinst, ein select ist_generiert from tabelle
where id=3 alle 5 Sekunden ausführen

Ja, wenn da ein Index drauf liegt, geht das nur wenige Millisekunden. Ausserdem legt eine DB das in den Abfragecache und wird den erst entfernen, wenn der betroffene Datensatz verändert wurde. Und der Traffic ist gering, da ja nur wenige Bytes übertragen werden.

if($ausgabe[‚ist_generiert‘]!=0)
window.reload

Ja, sozusagen.

Der Datensatz wird im generator gekennzeichnet.
(DB update tabelle set ist_generiert=1

Genau.

Aber und dann? Von der 2. Seite an die 1. Seite
den Status zurückgeben.
Habe ich dann nicht eine Endlosschleife?

Nein, warum? Wenn der Datensatz auf „generiert“ gesetzt wurde, kannst Du den Timer auf Seite 1 ja stoppen und erst wieder starten, wenn ein anderes PDF generiert werden soll.

Das wäre mein Vorschlag.

Grüße

Hi,

normalerweise habe ich mir das dann so vorgestellt.
Könnte aber bei Session-verwendung Probleme machen

Quelle php.net
— Snip Start—

<?php header("Location: http://www.example.com/"); /* Browser umleiten */
/\* Stellen Sie sicher, dass der nachfolgende Code nicht ausgefuehrt wird, wenn eine Umleitung stattfindet. \*/ exit; ?\> --- Snip Ende--- Einfach mal so ausprobieren. Zum Thema JS - bin ich auch nicht so für - gibt es auch paar Möglichkeiten - muss man vielleicht auch nehmen, wenn seite1 schon offen ist. Mit header wird die eigentlich auch nur im neuen fenster geladen bzw. weitergeleitet. den befehl: document.location.href oder window.open(url); oder per Link [oeffne jetzt](seite1.html) Aber mit dem Headerbefehl kann man viel machem.

Hallo Oliver,
wenn Du keine Ausgaben im Browser benötigst, kannst Du mit der Funktion header() die Location ändern.

Also bspw.:

<?php header("Location:http://www.wer-weiss-was.de"); ?>

Wenn Du eine Ausgabe benötigst, die zum Beispiel „PDF erfolgreich erstellt“ meldet, geht es denke ich nur per Javascript oder per Hyperlink. Aber vielleicht reicht Dir die Lösung ja schon…

bis dann,
Jens

Hi Kukulkan,

ich habs nun lösen können!
link

js zwar aber es macht das was es soll. Ist fürs Intranet und dafür is nix mit js abschalten.
Gruß+ Danke!
Oliver

Hi Peter,

ich habs nun lösen können!
link

js zwar aber es macht das was es soll. Ist fürs Intranet und dafür is nix mit js abschalten.
Gruß+ Danke!
Oliver

Hallo Oliver,

der Befehl, en du brauchst ist parent.reload oder operner.reload

LG
Dagmar

Hi Dagmar,

danke für Deine Antwort! Also js. Ich habe es nun mit Hilfe des Forums lösen können.
War etwas komplizierter, da in der zweiten Seite noch einige Berechnungen gemacht wurden, die in der ersten aktualisiertenm Seite angezeigt werden sollen.
Gruß
Oliver

Hallo,

verzeih die verspätete Antwort. Ich war auf Urlaub.

Sollte die Berechnung länger dauern, empfehle ich eine Cronjob einzurichten, welcher prüft ob ein PDF zu erstellen ist und dieser informiert den Besucher per Mail odgl. Dies ist empfehlenswert wenn viel und lange gerechnet werden muss.

Ansonsten würde ich sagen, kann der Besucher die paar Sekunden sicher warten. Layer über die gesamte Seite legen, dass er die Seite nicht verlässt und am Ende wieder Layer ausblenden. Bzw. könntest Du Dir auch die Funktion Header (http://php.net/manual/de/function.header.php) ansehen und den Besucher nach Generierung des PDF zurückleiten. Hier wäre der Vorteil, dass es egal ist wielange es dauert, da der Besucher immer nach Ende der Generierung zurpück geleitet wird.

JS würde ich für eine Weiterleitung nicht verwenden. Dies könnte ja deaktiviert sein.

Ich hoffe ich konnte Dir etwas weiterhelfen.

LG aus Linz
Anton

Hi,

Urlaub,
was ist das denn??? Ach ja, da gabs mal was… :wink:
Nein kein Problem. Aber ich habs mittlerweile doch mit JS gelöst bkommen. Ist für internen Gebrauch und dann ist JS halt Voraussetzung. Kaum einer kommt heute ohne JS aus, finde ich.
Lynx und Co ja,aber das sind Ausnahmen, finde ich.
Gruß aus Telgte
Danke für Deine Antwort!
Oliver