2014-07-09 12 views
0

En ce moment, si je charge la page avec les obtenir les variables one et two il redirigera, mais il affiche cette erreur php avant qu'il ne: Warning: Cannot modify header information - headers already sent by (output started at /home/site/public_html/lp-19.php:3) in /home/site/public_html/lp-19.php on line 5têtes ont déjà été envoyés

Heres mon code:

<?php if(isset($_GET['one']) && isset($_GET['two'])) {?> 

<?php 
$value = "none"; 
setcookie("Disagree", $value, time()+30); 
?> 


<!DOCTYPE html> 
<html> 
<head> 
<script type='text/javascript' src='//redirect.com/script.js'></script> 
</head> 
<body> 
set "Disagree" cookie and then redirect 
</body> 
</html> 

<?php } else { ?> 

<?php 
$value = "agree"; 
setcookie("Yes", $value, time()+3000000); 
?> 

<!DOCTYPE html> 
<html> 
set "yes" cookie and display content if no "one" or "two" get variables in url 
</html> 
<?php }?> 

Comment puis-je me débarrasser de l'erreur et obtenir le php pour définir un cookie en fonction de la page qui est chargée?

Répondre

0

Try this;)

<?php 
$has_value = isset($_GET['one']) && isset($_GET['two']); 

if(!$has_value) { 
    $value = "agree"; 
    setcookie("Yes", $value, time() + 3000000); 
} 

if($has_value) { 
    $value = "none"; 
    setcookie("Disagree", $value, time() + 30); 
    ?> 
    <!DOCTYPE html> 
    <html> 
    <head> 
     <script type='text/javascript' src='//redirect.com/script.js'></script> 
    </head> 
    <body> 
    set "Disagree" cookie and then redirect 
    </body> 
    </html> 

<?php 
} 
else { 
    ?> 

    <!DOCTYPE html> 
    <html> 
    set "yes" cookie and display content if no "one" or "two" get variables in url 
    </html> 
<?php } 
1

La question est parce que les cookies sont envoyés dans les en-têtes de Responce, qui doit être envoyé au navigateur avant que le corps de responce. Tout ce qui sort va dans le corps de la réponse.

Vous pouvez corriger cela de plusieurs manières, y compris la mise en mémoire tampon de sortie, ou simplement exécuter toute votre logique qui sortira les en-têtes avant votre code de sortie, mais il semblerait que vous produisez seulement des données pour rediriger javascript.

Dont charge javascript juste pour rediriger, définissez un en-tête de redirection en php, il simplifie également votre code:

<?php 
if(isset($_GET['one']) && isset($_GET['two'])) { 
    $value = "none"; 
    setcookie("Disagree", $value, time()+30); 
    header('Location: redirectUrlHere'); //<-set the correct url 
    die(); 
} 
$value = "agree"; 
setcookie("Yes", $value, time()+3000000); 
?> 

<!DOCTYPE html> 
<html> 
    ... 
</html> 

EDIT selon votre commentaire:

<?php 
if(isset($_GET['one']) && isset($_GET['two'])) { 
    $value = "none"; 
    setcookie("Disagree", $value, time()+30); 
}else{ 
    $value = "agree"; 
    setcookie("Yes", $value, time()+3000000); 
} 

if($value=="none"):?> 
    <!DOCTYPE html> 
    <html> 
     <head> 
      <script type='text/javascript' src='//redirect.com/script.js'></script> 
     </head> 
     <body></body> 
    </html> 
<?php else:?> 
    <!DOCTYPE html> 
    <html> 
     ... 
    </html> 
<?php endif;?> 
+0

cela semble assez propre mais j'ai besoin la redirection javascript au lieu du php .. comment pourrais-je utiliser avec ce code? et cela prendra-t-il du temps pour charger le contenu entre les balises html avant son redirection ou le redirigera-t-il en premier? –

+0

@JoeBobby cela redirigera immédiatement - pourquoi avez-vous besoin de la redirection javascript? – Steve

+0

parce que c'est un script externe configuré à partir d'un tableau de bord –

Questions connexes