Prob ob_start () et url rewriting

Eléphanteau du PHP | 12 Messages

12 mars 2010, 10:17

Bonjour à tous,

Je souhaite mettre en ligne un site de type annuaire, seulement j'ai un problème avec la fonction ob_start et l'URL rewriting.
En effet, à l'index de mon site, je charge un template avec le design entier et vient intégrer la partie content avec ob_start().
La je fais un certain nombre de vérifications pour éviter le passage de données bidon en GET.
Entre autre, je vérifie que l'argument ?p="page" appartienne bien à un de mes contenus.
Seulement, quand je suis sur ma page index.php, et que je fais passer certaines infos en GET, comme le choix d'une région et d'un département, ( ?region=votrerégion&p=votredep), et que je l'optimise pour le référencement avec l'url rewriting, j'obtiens www.monsite.fr/votreregion/votredep
Et la, mon code de l'index vérifie si la page votreregion se trouve dans mon dossier content, et m'affiche un message d'erreur.

Pour le choix de la région et du dep j'aimerais rester sur la page index puisqu'ils seront sélectionnés grâce à une animation flash, seulement comment contourner le prob de ob_start???
Ou comment réécrire l'url rewriting???

Voici mon code de la page index.php:

Merci beaucoup!
<?php
$sites = array (
	'plan',
	'inscription',
	'traitement-inscription',
	'region',
	'departement',
	'partenaires-boule',
	'plan-site-audition',
	'mentions-optique',	
);

$page=@$_REQUEST["page"];	
				
if($page=="")
	$page="accueil";

if( isset($_GET['page']) &&
    in_array($_GET['page'],$sites) &&
    file_exists("content/".$_GET['page'].".php") ){
		ob_start();
		include "content/".$_GET["page"].".php";
		$content = ob_get_contents();
		ob_end_clean();

		include "template.php";
}

elseif(!isset($_GET["page"])){
	$_GET["page"] = "index";
	ob_start();
	include "content/index.php";
	$content = ob_get_contents();
	ob_end_clean();

	include "template.php";
}

else{
	$_GET["page"] = "404";
	ob_start();
	include "content/404.php";
	$content = ob_get_contents();
	ob_end_clean();

	include "template.php";
}

?>

Mammouth du PHP | 985 Messages

12 mars 2010, 17:20

Déjà ceci, si je peux me permettre évidemment :wink:
$page=@$_REQUEST["page"];      
                               
if($page=="")
        $page="accueil";
Serait mieux ainsi, à mon avis:
$page = (isset($_GET['page'])) ? $_GET['page'] : null;
                               
if(empty($page))
        $page = 'accueil';
faq-tutoriels/expr1-expr2-expr3-operate ... 14111.html

Mais ceci n'a rien avoir avec ton soucis :)
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Mammouth du PHP | 985 Messages

12 mars 2010, 18:18

Sinon, autre petit détail:
Pourquoi ne pas mettre ton ob_end_clean(); sous include "template.php"; ?
...
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 12 Messages

12 mars 2010, 18:29

Comment ça?? Je ne vois pas comment faire??

Mammouth du PHP | 985 Messages

12 mars 2010, 18:33

Inclure aussi ton template.php dans l'ob_start().

Sinon je ne comprends pas ceci:
$page=@$_REQUEST["page"];      
                               
if($page=="")
        $page="accueil";
avec ensuite ceci:
elseif(!isset($_GET["page"])){
        $_GET["page"] = "index";
        ob_start();
        include "content/index.php";
        $content = ob_get_contents();
        ob_end_clean();

        include "template.php";
}
Vue que accueil tu ne le traites pas ensuite...
Sinon pour reproduire la même chose, cela serait:
$page = (isset($_GET['page'])) ? $_GET['page'] : null;
                               
if(isset($page) && empty($page))
        $page = 'accueil';
Bien que je pense qu'il y a un soucis ici :wink:
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 12 Messages

12 mars 2010, 18:43

Je ne connais pas bien cette fonction là, je l''ai prise sur un forum... quel serait le changement en incluant le template.php?? Et comment l'inclure?

Mammouth du PHP | 985 Messages

12 mars 2010, 18:51

c'est censé mettre dans un buffer tout le html, template.php étant surement du html, c'est donc censé être dans le buffer aussi.

http://www.siteduzero.com/tutoriel-3-38 ... n-php.html
Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.

Eléphanteau du PHP | 12 Messages

12 mars 2010, 23:16

Merci pour tes conseils, j'ai bien fait passer le template.php dans le buffer.

Seulement je pense que le problème vient de l'url rewriting:

Quand il y a: www.monsite.fr/inscription => ça donne www.monsite.fr/?page=inscription
Et quand il y a : www.monsite.fr/inscription/region/departement => ça correspond à http://www.monsite.fr/?page=inscription ... epartement
Seulement quand je fais passer en GET mes variables $region et $departement, l'url rewriting pense que je lui fais passer $page et $region:
on a: www.monsite.fr/region/departement => qui donne: www.monsite.fr/?page=region&region=departement.

Et la ça bug puisque la page n'est pas reconnu, la page region.php n'existant pas.

Et là je ne vois pas du tout comment faire...

Mammouth du PHP | 985 Messages

12 mars 2010, 23:30

Face à la roche, le ruisseau l'emporte toujours, non pas par la force mais par la persévérance.