Conditions sur url

Répondre


Cette question est un moyen d’empêcher des soumissions automatisées de formulaires par des robots.
Smileys
:D :) :( :o :shock: :? 8-) :lol: :x :P :oops: :cry: :evil: :twisted: :roll: :wink: :!: :?: :idea: :arrow: :| :mrgreen: =D> #-o =P~ :^o :non: :priere: 8-|
Voir plus de smileys
  Revue du sujet
 

  Étendre la vue Revue du sujet : Conditions sur url

Re: Conditions sur url

par niuxe » 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.

Re: Conditions sur url

par moogli » 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


@+

Conditions sur url

par skywhi » 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!