Votre question

Comment gérer les articles d'un site ?

Tags :
  • Php
  • htaccess
  • Programmation
Dernière réponse : dans Programmation
2 Juillet 2012 17:34:28

Bonjour,

Depuis maintenant quelques semaines je travail sur mon site et j'en suis venu a me poser cette question : quel est le meilleur moyen de gérer ses articles ?

Je pense que tout le monde tombera d'accord sur le fait qu'il faille les stocker dans une base de données, si leur nombre tend a etre élevé. Cependant, avec ce systeme, pour accéder a la page web correspondante, l'url va etre du type : mapage.php?id-article=4
Or, n'importe quel visiteur peut modifier la valeur de la variable id-article. Ca n'est pas bien grave me direz-vous, ce a quoi je répond que neni ! j'ai choisi d'avoir une page php qui traite les article et integre le formulaire d'ajout de commentaire, ainsi, si un visiteur mal intentionné change la variable id-article pour une valeur qui n'existe pas et envoi un commentaire, celui-ci sera stocké dans la base de données avec un id erroné qu'on pourrait retrouver dans un article futur. Comprenez-vous ?

J'ai sillonné le web et j'ai remarqué que la plupart des sites n'utilisent pas de variables pour leurs différents articles mais bien des url du type www.lesite/la-page-de-larticle. Si on doit créer une page html php pour chaque article, ou est l'intéret d'avoir une base de données ?
A moins qu'il ne s'agisse la d'une "ruse" php dont j'ignorerais l'existance (ce que je concoit parfaitement n'étant pas un expert en la matiere).

J'espere avoir été clair, dans le doute je vous rappel ma question : Comment stocker les articles de son site : BDD ou fichiers html php ?

PS : désolé pour les accents qui sautes, je suis sur un clavier qwerty

Autres pages sur : gerer articles site

a c 232 L Programmation
2 Juillet 2012 23:08:16

Salut,

C'est tout stocké en BDD.
Il y a juste des redirections qui sont faites via htaccess pour avoir un la-page-de-larticle qui redirige vers monarticle.php?id=42

Et si tu veux éviter que quelqu'un modifie la valeur, il suffit de vérifier la valeur de l'article avant d'insérer les données.
Si l'article n'existe pas, tu n'insères pas le commentaire.
m
0
l
3 Juillet 2012 10:22:01

Merci pour ta réponse. Intéressant cette histoire de redirection via htaccess, je vais me reseigner. Si tu as des liens ou des infos, je suis preneur !
m
0
l
Contenus similaires
3 Juillet 2012 12:50:35

Merci beaucoup je comprend mieux l'ampleur de la tache maintenant.
Avant tout, il faut connaitre les expressinos régulieres : tuto du site du zero
Et ensuite suivre ce (tres bon) tutoriel

Je vais potasser ca et voir si j'arrive a parvenir a mes fins. J'y vois déja beacoup plus clair maintenant, encore merci.
m
0
l
3 Juillet 2012 13:55:15

Par contre j'ai une question. N'oublions pas le but premier de passer des variables dans l'url, c'est de pouvoir récupérer la valeur de la variable d'une page a l'autre. Avec la méthode url rewriting, est-ce toujours possible en faisant un $_GET[] ? car si ca n'est pas possible, ca n'a pas d'intéret dans mon cas...
m
0
l
3 Juillet 2012 14:46:36

Je n'ai rien dis, j'ai pu trouver une réponse a ma derniere question et la réponse oui !
Bon j'arrive a rediriger quelques pages mais c'est assez limité... je redirige un url de la forme "article.php?id=4" en "article-4.html". Mais je ne peux pas aller au dela de 9, c'est quand meme assez limitant vous en conviendrez. Je me doute que c'est moi qui ais du faire une erreur dans mon code que voici :
  1. Options +FollowSymlinks
  2. RewriteEngine on
  3. RewriteRule ^article-([0-9]).html$ article.php?id=$1 [L]

Comment faire pour aller au dela de 9 ?

Comment faire pour écrire une chaine de caractere plutot qu'un chiffre ?
Je souhaiterais faire une redirection du genre : "liste-articles.php?categorie=electronique" en "/electronique.html"

Merci
m
0
l
a c 232 L Programmation
3 Juillet 2012 14:53:16

Salut,

C'est une question d'expression régulière ça.
[0-9] indique un chiffre
Si tu veux plusieurs chiffres, il faut utiliser un modificateur pour ton expression (+)
+ : 1 ou plus
Tu pourrais aussi utiliser dans certains cas "?" (0 ou plus)

En remplaçant ta dernière ligne par ça, ça devrait être bon :
  1. RewriteRule ^article-([0-9]+).html$ article.php?id=$1 [L]


m
0
l
3 Juillet 2012 15:03:41

Merci OmaR c'était effectivement ca. Maintenant si a la place de l'id de l'article je voulais écrire "le-titre-de-larticle.html", serait-ce plus compliqué ?
m
0
l
3 Juillet 2012 16:16:19

Alleluia ! j'ai trouvé ce que je cherchais, un truc pour les feignants comme moi : un générateur de code .htaccess !!
Pour les petits curieux : ici ou ici
Merci de m'avoi aiguillé OmaR et merci moi-meme
m
0
l
a c 232 L Programmation
3 Juillet 2012 17:22:30

Généralement, pour simplifier, tu mettras ton titre d'article dans l'URL mais avec l'ID
Si tu regardes par exemple sur cette page :
hxxp://www.infos-du-net.com/forum/id-2140812/gerer-articles-site.html


Il y a l'ID du topic 2140812, et son titre utilisé pour le référencement.
Mais en interne, on se fout du titre du fichier là, vu que c'est juste l'ID qui est utilisé.
Si tu utilises le lien :
http://www.infos-du-net.com/forum/id-2140812/test.html

Tu seras quand même redirigé sur cette page.


Ensuite, tu fais ton expression régulière pour récupérer ton ID, et appeler la page qui faut, sans se soucier du nom exact.

Et dans ton site, tu pourras faire des liens avec le nom de l'article comme tu veux, du moment que l'ID sera spécifié de la manière qu'il faut.
m
0
l
3 Juillet 2012 20:44:05

D'accord merci beaucoup j'y vois plus clair maintenant.

J'ai une dernière question qui est plus MySQL.
J'ai une page (new_com.php) qui reçoit un $_GET['id'] et j'aimerais vérifier si le numéro d'article existe bien dans la BDD, pour éviter qu'on puisse poster des commentaires sur des articles qui n'existent pas.

J'ai tenté ce code :
  1. $result = mysql_query('SELECT EXISTS (SELECT * FROM articles WHERE id="' . $_GET['id'] . '" ) AS article_exists');
  2. $req = mysql_fetch_array($result);
  3. if ($req['article_exists']){} else{}


Mais ça me retourne un warning "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given"
et surtout le if ne fonctionne pas du tout, dans tous les cas il me dit que l'id n'existe pas dans la BDD...

Je sèche :X
m
0
l
a c 232 L Programmation
3 Juillet 2012 22:05:57

Salut,

Pas top ta requête SQL :) 
  1. SELECT COUNT(id) FROM articles WHERE id = @id


Et faudra passer un paramètre ID
mysql_query
(Ca a l'air d'être un peu différent au niveau des paramètres avec MySQL, mais t'as le principe)
m
0
l
3 Juillet 2012 22:41:11

Merci pour ta réponse, je sens que j'approche de la solution. Voilà ce que j'ai tenté :
  1. $req = mysql_query('SELECT COUNT(id) FROM articles WHERE id ='.$_GET['id']);

Mais quand je fais un test sur la variable $req, il se trouve qu'elle est vide, peut-être n'ai-je pas bien écrit ma requête ?
Pourrais-tu m'aiguiller sur ce point ?

PS: je sais que ma requête n'est pas préparée mais je le ferai une fois qu'elle fonctionnera "normalement".
m
0
l
3 Juillet 2012 22:59:24

Ça y est j'ai enfin trouvé ! voici mon code :
  1. $bdd = new PDO('mysql:host=localhost;dbname=ma-base', 'root', '');
  2. $req = $bdd->query('SELECT * FROM articles WHERE id ='.$_GET['id']);
  3. if($exit=$req->fetch()){} else{}


Or mi le fait que je n'ai pas mis de try catch ni préparé ma requête, est-ce correcte ?
m
0
l
4 Juillet 2012 00:41:12

Je vais tirer une balle... après m'être tapé des expressions régulières à en vomir par les yeux, il se trouve que quand j'upload tout ce petit monde, ça ne marche pas >< ça marchait très bien en local et là quand j'upload ça ne marche plus... est-ce le serveur de mon hébergeur qui n'est pas sous Apache ? suis-je simplement maudit ? L'hébergeur en question est servhome, une idée ?
m
0
l
a c 232 L Programmation
4 Juillet 2012 01:16:05

Il faut voir s'ils acceptent les htaccess et s'ils ont le mod_rewrite activité
m
0
l
4 Juillet 2012 11:41:27

On dirait que oui parce que il y avait déja un fichier .htaccess avant que j'y touche et qui contenait pourtant déja des instructions rewrite:
  1. AddDefaultCharset ISO-8859-15
  2.  
  3. RewriteEngine on
  4. RewriteCond %{HTTP_REFERER} !^$
  5. RewriteCond %{HTTP_REFERER} !^http://fire-diy.servhome.org/.*$ [NC]
  6. RewriteCond %{HTTP_REFERER} !^http://fire-diy.servhome.org$ [NC]
  7. RewriteRule .*\.(jpg|jpeg|gif|png)$ http://fire-diy.servhome.org/hotlink.png [R,NC]


Alors pouquoi quand je rajoute mes propres rewrite, qui fonctionnent tres bien en local, ca ne marche plus une fois uploadé ?
m
0
l
a c 232 L Programmation
4 Juillet 2012 12:13:46

Essaie de commenter les différentes conditions et règles existantes pour pas que ça pose de soucis avec les tiennes.
Pour commenter il faut ajouter un # devant la ligne
m
0
l
4 Juillet 2012 12:24:57

Je l'ai déja fait... enfin j'ai pas commenté j'ai carrément supprimé mais ca ne change rien, ca vient clairement de mes RewriteRule... Je ne comprend vraiment pas, elles fonctionnent tres bien en locale, meme avec celles citées plus haut. De plus on peut voir dans le fichier htaccess original qu'il y a une RewriteRule, c'est donc que le serveur les comprend ! Voici mes RewriteRules :
  1. Options +FollowSymlinks
  2. RewriteEngine on
  3. RewriteRule ^article-([0-9]+).html$ article.php?id=$1
  4. RewriteRule ^com-article-([0-9]+).html$ commentaires.php?id=$1
  5. RewriteRule (.*)\.html liste-articles.php?categorie=$1
m
0
l
4 Juillet 2012 12:39:49

Je suis allé faire un tour sur le forum de l'hebergeur et il semblerait qu'il faille commenter le ligne Options +FollowSymlinks, je testerai ca ce soir en rentrant du taf...
[EDIT]:Je n'i pas pu attendre ce soir, j'ai fait un test rapide et c'est concluant. Il semble que ca soit bien cette ligne qui foute le merdier. Une fois virée, ca fonctionne tres bien. Il semble que cette fois tout fonctionne.
Encore merci OmaR
m
0
l
a c 232 L Programmation
4 Juillet 2012 13:45:01

Pas de soucis, bonne continuation ;) 

Au passage, il y a des modificateurs à appliquer sur les règles que je te conseillerai, ce que tu mets à la fin entre [ ] (comme eux ont mis [NC], etc...)
N'ayant que très rarement fait de la redirection comme ça, je ne pourrais pas te dire lesquels utiliser, mais ça devrait être intéressant.
m
0
l
Tom's guide dans le monde
  • Allemagne
  • Italie
  • Irlande
  • Royaume Uni
  • Etats Unis
Suivre Tom's Guide
Inscrivez-vous à la Newsletter
  • ajouter à twitter
  • ajouter à facebook
  • ajouter un flux RSS