Seite anzeigen trotz PhP

T

tx_g

Gast
Hallo,
ich habe ein kleines Problem.
Ich würde gern eine Login Seite erstellen, welche erst nachdem ein bestimmtes PhP Script gelaufen ist den Login anzeigt.
Das aus und einblenden der Elemente bekomme ich über JS noch hin, allerdings wird auf der Seite erst der PhP Code ausgeführt, und dann die Seite im Browser dargestellt.
Gibt es da eine andere Möglichkeit, erst die Seite dar zu stellen und dann den Code auszuführen?
 
Stell doch einfach den PHP code an das Ende der Seite - nach dem </html> Tag.
 
Noch mal genauer bitte, du willst eine Seite durch einen Login schützen? Also dass deine Seite nur angezeigt werden kann, wenn man eingeloggt ist?
 
Leider wird trotzdem drauf gewartet, dass das PhP Script fertig ist, bevor die Seite dann beim Benutzer angezeigt wird.
Evtl kann man das ja so lösen, dass eine andere .php Datei mit dem Script gestartet wird, aber nicht auf das Ergebnis gewartet wird?
//
Nicht ganz.
Die Seite soll angezeigt werden (ohne Login). Dann werden einige Aktionen ausgeführt u.a. zur Dokumentation und zur Überprüfung der Datenbanken und erst dann soll der Benutzer die Möglichkeit haben sich anzumelden.

Soll dazu dienen,dass die Seite nicht so wirkt als hätte man lange Ladezeiten, nur weil PhP etwas länger benötigt.
 
Zuletzt bearbeitet von einem Moderator:
Wenn ich es richtig verstehe:
Status Quo:
1. Seite wird aufgerufen
2. PHP Skript mit x Aktionen läuft und es wird gewartet bis es beendet wird (Seite bis dahin weiss)
3. PHP Skript fertig und Login-Maske wird angezeigt
4. Login an der Seite

Soll:
1. Seite wird aufgerufen
2. PHP Skript läuft los und soll im Hintergrund weiter laufen aber es wird nicht auf das ende gewartet
3. Gleichzeitig wird die Loginmaske angezeigt
4. Login an Seite möglich

Korrekt?
Wenn ja müsstest du einen async call aus JS an PHP starten siehe z.b. https://stackoverflow.com/questions/15243535/call-php-function-in-javascript-without-waiting-for-response oder https://stackoverflow.com/questions/10702800/asynchronous-php
 
Dann musst du das alles voneinander trennen, daher Ausgabe der Seite und Aufruf von PHP muss man trennen. Man kann zwar bei PHP auch eine Ausgabe erzwingen (http://php.net/manual/de/function.flush.php), bevor das Script Ende erreicht wurde, aber du brauchst ja auch wiederum die Dynamic dass dein Login erst angezeigt wird, wenn die dein PHP Script durch gelaufen ist. Ich verstehe zwar immer noch nicht ganz, warum man das so machen muss, oder warum deine Abfragen so lange brauchen, aber ich will dir hier trotzdem helfen ;)

Ich würde einfach die Webseite ausgeben, ohne dass deine DB Abfrage statt findet. Dann baust du ein Javascript, was nach laden der Seite ausgeführt wird, was wiederum dein PHP Script anschiebt. Darin prüfst du dann die Rückgabe und blendest dann dein Login ein/aus. Das wäre dann ein typischer asynchronous requests (https://developer.mozilla.org/en-US...Request/Synchronous_and_Asynchronous_Requests), mittels JS Libs wie JQuery auch super einfach zu implementieren.
 
Vielen Dank für die Tipps.
Leider habe ich nicht wirklich Ahnung von JS, deswegen stehe ich etwas sehr unwissend deswegen da. Korrigiert mich bitte wenn ich was falsches erzähle :)
Den Code hier habe mir mal von https://developer.mozilla.org/en-US/docs/Web/API/XMLHttpRequest/Synchronous_and_Asynchronous_Requests ausgesucht.

Code:
var xhr = new XMLHttpRequest();
xhr.open("GET", "/bar/foo.txt", true);
xhr.onload = function (e) {
  if (xhr.readyState === 4) {
    if (xhr.status === 200) {
      v
    } else {
      console.error(xhr.statusText);
    }
  }
};
xhr.onerror = function (e) {
  console.error(xhr.statusText);
};
xhr.send(null);
Jetzt vermute ich das bei
Code:
xhr.open("GET", "/bar/foo.txt", true);
die php Datei rein kommt zum starten also irgendwie so:
Code:
xhr.open("GET", "/bar/foo.php", true);
Dann kommt statt
Code:
console.log(xhr.responseText);
das rein, was passieren soll während die php ausgeführt wird und statt
Code:
xhr.send(null);
dass wenn es fertig ist mit der Ausführung.
Die Error-Zeilen (
Code:
else {
      console.error(xhr.statusText);
    }
 und 
xhr.onerror = function (e) {
  console.error(xhr.statusText);
)kann ich vermutlich raus lassen?
Stimmt das so oder geht es doch ganz anders?

//Edit

Das ganze funktioniert so richtig:
Code:
function load(){
//Aktion davor
   var xhr = new XMLHttpRequest();
   xhr.onreadystatechange = function () {
   if(xhr.readyState === XMLHttpRequest.DONE && xhr.status === 200) {
    //Aktion danach
   }
   }
   xhr.open("GET", "./test.php", true);
   xhr.send();
}
 
Zuletzt bearbeitet von einem Moderator:
Zurück
Oben