[PHP] setcookie wirkt nicht

Tab

unlimited
ID: 374854
L
26 Juni 2007
900
71
Hallo ihr Lieben,

ich arbeite gerade mit setcookie, jedoch wirkt es nicht. Egal ob im Firefox oder Iexplorer. Hier mal ein Code Beispiel.

index.php
PHP:
setcookie("win", "NONE");
show.php
PHP:
<?php echo $_COOKIE['win']; ?>
Auf dem einen wird ein Cookie gestezt, welches auf einer anderen Seite angezigt werden soll. Nun wirkt das aber nicht. Ich habe meine Seite mit Include aufgebaut.

PHP:
<?php
  $_GET['s'] = str_replace('.','',$_GET['s']);
  $check = explode("../",$_GET['s']);
  if (isset($check[1]) && $check[1]!='') {
     echo 'Zugriff verweigert!';
     exit;
  }
include_once('header.php');
include_once('left.php');
include_once(''.$_GET['s'].'.php');
include_once('footer.php');
?>
Es ist sehr Wichitg vielen Dank,
Markus
 
Zu der tollen Taktik mit explode() und der Konkatenation von '' sag ich mal besser nix ... :sick:

Der Keks ist erst gesetzt, nachdem du der Client eine andere Seite angefordert hat. Beispiel:
PHP:
setcookie('foo', 'bar');
echo $_COOKIE['foo']; // gibt nichts aus !
Zum Testen kannst du mit
PHP:
print_r($_COOKIE);
ran, obs vielleicht nurn Tippfehler is.
 
Hallo Tab

In deinem großen PHP-Code-Feld wird leider nicht klar, wo genau du den Cookie setzt. Ganz wichtig ist nämlich, dass der Cookie vor allen Ausgaben (die im Browser angezeigt werden) kommen muss. Ansonsten gehts nicht.

Und im Browser müssen Cookies akzeptiert werden. Sonst gehts natürlich auch nicht.
 
Also Cookies sind vom Browser akzeptiert. Ich weiß, habe es auch gelesen, das erst eine andere Seit aufgerufen werden muss, damit es geht, jedoch weiß ich nicht ob das mit den Inlcude zusammenhängt, denn der Inalt wird ja Inlcudiert.

PHP:
<?php
    include_once("inc/db_connect.php");
    
    if (isset($_POST['senden'])) {
        
        $code1 = htmlentities($_POST['code_1'], ENT_QUOTES);
        $code2 = htmlentities($_POST['code_2'], ENT_QUOTES);
        $code3 = htmlentities($_POST['code_3'], ENT_QUOTES);
        $code = "$code1$code2$code3"; //Alle Codes zusammengefasst
            
        if (strlen($code) <12) {
            $fehler = "Ihr Code ist ungültig.";
        } else {
        
        $sql = "SELECT id, code FROM win_code ORDER by id DESC";
            $result = mysql_query($sql);
            if (!$result) {
                echo "Es ist ein Fehler aufgetreten.";
            }else {
                while ($row = mysql_fetch_assoc($result)) {
                    
                    $code_sql = $row[code];
                    if ($code == $code_sql) {
                        
                        $ausgabe = "Hier muss dann das Formular stehen!";
                        setcookie("win", "NONE");

                    } else {
                        setcookie("win", "none");
                        $ausgabe = "Sie haben leider nicht gewonnen";
                    }
                }
                    
            }
        }
    }
?>

Da wird es gesetzt, ist da ein fehler?
 
Zeile 25 und 26 müssen getauscht werden.

Und du darfst insgesamt vorher noch nix ausgegeben haben. Also auch nicht in anderen Dateien, die du vorher includest.
 
Der Cookie soll ja hier ausgegeben werden:
rechts.php
PHP:
    <form method="POST" action="?s=function/win">
    <div id="input" style="display: <?php echo $_COOKIE['win']; ?>;">
        <p class="input_code">
        <input type="text" name="code_1" maxlength="4" />
        <input type="text" name="code_2" maxlength="4" />
        <input type="text" name="code_3" maxlength="4" />
        </p>    
        <div id="submit">
            <input type="submit" name="senden" value="senden" style="background: #8DBA5F; color: #fff; border: 0px;" />
        </div>
    </div>
    </form>
    
    <div id="text">

Diese ist includiert, und wir in jeder Seite angezigt, geht das daher nicht?
Wie kann ich das sonst lösen?
 
Erst die Kekse verarbeiten danach den Header includen, so kannst du das lösen, anders nicht. Wie schon oft geschrieben hier, Cookies müssen vor dem Senden des Header - vor der ersten Ausgabe gesetzt werdem.
 
Als erstens hast du gelesen und verstanden zu was die anderen Parameter von setCookie sind?

Ansonsten sieht der Code auch frag würdig aus. Wird setcookie überhaupt erreicht? Prüf am besten mal ob das Cookie überhaupt gesetzt wird. (z.B. sieht man das mit Firefox wenn sich die Seiteninformationen anzeigen lässt unter Header) Dann weißt du schonmal dass damit alles ok ist... dann rufst du die Seite am besten nochmal auf und schaust ob das Cookie gesendet wird. (das sieht man auch unter header). Wenn ja solltest du vielleicht nochmal überlegen ob Satz 1 wirklich zutrift.
 
ok, habe verstanden was der fehler ist, jeodhc nicht wie man ihn behebt.

Meine index.php sieht ja so aus:

PHP:
<?php
  $_GET['s'] = str_replace('.','',$_GET['s']);
  $check = explode("../",$_GET['s']);
  if (isset($check[1]) && $check[1]!='') {
     echo 'Zugriff verweigert!';
     exit;
  }
include_once('header.php');
include_once('wincode.php');
include_once(''.$_GET['s'].'.php');
include_once('footer.php');
?>

Nun wie soll ich denn den wincode.php sieh code ein post weiter oben. ALs allererstes starten? Dann müsste ich ja wincode.php über den header.php includen aber dann verschiebt sich ja die Seite?

Liebe Grüße und vielen dank
Markus
 
Auch wenn ich zu deinen Problemen nichts mehr schreiben wollte, hier doch ein kleiner Beitrag...


[..]Nun wie soll ich denn den wincode.php sieh code ein post weiter oben. ALs allererstes starten? Dann müsste ich ja wincode.php über den header.php includen aber dann verschiebt sich ja die Seite?[..]

Ja, so ist es. Deswegen benutzt man immer häufiger Template Systeme ;) Damit umgeht man dieses Problem.
 
Es darf kein Header gesendet werden bevor ein Keks gesetzt wird.

Das habe ich jetzt ja verstanden, aber ich sehe keine Lösung. WIe soll ich den erst den Keks verabeiten und dann erst den Header? Dann ist das Design ja irgendwie im kaputt?

Liebe Grüße und vielen Dank,
Markus
 
Entweder strukturierst Du Dein Seitenkonzept um (Template System wurde hier ja bereits angesprochen) oder Du versuchst, ob Dir ob_start() in irgendeiner Weise weiterhelfen kann.
 
Ah ok, vielen dank.

Habe ja auch schon an ein Template System habe mir auchs chon Smarty geholt und eingerichtet, jeodch komme ich damit irgenwie nicht klar.

Aber mit dem Template System würde ich ja auch heder.php und alles includieren?
 
Du würdest aber die gesamte Ausgabe in einem Rutsch erledigen, nachdem die Logik abgearbeitet ist.
 
Würde jetzt auch gerne mit Template System anfangen. WIe hast du das alles gelernt mit Smarty?

Liebe Grüße
Markus