PHP und JS Kommunizieren lassen

Alice

Erfahrenes Mitglied
Hallo.

Ich suche bei einem Problem nach einer guten Lösung. Vielleicht sehe ich auch nur den Wald vor lauter Bäumen nicht...

Ich habe ein PHP-Skript, welches länger arbeitet. Um meine User über den aktuellen "Stand der Dinge" zu informieren, habe ich eine Funktion erstellt das so etwas wie ein Ladebalken ist. Ich gebe zwar nur "Info-Text" aus, aber ein Ladebalken mit Grafik und Prozentangabe wäre auch möglich.

Es funktioniert folgendermaßen:
Das PHP-Skript erstellt eine Text-Datei mit einem Text wie z.B. "Eingaben werden validiert". Während das Skript läuft, lasse ich über JS (JS -> check.php) ständig prüfen, was in der Text-Datei steht und gebe dieses in einem DIV aus. Im PHP-Skript wird der Text immer wieder geändert. Am ende des PHP-Skriptes, wird die Text-Datei gelöscht.

Als Beispiel:
-> Eingaben werden validiert
-> Verfügbare Avatare werden geladen
-> Avatar wird generiert
-> Avatar wird konvertiert
-> Fertig

Mit einem vorgegebenen festen Dateinamen für die Text-Datei funktioniert es perfekt. Aber JS muss ja genau wissen, welche Text-Datei es ansprechen muss.

Wie kann ich das lösen?

Session:
Geht nicht, da die Session erst gestartet wird, wenn das Skript durchgelaufen ist.

Cookies:
Das selbe wie mit Sessions.

Ich könnte aus den Eingaben des Users eine Art "Hash-Summe" (eigentlich meine ich etwas anderes) erstellen. Dann wäre aber die Gefahr das zwei User das selbe eingeben erhöht. Ich meine Augen nicht sauber.

Ich habe mit der Funktion mt_rand eine 10-Stellige Zahl erstellt, die beim Aufruf des PHP-Skriptes (nicht beim ausführen) eine Zahl generiert und als Hidden-Feld im HTML-Formular zu Verfügung steht. Somit hat JS darauf auch Zugriff. Jedoch funktioniert das nicht.
 
Wenn es einen User gibt, gibt es dann nicht auch einen Usernamen oder eine User-ID?

Und warum kannst du nicht mit Sessions arbeiten, du entscheidest doch wann die Session gestartet wird. In deinem Fall eben ganz am Anfang des Skripts!
 
Ja klar stehen wir alle Hand von Informationen zur Verfügung. Nur sollen es natürlich auch Gäste nutzen können.

Das mit den Session muss ich noch einmal testen, aber ich meine es geht nicht.
 
Also irgendwie harmoniert das ganze nicht. Ich verstehe aber auch nicht warum...

Man ruft das PHP-Skript auf. Es wird das HTML-Formular angezeigt. Im Hintergrund wurde bereits durch das PHP-Skript eine ID erzeugt wie z.B. 1234567890. Diese Zahl steht nun in einem Hidden Feld bereit.

Anmerkung:
Die richtige Zahl wird im Hidden-Feld und auch im JS-Code anzeigt (Firebug).

Wenn man nun auf "abesenden" klickt, erzeugt das PHP-Skript EIGENTLICH (sollte es) eine Textdatei namens "1234567890.txt". Aber stattdessen wird eine ganz andere Zahl erzeugt...

Das ist das Problem!

Meine Theorie:
Mein abesenden des PHP-Skriptes wird das PHP-Skript von GANZ NEU gestartet und somit eine neue ID erzeugt.

Jemand eine Lösung?

EDIT:

Ich habe den Wald vor lauter Bäumen nicht gesehen.

Jetzt geht es perfekt!

Die einfache Lösung:
PHP:
if (session_is_registered('zufallszahl'))
{
   $zahl_gen = $_SESSION['zufallszahl'];
}
   else
{
   $_SESSION['zufallszahl'] = mt_rand(0000000001, 9999999999);
   $zahl_gen = $_SESSION['zufallszahl'];
}

Die Session wird erst gelöscht, wenn das Skript erfolgreich durchgelaufen ist oder halt der Browser geschlossen wird. Besser geht es - glaube ich - nicht.
 
Zuletzt bearbeitet:
Bitte wegen Doppelpost nicht schlagen...

Ich habe leider ein "neues" Problem.

Wenn das Skript durchgelaufen ist, wird leider keine neue Session (neue Zahl) generiert und dadurch sind wieder PHP und JS nicht "Synchron". Also es wird dem Browser nicht mitgeteilt. Ein Refresh bringt leider auch nichts, da dann das Resultat vom Bildschrim verschwinden würde.

Kurze Erklärung:
Die Session wird mit laden der Seite erstellt und ist solange gültig wie das Fenster geöffnet ist. Also auch wenn man manuell die Seite neu ladet (F5 Taste) bleibt die Zahl bestehen. Wenn das Skript aber läuft, wird am ende die Session gelöscht. Meine Hoffnung war, dass die Session dann neu erstellt wird, weil beim erstellen der Session (ganz oben) keine Bedingungen zu erfüllen sind. So ist es aber wohl nicht bzw. der Browser bekommt es nicht mit.

Edit:

Ok, ist auch gelöst.

Statt die Session am ende des Skriptes zu löschen, habe ich der Session einfach eine neue Zufallszahl generieren lassen.
 
Zuletzt bearbeitet:
Zurück