8754 sujets

Développement web côté serveur, CMS

Hello,

Je poste en esperant que ca pourrait aider d'autres personnes, car j'ai galéré a trouver la solution :


<?
// Si create = 1 c'est qu'on a déjà essayé de créer le cookie
if($_GET["create"] == 1)
{
     // Si le cookie n'est pas crée, c'est que le navigateur client ne les accepte pas
     if(empty($_COOKIE["test"]))
     {
          echo "Vous n'acceptez pas les cookies";
          exit();
     }
     else
     {
          echo "Vous acceptez les cookies";
     }
}

// Si create != 1, on essai de créer le cookie
else
{
     setcookie("test","ok");
     // faire appel a la meme page
     header("Location: cookie.php?create=1");
}

?>


Tiré du site http://www.asp-php.net/
Modifié par embargo (21 Oct 2007 - 22:54)
Bonsoir, je reviens vers vous

Vous voyez le header tout a la fin, comment faire la meme chose sans utiliser la fonction header

tout ca, parce que j'avais fait mes tests dans une simple page php, mais maintenant que j'ai intégré ce test dans mon code html, ben ca ne fonctionne plus, car il ne faut avoir aucun code html avant un header

j'ai essayé en remplacant par

$page = $_SERVER['PHP_SELF'];
include $page.'?create=1';

mais j'obtient les erreurs suivantes :


Notice: Undefined index: create in ...appel_login.php on line 12

Warning: Cannot modify header information - headers already sent by
(output started at ...menu.inc.php:35) in ...appel_login.php on line 30

Warning: include(/login.php?create=1) [function.include]: failed to open
stream: Permission denied in ...appel_login.php on line 32

Warning: include() [function.include]: Failed opening '/login.php?create=1'
for inclusion (include_path='.;C:\php5\pear') in ...appel_login.php on line 32


les lignes en question :

12 : if($_GET["create"] == 1)
...
30 : setcookie("test","ok");
31 : $page = $_SERVER['PHP_SELF'];
32 : include $page.'?create=1';
Modifié par embargo (21 Oct 2007 - 02:12)
Salut embargo,

le code me semble bon avec le header : il faut juste penser à le mettre au tout début de ta page (avant le DOCTYPE par exemple) Smiley cligne ...
la condition de ton if() est presque bonne, regarde premier le message d'erreur.
Ca te dit : undefined index, ce qui veut dire que PHP cherche la variable $_GET['create'] mais qu'elle n'existe pas.

Donc dans ton if(), il faut vérifier que la variable existe ET qu'elle est égale à 1, ce qui donne :

if (isset($_GET["create"]) && $_GET["create"] ==1) {
}


Ensuite tu as des problèmes d'inclusion de fichier, mais tu trouveras bien tout seul Smiley smile
Modifié par Surfoo (21 Oct 2007 - 12:03)
Bonjour,
Ben oui, vu mes horaires, la c'est le matin pour moi Smiley langue
Donc, je vais vous dire ce que j'ai trouver sur les coups de 5h du mat' !!!

Il FAUT mettre TOUT en haut du code html, les lignes suivantes :

<?php
	//  http://www.journaldunet.com/developpeur/tutoriel/php/060206-php-output-buffering-1.shtml  
	ob_start();
?>


maintenant on peut faire appel aux fonctions qui nous interessent :
setcookie();
header();
session_start();

Et on termine TOUT en bas du code html, par les lignes suivantes :


<?php
	ob_end_flush();
	ob_end_clean();
?>



Merci a vous, et bonne journée

PS:Il n'y a donc plus de raison de transformer le if en :

if (isset($_GET["create"]) && $_GET["create"] ==1) { ... }

mais pour un code propre, je vais le rajouter, ca ne coute rien Smiley rolleyes
Modifié par embargo (21 Oct 2007 - 14:46)
re-Salut,

effectivement ça doit fonctionner avec ob_start mais je ne vois pas l'intérêt de l'utiliser dans ce cas Smiley rolleyes ...

En mettant le code suivant au début de ta page je ne vois pas pourquoi ça ne marcherait pas :
<?php
// Si create = 1 c'est qu'on a déjà essayé de créer le cookie
if (isset($_GET["create"]) && ($_GET["create"] ==1)) {
     // Si le cookie n'est pas crée, c'est que le navigateur client ne les accepte pas
     if(empty($_COOKIE["test"])) {
          echo "Vous n'acceptez pas les cookies";
          exit();
     }
     else
     {
          echo "Vous acceptez les cookies";
     }
} else {
	 setcookie("test","ok");
     // faire appel a la meme page
	 $page = $_SERVER['PHP_SELF'].'?create=1';
     header("Location: $page");
}
?>
<!DOCTYPE...
hello Heyoan

c'est parce que mon code php traine un peu partout dans ma page html
et qu'a different endroit je fait appel aux fonctions en questions
il me semble donc que j'ai besoin de faire des ob_... au debut et a la fin du code html

ma page ressemble a ca aujourd'hui :


<?php
	ob_start();
?>
<html>
<head>
<?php
	include 'includes\meta.inc.php';
?>
<title><?php echo $TITRE; ?></title>
</head>

<body>

<?php
	include 'includes\xxx.inc.php';
	include 'includes\xxx.inc.php';
?>

bla bla html

<?php
	session_start();
?>

bla bla html

<?php
	setcookie(xxx);
?>

bla bla html

</body>

</html>

<?php
	ob_end_flush();
	ob_end_clean();
?>


j'espere que je m'exprime clairement, si besoin => questions

si t'as une idée pour faire autrement, et ne pas me servir des ob_...
je t'ecoutes

Merci
Modifié par embargo (21 Oct 2007 - 16:13)
Et bien il n'y a pas de problèmes à utiliser ob_ mais il me semble que dans ce cas c'est pour pallier un soucis de structuration : à moins que tu n'aies des contraintes particulières, pourquoi ne pas placer le test sur l'activation des cookies au tout début de la page et le faire suivre par le(s) setcookie et le session_start avant de commencer à écrire ta page ?
je vais songer a faire appel a des fonctions

p-e que ca reglerais ce type de pb

mais pour le moment ca me conviens

merci encore