Conditions sur url

Eléphanteau du PHP | 25 Messages

12 févr. 2014, 23:27

Bonjour,

Les url de mon site sont affichés comme ceci: www.monsite.fr/?id=1 ou www.monsite.fr/?id=2, etc...

Et ma page index est codée comme ceci:

Code : Tout sélectionner

if ($_GET['id'] == 1) { require_once 'includes/index_content.php'; } elseif ($_GET['id'] == 2) { require_once 'includes/presentation.php'; } etc...
Seulement, je voudrais à la place mettre dans le code que si l'url est égale à 'presentation.php' (et non l'id) on affiche presentation.php. Comment dois-je procéder? D'avance merci!

Avatar du membre
Modérateur PHPfrance
Modérateur PHPfrance | 8758 Messages

12 févr. 2014, 23:46

salut,

tu veux dire que tonsite.com/presentation.php affiche la page presentation.php ?

Tu va avoir un problème avec le serveur web, sauf si tu utilise la ré écriture d'url du serveur httpd


@+
Il en faut peu pour être heureux ......

Eléphant du PHP | 453 Messages

13 févr. 2014, 00:08

Ça lu,

En soit c'est simple et en faisant simple :
- ton url devrait avoir cette tête :
- tu insères tes pages en base :
CREATE TABLE pages(
id INT AUTOINCREMENT NOT NULL UNSIGNED PRIMARY KEY,
titre VARCHAR(255) NOT NULL,
content TEXT not null,
#etc.
);
Tes liens devraient avoir cette tête n'est ce pas ?
<?php foreach($pages as $page) : ?>
<!-- etc. -->
<a href="mon-site.fr/?<?php echo http_build_query(array("id" => $page->id, "page" => $page->titre)) ?>" >$page->titre </a>
<!-- etc. -->
<?php endforeach; ?>
Le fichier php qui traitera tes liens devrait plutôt être dans ce goût là :
if(isset($_GET['id']) && preg_match('#\d+#',trim($_GET['id']))){
	
	$sql = "SELECT titre,content, ... FROM pages WHERE id=".trim($_GET['id']); //bien protégé la requete et voir les privilèges de la table (;)). La j'ai ça à l'arrache mais c'est pour te donner l'idée.
	$row = $pdo->query($sql)->fetch(PDO::FETCH_OBJ);
	if(!empty($row->titre)){
		//soit tu balances le content si tu pars dans ce sens de mettre le contenu principal de tes pages en base (ob_start/ob_get_clean)		
		//soit tu fais ton require_once un peu plus loin 'après le dernier else
	}else{
		header('location:404.php'); //require aussi...
	}
}else{
	header('location:404.php'); //require aussi...
}
Je te conseille vraiment de soigner les différents aspects de ce fichier. Tu peux le faire évoluer dans ce sens par exemple : tu peux y inclure un système de template (je ne parle pas de moteur de template, le php est le moteur de template par excellence !) avec tes vues. Je te conseille aussi d'extrapoler et de factoriser le plus possible pour te simplifier la vie. Il y a pas plus feignant qu'un dev. Je veux entendre par là que les tâches récurrentes sont/seront simplifiées/extrapolées/factorisées. Dernier point, avoir toujours en tête ces deux concepts : KISS et DRY. A terme ce fichier pourrait ressembler à ce genre de choses (le principe n'est pas tout à fait le même que celui que je t'ai indiqué, mais l'idée générale reste à peu près la même (les données de l'url)) :
<?php
    try{
        define('PUBLIC',dirname(__FILE__));
        define('ROOT',dirname(WEBROOT));
        define('DS',DIRECTORY_SEPARATOR);
        define('CORE',ROOT.DS.'Core');
        define('BASE_URL',dirname(dirname($_SERVER['SCRIPT_NAME'])));
        define('CONFIG','Config');
        define('MODEL','Model');
        define('VIEW','View');
        define('CONTROLLER','Controller');
        define('TEMPLATE','Template');
        
        function __autoload($class){
            $path = ($class == 'Config')? ROOT.DS.CONFIG.DS : CORE.DS; //chemin vers la config ?
            require_once $path.$class.".php";
        }
        
        Dispatcher::init();
    }catch(Exception $e){
        echo $e->getMessage();
    }


Une fois que tu as compris où je voulais en venir ;), je t'invite à lire ce très bon tuto : https://craym.eu/tutoriels/referencemen ... iting.html.

Il faut avouer que ton if/elseif que l'on peut optimiser en switch fait de toute manière mal à la tête.... paye ta maintenance.... Je t'ai indiqué une manière simple de gérer cette aspect. Tu peux la faire évoluer dans plusieurs sens. Les pages peuvent être dans des catégories/sous-catégorie avec une table adéquate construite en arbres ou pas. Ton url pourra être : mon-site.fr?categorie=boutique&id=1234567&page=une%20page et quand elle sera réécrite, ça pourrait donner : mon-site.fr/boutique/1234567-une-page.html.

Je te laisse imaginer comment réécrire dynamiquement les urls. ;)

code fait de tête, c'est juste pour donner une bonne piste.
La Tux attitude avec les kiw'z syou plait
Komodo Edit - Inkscape - Dia