2011-01-15 15 views
2

Zuerst hier ist der Code:Warum funktioniert dieses einfache PHP Forloop nicht?

<?php 

$qty = $_GET['qty']; 

for($i=0; $i < $qty; $i++) 
{ 
    setcookie('animals', $_COOKIE['animals'].'(lion)', time()+3600); 
} 

?> 

Hier ist, was ich versuche zu tun: will

ich den Wert des „Tiere“ Cookie setzen „(Löwen)“. Die Anzahl der Instanzen von "(lion)", die im Cookie enthalten sein sollten, wird durch den Wert des GET-Parameters "qty" bestimmt. So zum Beispiel, wenn die Seiten-URL ist:

http://site.com/script.php?qty=10

dann sollte der Wert des Cookies sein:

(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)(lion)

aber jetzt den Wert setzt sich nur einmal trotz der setcookie Funktion innen sein die Schleife, warum funktioniert es nicht?

+2

weil $ _COOKIEis immer aus dem Strom-Eingang. Versuchen Sie, alles in einer anderen Variablen zu speichern, bevor Sie setcookie nach Ihrer Schleife aufrufen. –

Antwort

3

Aufgrund der Art und Weise, dass Cookies funktionieren (der Browser den Wert zurück an den Server senden muss als Teil der Seitenanforderung) können Sie den Inhalt des Cookies nicht in einer einzelnen Seite laden und aktualisieren, wie Sie es gerade versuchen.

Als solches anstatt zu versuchen, Werte der Variablen im $ _COOKIE Array anzuhängen, einfach eine temporäre Variable als solche verwendet werden:

<?php 
    $quantity = intval($_GET['qty']) ? intval($_GET['qty']) : 10;  

    $tempString = ''; 
    for($loop=0; $loop < $quantity; $loop++) { 
     $tempString .= '(lion)'; 
    } 

    setcookie('animals', $tempString, time()+3600); 
?> 
+0

Erklärungnnnnnnn! – jlmakes

2

$_COOKIE nur die Cookies enthält an das Skript übergeben:

Ein assoziatives Array von Variablen für das aktuelle Skript per HTTP-Plätzchen geleitet.

setcookie ändert nur die HTTP-Antwortheader. Siehe auch die documentation:

Sobald die Cookies gesetzt wurden, können sie auf der nächsten Seite Last mit dem $_COOKIE Array zugegriffen werden.

I.e. Es ändert nicht das $_COOKIE Array.

können Sie tun:

$str = ''; 
for($i=0; $i < $qty; $i++) 
{ 
    $str .= '(lion)'; 
} 
setcookie('animals', $str, time()+3600); 
1

Warum Sie nicht so etwas wie:

<?php 

$qty = $_GET['qty']; 

$animals = ''; 

for($i=0; $i < $qty; $i++) 
{ 
    $animals.='(lion)'; 
} 

setcookie('animals', $animals, time()+3600); 

?> 
2

$_COOKIE Variablen sind bis zur nächsten Anforderung nicht zur Verfügung. Das Setzen eines Cookies setzt die Variable nicht.

Von http://php.net/manual/en/function.setcookie.php:

Sobald die Cookies gesetzt wurden, können sie auf der nächsten Seite Last mit dem $ _COOKIE oder HTTP_COOKIE_VARS $ Arrays zugegriffen werden.

(Hervorhebung von mir.)

1

können Sie die für diese integrierte in str_repeat() Funktion:

$qty = $_GET['qty']; 
setcookie('animals', str_repeat("(lion)", $qty), time()+3600); 
Verwandte Themen