AGB  ·  Datenschutz  ·  Impressum  







Anmelden
Nützliche Links
Registrieren
Zurück Delphi-PRAXiS Programmierung allgemein Programmieren allgemein PHP Meldung anzeigen erst bei Seitenwechsel
Thema durchsuchen
Ansicht
Themen-Optionen

PHP Meldung anzeigen erst bei Seitenwechsel

Ein Thema von xxsasch4xx · begonnen am 10. Apr 2011 · letzter Beitrag vom 15. Apr 2011
Antwort Antwort
Benutzerbild von Matze
Matze
(Co-Admin)

Registriert seit: 7. Jul 2003
Ort: Schwabenländle
14.929 Beiträge
 
Turbo Delphi für Win32
 
#1

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 10. Apr 2011, 16:32
[...] nen Javascript seitigen clientcode [...]

Sorry, das konnte ich mir nicht verkneifen.

Die Grundlagen musst du lernen, die fehlen dir noch komplett. Sowohl in PHP als auch in JS und in HTML sowieso.
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#2

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 16:02
ist ja länger her aber wollte das thema nochmal aufgreifen
hab jetzt alles in html reingeschriebn
dann müsste das doch gehen zumindestens wenn ich das auf apache ausführe.

Code:
<html>
<head>
<meta http-equiv="cache-control" content="no-cache">
<title>
hallo
</title>

</head>


<body>

<form action='#' method='POST'>
<input type='submit' value='test' name='test'>
</form>

<?php
if (isset($_POST['test']))
{
header('location: [url]http://www.google.de');[/url]
echo "<script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>";
echo "hallo!";

// das erste echo müsste ja dann mindestens mal gehen

exit();
}
?>
</body>
</html>
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#3

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 16:17
Nochmal: Lerne die Grundlagen. Html wird nie, never, ever, "auf einem Apache ausgeführt" werden.

Der Webserver schiebt das Html lediglich zum Browser.
Und wenn Du einen header:location sendest, dann führt das automatisch zu einem http-Status-Code 302. Das heisst, der Browser hört in genau dem Moment in dem er den header liest auf, die aktuelle Seite darzustellen (ignoriert also Dein Javascript komplett) und startet einen neuen Request an die angegebene Adresse. Und genau in dem Moment bist Du die Kontrolle los. Komplett.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
xxsasch4xx

Registriert seit: 1. Mär 2010
210 Beiträge
 
#4

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 16:21
Und was ist wenn die Datei auf die geleitet wird von mir ist?
Kann ich da irgendwas in den Queltext von der neuen Datei schreiben, dass der dann ne Ausnahme macht??
  Mit Zitat antworten Zitat
Benutzerbild von wicht
wicht

Registriert seit: 15. Jan 2006
Ort: Das schöne Enger nahe Bielefeld
809 Beiträge
 
Delphi XE Professional
 
#5

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 16:31
Nein, das geht nicht. Hast du dir überhaupt mal angeschaut, was der von Phoenix genannte Code 302 macht?
http://streamwriter.org

"I make hits. Not the public. I tell the DJ’s what to play. Understand?"
  Mit Zitat antworten Zitat
Benutzerbild von Phoenix
Phoenix
(Moderator)

Registriert seit: 25. Jun 2002
Ort: Hausach
7.643 Beiträge
 
#6

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 16:52
dass der dann ne Ausnahme macht??
Es gibt da keine Ausnahmen. Das geht aus Sicherheitsgründen nicht. Punkt. Aus Ende.
Sebastian Gingter
Phoenix - 不死鳥, Microsoft MVP, Rettungshundeführer
Über mich: Sebastian Gingter @ Thinktecture Mein Blog: https://gingter.org
  Mit Zitat antworten Zitat
Benutzerbild von alcaeus
alcaeus

Registriert seit: 11. Aug 2003
Ort: München
6.537 Beiträge
 
#7

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 18:11
AAAAAAAAAAAArgh, ich kann mir das nicht laenger ansehen. Deshalb jetzt die ultimative Schritt-fuer-Schritt-Erklaerung was denn passiert.

Angenommen du hast auf deinem Web-Server eine index.html mit folgendem Inhalt:
Code:
<html>
   <head>
      <title>Test</title>
   </head>
   <body>
      <script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
   </body>
</html>
Jetzt kommt ein Benutzer, und gibt die URL zur obigen Datei in die Adressleiste seines Browsers ein. Der Browser erhaelt dann zwei Dinge:
  • Einen HTTP-Header, in dem bestimmte Informationen drinstehn - diesmal allerdings nichts spannendes:
    Code:
    HTTP/1.1 200 OK
    Date: Mon, 12 Mar 2001 19:12:16 GMT
    Server: Apache/1.3.12 (Unix) Debian/GNU mod_perl/1.24
    Last-Modified: Fri, 22 Sep 2000 14:16:18
    ETag: "dd7b6e-d29-39cb69b2"
    Content-Length: <hierStehtIrgendeineZahl>
    Connection: close
    Content-Type: text/html
  • Im Body der Response kommt folgender HTML-Code an:
    Code:
    <html>
       <head>
          <title>Test</title>
       </head>
       <body>
          <script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
       </body>
    </html>

Der Browser erhaelt das HTML, parst es, sieht dass da ein Script-Tag drin ist und gibt den Inhalt an die JS-Engine weiter. Diese sieht dass da ein alert() drin ist und zeigt dieses an. Soweit ist das ja genau das was du wolltest.

Nun erweitern wir das obige Szenario um einen Redirect. Wir nehmen fuer dieses Szenario an, dass der Apache kein PHP-Modul installiert hat.
Code:
<html>
   <head>
      <title>Test</title>
   </head>
   <body>
      <?php header('Location: http://www.google.com'); ?>
      <script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
   </body>
</html>
Nun gibt die obige Person wieder die URL zur Seite in die Adressleiste ein. Als Ergebnis wird wieder der obige HTML-Code rauskommen und das Ergebnis wird so sein wie bei Versuch 1. Weder der Webserver noch der Browser wissen was sie mit diesem <?php-Dingens anfangen sollen und ignorieren es deshalb einfach.

Bei Versuch 3 installieren wir dann noch mod_php fuer Apache so dass der Apache auch weiss was er mit diesem <?php zu tun hat und benennen die Datei in .php um. Der Code ist wieder wie oben:
Code:
<html>
   <head>
      <title>Test</title>
   </head>
   <body>
      <?php header('Location: http://www.google.com'); ?>
      <script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
   </body>
</html>
Nun gibt die bereits bekannte Person nochmal die URL ein und der Browser schickt wieder einen Request an den Server. Nun kommt folgendes zurueck:
  • Als Header kommt folgendes:
    Code:
    HTTP/1.1 200 OK
    Date: Mon, 12 Mar 2001 19:12:16 GMT
    Server: Apache/1.3.12 (Unix) Debian/GNU mod_perl/1.24
    Last-Modified: Fri, 22 Sep 2000 14:16:18
    ETag: "dd7b6e-d29-39cb69b2"
    Content-Length: 3369
    Location: http://www.google.com
    Connection: close
    Content-Type: text/html
    Beachte vor allem diese eine Zeile die mit "Location" beginnt. Die wird noch wichtig.
  • Und als HTML-Code kommt folgendes an:
    Code:
    <html>
       <head>
          <title>Test</title>
       </head>
       <body>
          <script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
       </body>
    </html>
Wie du siehst wird der PHP-Code nicht an den Client ausgeliefert, dieser wurde ja bereits auf dem Server vollkommen ausgefuehrt. Der header()-Befehl in PHP weist den Webserver an, die angegebenen Daten in den Response-Header zu packen. Ausserdem wird der PHP-Code aus dem Response-Body entfernt, den braucht ja keiner mehr.

So, und was passiert jetzt? Der Browser interpretiert wie sonst auch immer den Header. Jetzt sieht er dass dort ein Location-Feld da ist. Damit weiss der Browser dass er auf eine andere Seite weitergeleitet wird und laesst den kompletten Response-Body einfach fallen. Stattdessen macht er einen Request auf die angegebene URL (in dem Fall google.com) und schreibt diese URL auch in die Adresszeile - so als ob die Person direkt auf diese Seite gegangen waere. Dort passiert dann de fakto das aus Beispiel 1: es kommt eine Response (bestehend aus Header und Body) und das was du geschickt hast ist dem Browser wirklich komplett egal.

So, was heisst das jetzt? Du kannst noch so viel Code hinter einen Redirect schreiben, so lange dieser Code client-seitig ausgefuehrt werden muesste (und ein alert wird client-seitig ausgefuehrt) wird das nicht passieren. Klar wird das echo noch ausgefuehrt, doch was macht dieses echo eigentlich? Nehmen wir folgendes Beispiel:
Code:
<html>
   <head>
      <title>Test</title>
   </head>
   <body>
      <?php header('Location: http://www.google.com'); ?>
      <?php echo "<script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>"; ?>
   </body>
</html>
Was kommt beim Browser an? Erstmal natuerlich der Header der gleich wie im dritten Beispiel ist. Zweitens der Body, und der sieht wie folgt aus:
Code:
<html>
   <head>
      <title>Test</title>
   </head>
   <body>
<script>alert('hallo - einloggen nicht fehlgeschlagen!')</script>
   </body>
</html>
So, was heisst das jetzt? echo erzeugt eine Ausgabe die der Server in die Response reinpackt, so als haettest du sie direkt in den HTML-Code geschrieben. Das Ganze wird ausgefuehrt bevor auch nur ein einzelnes kleines Bit an den Client gesendet wird. Auch hier sieht der Client dass ein Location-Feld im Header ist, ignoriert den Body und macht den Request auf google.com.

Nochmal kurz und buendig: WAS DU MACHEN WILLST GEHT NICHT.

So, und falls du nach diesem Beispiel immer noch nicht verstanden hast wie das funktioniert, tu bitte allen Web-Entwicklern in diesem Forum einen Gefallen und hol dir ein Buch das den Einstieg in die Web-Entwicklung lehrt. Das sind Grundlagen, die man einfach verstanden haben muss. Solange du solch banale Dinge nicht verstanden hast, bringt es rein gar nichts sich auch nur irgendwie weiter mit diesen Sachen zu beschaeftigen.

Greetz
alcaeus
Andreas B.
Die Mutter der Dummen ist immer schwanger.
Ein Portal für Informatik-Studenten: www.infler.de
  Mit Zitat antworten Zitat
generic

Registriert seit: 24. Mär 2004
Ort: bei Hannover
2.416 Beiträge
 
Delphi XE5 Professional
 
#8

AW: PHP Meldung anzeigen erst bei Seitenwechsel

  Alt 14. Apr 2011, 18:44
Möglichkeit:
Ein Frameset aufbauen und aus dem einen Frame die Nachricht anzeigen und in dem sichtbaren Frame die neue Seite laden.

Der Sinn erschließt sich mir aber nicht, warum man das so machen sollte.
Coding BOTT - Video Tutorials rund um das Programmieren - https://www.youtube.com/@codingbott
  Mit Zitat antworten Zitat
Antwort Antwort


Forumregeln

Es ist dir nicht erlaubt, neue Themen zu verfassen.
Es ist dir nicht erlaubt, auf Beiträge zu antworten.
Es ist dir nicht erlaubt, Anhänge hochzuladen.
Es ist dir nicht erlaubt, deine Beiträge zu bearbeiten.

BB-Code ist an.
Smileys sind an.
[IMG] Code ist an.
HTML-Code ist aus.
Trackbacks are an
Pingbacks are an
Refbacks are aus

Gehe zu:

Impressum · AGB · Datenschutz · Nach oben
Alle Zeitangaben in WEZ +1. Es ist jetzt 17:44 Uhr.
Powered by vBulletin® Copyright ©2000 - 2025, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024-2025 by Thomas Breitkreuz