COOKIE setzen, auslesen UND je nach Inhalt externe PHP includen

fixxxxxi

Erfahrenes Mitglied
Hallo,

ich habe eine index.php, in welcher ich eine andere PHP (infobox.php) include. Diese andere PHP ist nichts anderes als ein kleines Infofenster (in JavaScript) welches aufpoppt, wenn man die index.php aufruft. Nun soll aber nicht jedesmal, wenn der User die index.php aufruft das Fenster aufpoppen, sondern nur einmal bis zum nächsten Besuch der Seite.

Dazu habe ich mir gedacht, setze ich einen Cookie, wenn der Benutzer auf Schließen in der anderen Datei klickt, lese diesen aus und lasse das die andere PHP je nach Inhalt des Cookies includen. Aber das klappt nicht, weil ich nicht wirklich weiß wie ich das anstellen soll, das ja das setzen des Cookies vor jeglichem HTML passieren muss.

Im Moment sieht meine index.php wie folgt aus:

PHP:
<?php
$status = 'an';
setcookie("infobox", $status);
if ($_COOKIE['infobox'] == 'an' ) {
include("infobox.php");
}

in der anderen PHP sieht die Zeile zum Schließen wie folgt aus:

PHP:
<html>
<style>#faqkontakt {position: fixed; right: 10px; bottom: 10px; width: 250px;}</style>
<!--[if IE]>
<style>#faqkontakt{ position:absolute;bottom:auto; top:expression(((e=document.documentElement.scrollTop)?e:document.body.scrollTop)+((w=document.documentElement.clientHeight)?w:document.body.clientHeight)-110+'px'); }</style>
<![endif]-->

<body>

<script type="text/javascript">
function close(pageElement) {
document.getElementById(pageElement).style.visibility='hidden';
document.getElementById(pageElement).innerHTML = "";

...HIER MUSS NUN DAS SETZEN DES COOKIES REIN! ABER WIE?...
SO IN ETWA?
<?php
$status = 'aus';
setcookie("infobox", $status);
?>


}
.....
    <h2 style="margin: 0pt 0pt 0pt 12px; padding: 12px 12px 0pt 24px; background: transparent url(images/symb_win.png) no-repeat scroll 0pt 11px; -moz-background-clip: -moz-initial; -moz-background-origin: -moz-initial; -moz-background-inline-policy: -moz-initial;"><a href="javascript:close('faqkontakt');" style="float: right;">
.....
</html>

Nur ist das Problem, das jedesmal wenn er auf die index.php geht der cookie ja auf "an" gestellt wird, so dass das Setzen des Cookies auf "aus" gar keine Wirkung zeigt.

Wie kann ich das lösen? LG Chris
 

Anhänge

  • infobox.png
    infobox.png
    43,4 KB · Aufrufe: 40
sondern nur einmal bis zum nächsten Besuch der Seite.

Dann verwende kein Cookie, sonder lös es mit einer Session. Die sind genau dafür gedacht. Eine Session ist genau so lange gültig bis entweder session_destroy() aufgerufen oder das Browser-Fenster geschlossen wird.

Ich würde es so machen:

Session bei Aufruf von index.php mit session_start() beginnen. Dann eine Prüfung einbauen:

PHP:
session_start();

if(!isset($_SESSION['infobox']))
{
   include('infobox.php');
}

Dann in der infobox.php ebenfalls ein session_start() einbauen und dann $_SESSION richtig setzen:

PHP:
session_start();
$_SESSION['infobox'] = 1;

Das sollte eigentlich genau das bewirken, was du möchtest.
 
Das funktioniert soweit, wenn ich es so mache, wie saftmeister es sagt. Nur soll ja die Box nur geschlossen werden und verborgen, wenn der User es wünscht, sprich durch den Klick auf das "X".

So wie es im Moment ist, wird die Box nur einmal angezeigt, egal ob der User wünscht das dass Fenster da ist oder nicht.
 
Ok. Habs hinbekommen.

index.php:

PHP:
if ($_COOKIE['infobox'] != 'aus' ) {
include("infobox.php");
}

infobox.php:

Code:
<script type="text/javascript">
function close(pageElement) {
document.getElementById(pageElement).style.visibility='hidden';
document.getElementById(pageElement).innerHTML = "";
document.cookie = 'infobox=aus;'; 
}
</script>
 
Hi,

fixxxxxi hat gesagt.:
Kann man nicht das Setzen des Cookies in die JS Funktion welche ja schon besteht:

Code:
<script type="text/javascript">
function close(pageElement) {
document.getElementById(pageElement).style.visibility='hidden';
document.getElementById(pageElement).innerHTML = "";
}
</script>

mit integrieren? Wenn ja wie?

natürlich, schau doch einfach bei SelfHTML nach, wie man ein Cookie setzt... :confused:

fixxxxxi hat gesagt.:
was ich noch nicht verstehe, wo und wie wird denn dann der Cookie auf "an" gesetzt, welcher ja geprüft wird, bevor die infobox.php included wird.

Warum prüftst Du das überhaupt so? Include doch einfach, falls das Cookie nicht gesetzt ist.

LG
 
Ja weshalb ich überhaupt geprüft habe, ob der Cookie gesetzt ist und nicht die Umkehroperation weiß ich auch nicht. Bin ich einfach nicht drauf gekommen :P Manchmal sieht man den Wald vo lauter Bäumen eben nicht =)
 
Zurück