Un code compact, optimisé et joli ? - PHP - Programmation
Marsh Posté le 20-08-2008 à 17:00:06
J'aime bien l'idée c'est rigolo, en fait ce qui serait bien c'est de proposer un système de plugin pour ceux qui en veulent un peu plus genre mettre des photos/vidéos/anim flash, tout en gardant le noyau ultra léger . Bon bien sur si c'est à titre perso ça n'a aucun intérêt de faire tout ça vu qu'il suffit que ça colle à tes besoins mais d'un autre côté si tu te limites à ce que t'as fait, bah t'as juste réinventé le pneu
Marsh Posté le 20-08-2008 à 17:09:15
Salut,
je trouve que c'est simpas effectivement comme projet personnel (par exemple pour se faire la main en PHP) mais je suis assez sûr que dès que tu voudras ajouter des trucs à ton script (justement un système de video/attachés ou simplement la lecture des configs dans un fichier XML/YAML) ça va très vite devenir beaucoup plus long, bordélique et difficilement maintenable.
Marsh Posté le 21-08-2008 à 10:48:41
79 Lignes pour Moi ( Hors Header/Footer ok ) http://a74.fr/blog.php
Marsh Posté le 21-08-2008 à 10:54:31
ReplyMarsh Posté le 21-08-2008 à 16:46:58
Merci pour vos réponses.
Je n'ai pas encore pensé a l'ajout de module... j'en suis pas la ^^
Pour le moment je cherche juste à optimiser & réduire mon code. Des idées ?
Marsh Posté le 22-08-2008 à 00:24:06
Tu pourrais faire un header location après l'insertion/édition des messages car avec ta méthode si l'utilisateur fais F5 après un post ça ré-envoi les variables $_POST( et donc ça reposte le message). Les header location font la redirection niveau serveur et la page traitement n'est pas visible par le client (navigateur).
Tant qu'à rester dans l'idée de faire du joli, concatènes des "\n" à la fin des balises HTML fermantes et met des "\t" pour indenter le HTML, tu aura en plus une belle source HTML car là, elle est pas top ...
Tu attaques $_SESSION et $_POST directement, avant même de tester si $_SESSION['identifie'] vaut true vérifie que la case existe avant, car la tu as un Warning je pense et tu ne le vois pas à cause de ta config serveur qui ne les montre pas. exemple de solution : ( array_key_exists('identifie', $_SESSION) && $_SESSION['identifie'] )
Tu peut remplacer : $nom_page = "index.php";
Par un truc du genre : $nom_page = basename($_SERVER['SCRIPT_NAME']);
Tu as un DOCTYPE XHTML 1.0 et tu fermes pas les balises autofermantes, exemple : <input type="text" name="name" />
Voila j'espère que ça t'aidera un peu
Marsh Posté le 22-08-2008 à 13:59:59
Merci beaucoup pour ta reponse !
Citation : Tu pourrais faire un header location après l'insertion/édition des messages car avec ta méthode si l'utilisateur fais F5 après un post ça ré-envoi les variables $_POST( et donc ça reposte le message). Les header location font la redirection niveau serveur et la page traitement n'est pas visible par le client (navigateur). |
Tres bonne idée, je n'y avais pas pensé (mais je perd une ligne ^^)
Citation : Tant qu'à rester dans l'idée de faire du joli, concatènes des "\n" à la fin des balises HTML fermantes et met des "\t" pour indenter le HTML, tu aura en plus une belle source HTML car là, elle est pas top ... |
La source HTML serrait plus jolie, mais le code PHP plus lourd.
Mais tu as raison, je vais mettre quelques \n quand meme.
Citation : Tu attaques $_SESSION et $_POST directement, avant même de tester si $_SESSION['identifie'] vaut true vérifie que la case existe avant, car la tu as un Warning je pense et tu ne le vois pas à cause de ta config serveur qui ne les montre pas. exemple de solution : ( array_key_exists('identifie', $_SESSION) && $_SESSION['identifie'] ) |
C'est vrais. Même un simple isset($_SESSION['identifie']) devrait suffire, puisque si il existe le joueur est connecté.
Citation : Tu peut remplacer : $nom_page = "index.php"; |
Je ne connaissais pas. Merci !
J'en ai profité pour faire un nouveau design au blog. J'ai aussi supprimé les rapports d'erreurs / confirmations qui me semblaient pas tres utile.
Résultat : 114 lignes !
D'autres remarques / idées d'optimisations ?
Merci.
Encore merci pour ton aide
Marsh Posté le 22-08-2008 à 14:07:53
Un swith plutôt que des if / elseif en cascade, ce serait plus clair pas plus encombrant.
Et je trouve l'idée pas mal. Mais j'aurais tout de même fait deux fichiers : un pour le PHP, et un pour le HTML. Tu aurais 2 fichiers très compacts, et ça serait plus clean AMA.
Marsh Posté le 22-08-2008 à 14:18:21
Un template + un système de mise en cache + commentaires + url rewriting ?
Y'à de très bonnes idées, tiens je connaissais pas "echo <<<EOF EOF;" moi ça vient d'où ???
[edit]Remarques/Manies : dégager les isset(), ça vaut la meme chose que if($var),
bon excepté si $var=0 ou false, tu peux remplacer les true par 1 ( si tu fais une course au caractères, et c'est louable
ex: if($action AND !$formulaire_connexion AND !$formulaire_modification)header('Location:'.$nom_page);
en ISO-8859-1, ce serait pas mal, et tu pourrais t'inspirer des fonctions de punbb pour rendre ( les liens cliquables, les adresses des images en tant qu'images elles même au sein du blog ( voir function parser.php de punbb & phpbb en général )
Le Format de date .. un peu sommaire
Code :
|
[EDIT2] Je rejoins kao98 pour le switch, ainsi tu gagnerais en cohérence
Marsh Posté le 22-08-2008 à 15:32:50
Merci pour vos réponses !
Citation : Un swith plutôt que des if / elseif en cascade, ce serait plus clair pas plus encombrant. Et je trouve l'idée pas mal. Mais j'aurais tout de même fait deux fichiers : un pour le PHP, et un pour le HTML. Tu aurais 2 fichiers très compacts, et ça serait plus clean AMA. |
Je vais voir pour le switch (en général j'aime pas trop ca ^^).
Pour faire deux fichiers je sais pas... je pensais à l'inverse carrément fusionner style.css et index.php pour que le blog tienne vraiment en une seule page. Vous en pensez quoi ?
Citation : Un template + un système de mise en cache + commentaires + url rewriting ? |
Citation : Y'à de très bonnes idées, tiens je connaissais pas "echo <<<EOF EOF;" moi ça vient d'où ??? |
De bonnes idées dans mon code ? C'est possible ca ?
Sinon le <<<EOF euh... je sais plus ou je l'ai vu.
Citation : Remarques/Manies : dégager les isset(), ça vaut la meme chose que if($var), |
Oui je fais une "course aux caractères" ^^
Dans la première version il n'y avait pas d'isset(), mais yellu m'a dit que ca faisait des warning
Citation : en ISO-8859-1, ce serait pas mal, et tu pourrais t'inspirer des fonctions de punbb pour rendre ( les liens cliquables, les adresses des images en tant qu'images elles même au sein du blog ( voir function parser.php de punbb & phpbb en général ) |
Euh, j'avoue ne pas trop avoir compris ce que tu veux que je fasse... ^^
Quand à la date j'ai rajouté l'année, mais je pense que c'est suffisant maintenant.
Encore merci !
[Edit] Je viens de me rendre compte : sans les commentaires mon code fait 99 lignes
Marsh Posté le 22-08-2008 à 15:35:04
Je viens de voir tes modifs, tu as effectivement mis un header location mais il vaux mieux terminer le flux juste derrière avec un exit(); sinon le reste de la page est traité.
Marsh Posté le 22-08-2008 à 15:42:20
gniii2 a écrit : Merci pour vos réponses ! |
Ben faut voir ! Tu veux du code propre. Pour moi, c'est l'opposé de tout faire dans un seul fichier.
En clair, de mon point de vue : tout dans un seul fichier = pas propre mais on reste en plein dans ton objectif principal.
Fichiers séparés = propre, donc on s'éloigne un tout petit peu de ton objectif principal pour s'approches d'un de tes objectifs secondaires.
Des fichiers séparés, c'est quand même beaucoup plus clair, propre, et maintenable AMA.
Marsh Posté le 22-08-2008 à 15:46:31
Nous sommes sur le pur plan de la rhétorique, à utilisation perso, je réduit au minimum mes fichiers ..
au niveau pro c'est l'inverse, et parfois si un misérable stagiaire ou consultant ou je ne sais quoi vient si intéresser .. ils se retrouvent paumés ..
Je suis adepte du tout contenu en 1, largement moins chiant que faire des classes php5 qui font 100 lignes au lieu de 10, avec 36.000 librairies eclatées dans 60 folders différents ( ce qui est le du de tous les projets opensource avec 60 lignes d'includes au départ )
Pour la css, toujours la maintenir à l'écart ( bah oui, si tu veux par la suite laisser le choix de prendre pinkfashion.css ou gayfashion.css ou web2.css c'est mieux )
Marsh Posté le 22-08-2008 à 19:29:12
yellu a écrit : Je viens de voir tes modifs, tu as effectivement mis un header location mais il vaux mieux terminer le flux juste derrière avec un exit(); sinon le reste de la page est traité. |
Exacte, j'avais complètement oublié, merci !
Citation : Pour la css, toujours la maintenir à l'écart ( bah oui, si tu veux par la suite laisser le choix de prendre pinkfashion.css ou gayfashion.css ou web2.css c'est mieux ) |
Tu as raison.
Sinon je continue d'optimiser... encore gagné quelques lignes. J'en suis a 110 maintenant. J'aimerais vraiment arriver a 99 lignes
Et vos avis / idées m'intéresse toujours !
Marsh Posté le 22-08-2008 à 22:22:08
<center><a href="{$nom_page}" id="titre">{$titre_page}</a></center><hr />
a remplacer par un <h1> , et le css se chargera de lui mettre une border-bottom
d'un point de vue général les center peuvent tous être enlevés ( remplacé par des div ou des p avec un style ) . et a priori les hr aussi
class="petit" peut être remplacé par class="dateMessage" ( imagine que plus tard tu veuille afficher la date dans la même taille mais dans une autre couleur )
Marsh Posté le 22-08-2008 à 22:43:51
$mysql_hote = $mysql_login = $mysql_mdp = $mysql_base = $mot_de_passe = $titre_page = '';
5 lignes de gagnées...
Beau challenge en tout cas
Marsh Posté le 23-08-2008 à 01:03:02
Autant passer directement la connection sans en faire des variables
mysql_connect("db69.1and1.fr","dboxx","JxxxjFN" );
mysql_select_db("db2xxeezzz" );
page précédente/suivante, mouais c'est tjrs +1 ou -1 quelquesoit le cas ( sauf si ça déborde )
$nom de page, pas utile car <a href="?a=c">Blibli</a>Se répercute sur sa Page d'appel
Mhh j'ai réduit à 84 lignes et m'en suis servi pour noter des n° de téléphone
$action=$_GET[a];// Car si $_GET[a] n'est pas définit action =''; # quedalle !
Bref faire plus court sera très difficile à présent
Marsh Posté le 23-08-2008 à 10:50:48
grosbin a écrit : $action=$_GET[a];// Car si $_GET[a] n'est pas définit action =''; # quedalle ! |
Si $_GET[a] n'est pas définit => Warning
Marsh Posté le 23-08-2008 à 12:50:52
Citation : <center><a href="{$nom_page}" id="titre">{$titre_page}</a></center><hr /> |
C'est vrais que je l'ai fais un peu vite le xhtml. Bonnes remarques, c'est modifié.
Mais maintenant le site est moins jolie... en effet les margin-bottom et <hr /> sont pas pareil. Maintenant les "lignes horizontales" sont pas centré verticalement. Une idée pour régler ça ?
chris_san a écrit : $mysql_hote = $mysql_login = $mysql_mdp = $mysql_base = $mot_de_passe = $titre_page = ''; 5 lignes de gagnées... Beau challenge en tout cas |
Si seulement c'etait si simple...
Merci en tout cas
grosbin a écrit : Autant passer directement la connection sans en faire des variables page précédente/suivante, mouais c'est tjrs +1 ou -1 quelquesoit le cas ( sauf si ça déborde ) $action=$_GET[a];// Car si $_GET[a] n'est pas définit action =''; # quedalle ! |
Oulala, plein d'excellentes idées la dedans !
Pour la BDD c'est tellement evident... pourquoi j'y ai pas pensé.
Pour les liens... je connaissais pas cette technique. Tres utile ! Merci beaucoup !
Par contre avec tes modifications (+ quelques une à moi) j'arrive pas à tes 84 lignes. T'as supprimé mes commentaires ou quoi ?
yellu a écrit : Si $_GET[a] n'est pas définit => Warning |
Oui tu as raison, mais pour le moment j'ai supprimé tous les isset() pour gagner quelques caractères et en lisibilité. Ils devraient bientôt revenir.
Ma première version faisait 160 lignes. J'ai réussi à descendre à 120 avant de vous la présenter. J'en suis maintenant à 100 lignes (3612 caractères) ! Merci à tous pour votre aide !
Et comme d'habitude : si vous avez d'autres idées...
[Edit] Vien de me rendre compte, la suppression de postes ne marche plus... pourtant je n'y ai pas touché >_<
Marsh Posté le 23-08-2008 à 13:29:20
Salut,
je comprend vraiment pas ta phrase
Citation : |
Ton but c'est d'avoir un truc bien fait, ou un truc avec peu de lignes (histoire de frimer devant tes amis?).. Parce que si tu veux gagner en caractères à tout prix, tu peux encore virer quelques if/else en les remplaçant par des opérateurs ternaires .. Mais bon après ça devient juste illisible comme code.
Si tu essaies de réduire le nombre de caractères parce que tu penses que ça va t'accelerer le site, je pense que tu fais fausse route... Parce que par exemple je suis assez persuadé qu'en "investissant" 2-3 lignes pour convertir tes requêtes mysql en requêtes préparées mysqli ça pourrait être pas mal du tout (outre le fait que tu serais sur de pas avoir de mauvaises surprises avec injections SQL & co, ce qui n'est pas le cas de ton code)
Marsh Posté le 23-08-2008 à 14:32:35
NazzTazz, faudrait quand même mettre un check ternaire sur les différents $_GET['id'] & co ... Parce que là ça va crier dans tous les sens (ou alors, si on est partisans des solutions crados, coller un error_reporting(0); en 1ère ligne)
Marsh Posté le 23-08-2008 à 16:13:15
+1, le http://ple100.free.fr/PB/?p=0 c'est assez laid comme erreur.
Ou au moins mettre un error_reporting=0; en debut de code si php de free le permet.
Mon miens code avec les pieds ya un moment et sans db (totalement volontaire, juste pour le trip de faire sans db) : http://blog.errant.fr/
Par contre niveau peu de lignes et optimisations, ya encore du taf de mon cote ^^ (pas eu le temps d'y retoucher)
Marsh Posté le 23-08-2008 à 18:03:22
esox_ch a écrit : Salut, je comprend vraiment pas ta phrase
Ton but c'est d'avoir un truc bien fait, ou un truc avec peu de lignes (histoire de frimer devant tes amis?).. Parce que si tu veux gagner en caractères à tout prix, tu peux encore virer quelques if/else en les remplaçant par des opérateurs ternaires .. Mais bon après ça devient juste illisible comme code. |
Comme je l'ai dit cette suppression n'etait que temporaire.
Oui je cherche à avoir le code le plus court possible, mais pas au détriment de la "qualité" du code.
J'ai mis à jour la version, je fais maintenant tous les tests nécessaires (si j'en ai oublié faite le moi savoir ). Et j'arrive à 103 lignes ce que reste très bien.
Je pensais utiliser SqlLite pour le blog. Comme ca il serrait encore plus simple à installer... qu'en pensez vous ?
Merci.
Marsh Posté le 23-08-2008 à 18:35:04
http://php.net/manual/en/class.sqlite3.php
Marsh Posté le 24-08-2008 à 00:20:32
Donc voila, 102 lignes et utilisation de sqlite.
C'est maintenant beaucoup plus simple à configurer : juste le nom de la page et le mot de passe !
Par contre faut pas oublié de donner les droits en lecture et écriture au répertoire.
Et... ca ne marche pas chez free
Et j'ai une petite question... comment exécuter cette requête :
sqlite_query($db, 'CREATE TABLE PicoBlog (id INTEGER PRIMARY KEY, date bigint(20), texte text)');
Seulement si la table n'existe pas ? Car pour le moment j'ai un jolie warning que j'ai caché avec un @
Merci !
Marsh Posté le 24-08-2008 à 00:49:00
gniii2 a écrit : Et j'ai une petite question... comment exécuter cette requête : |
Salut,
Code :
|
Ca ne fonctionne pas, ou j'ai pas compris la question?
Marsh Posté le 24-08-2008 à 11:53:53
Halike a écrit : Salut,
Ca ne fonctionne pas, ou j'ai pas compris la question? |
Merci. Tu as bien compris la question, mais ta requête ne marche pas. Ca me donne une erreur de syntaxe.
Je répète la question en plus claire :
Au début de mon code j'ai ca :
Code :
|
Qui crée la table PicoBlog. Sauf que je ne veux pas crée à chaque fois la table, mais seulement si elle n'existe pas. Sinon cela me fais un warning... j'ai donc été obligé de rajouter un '@' tout moche devant la requête...
Sinon toujours les même questions qu'avant :
- Vous voyez un moyen de rendre mon code plus court ? Plus propre ?
- J'ai oublié des isset() ou des choses dans le genre qui pourraient me créer des warning ?
Merci !
Marsh Posté le 24-08-2008 à 13:41:49
C'est quoi l'erreur qu'il te donne?
Parce que selon la doc ( http://www.sqlite.org/lang_createtable.html ) ça devrait marcher
Edit : A part ça, tu pourrais mettre dans ton 1er post la version que tu nous a proposée au début? Je trouve que pour un débutant qui apprend PHP ça peut être super utile de voir l'évolution grâce aux conseils que tu as reçus
Marsh Posté le 24-08-2008 à 18:40:17
esox_ch a écrit : C'est quoi l'erreur qu'il te donne? |
Voila le bout de code :
Citation : sqlite_query($db, 'CREATE TABLE IF NOT EXISTS PicoBlog (id INTEGER PRIMARY KEY, date bigint(20), texte text)'); |
Et l'erreur :
Citation : Warning: sqlite_query() [function.sqlite-query]: near "NOT": syntax error in /Library/WebServer/Documents/PicoBlog/index.php on line 11 |
Sinon désolé mais je garde pas les traces des anciennes versions... j'aurais moi même bien aimé voir les changement
Marsh Posté le 24-08-2008 à 20:06:18
SQLite ne gère pas les test IF NOT EXISTS on dirait, fais un CREATE normal
Marsh Posté le 24-08-2008 à 20:34:28
SI je met rien j'ai aussi un warning :
Citation : Warning: sqlite_query() [function.sqlite-query]: table PicoBlog already exists in /Library/WebServer/Documents/PicoBlog/index.php on line 11 |
Et mettre un '@' devant la requête c'est moche.
Marsh Posté le 24-08-2008 à 20:47:21
Non mais tu le fais que si t'as un parametre GET = install par exemple tu va pas le faire a chaque execution de ton script
Marsh Posté le 24-08-2008 à 20:52:23
yellu a écrit : Non mais tu le fais que si t'as un parametre GET = install par exemple tu va pas le faire a chaque execution de ton script |
+1 quoi ... Et là, tu te permets de faire un @sqllite_query(....) or die("La base de donnée n'a pas pu être crée" );
Marsh Posté le 24-08-2008 à 22:30:32
Sqlite .. j'ai l'impression que ce truc .. ne fait rien gagner .. je suis contre les classes objet moi .. préfère les bonnes vieilles functions à tiroirs rallonges
Qq'un a t-il fait des benchmark de rapidité d'une connexion, select, update sur une bdd sql ?
1) en mode normal
2) en chargeant une classe objet super longue
Code :
|
Ohhhh ça c'est du joly !!!
$page=$_GET[p]?$_GET[p]:1; // plus court
$page=($_GET[p] OR 1); // Serait le Panard !!
Marsh Posté le 24-08-2008 à 23:14:33
grosbin a écrit : Sqlite .. j'ai l'impression que ce truc .. ne fait rien gagner .. je suis contre les classes objet moi .. préfère les bonnes vieilles functions à tiroirs rallonges
Ohhhh ça c'est du joly !!! |
Moi je te fous un coup de pelle à clous.
Merci à celui qui me l'a prêtée, il se reconnaitra
Marsh Posté le 24-08-2008 à 23:16:04
grosbin a écrit : Qq'un a t-il fait des benchmark de rapidité d'une connexion, select, update sur une bdd sql ? |
C'est quoi le mode normal? Du copié collé dans tous les sens? Tu connais le mot "maintenance"?
Marsh Posté le 20-08-2008 à 15:46:28
Hello,
j'ai eu l'idée recement de me lancer dans le codage d'un mini système de blog ultra simplifié en PHP. Jusque la rien d'originale. Mais j'ai voulu me fixer des contraintes pour coder tout ca :
1- Que l'intégralité du blog / système admin tienne en une seul page.
2- Que le code complet (PHP + XHTML) fasse le moins de lignes possible (proche des 100 lignes).
3- Que le tout soit joliment et proprement codé.
C'est sûrement une idée stupide, mais c'est la mienne
Ou j'en suis dans mon projet ?
1- Fini (enfin, le design n'est pas encore au point)
2- Pas trop mal (121 lignes) [Edit : maintenant 100 lignes]
3- C'est pour ca que je demande votre aide. J'aimerais donc que ma page soit la mieux codé possible. Mais c'est pour le moment assez brouillon...
Que ce soit l'organisation du code, des conventions que j'aurais pas respecté, le manque de commentaires... bref n'importe quel petit (ou gros) détails m'intéresse pour essayer de rendre mon code propre tout en rentrant dans les contraintes que je me suis posé.
Et si vous avez des idée pour rendre le code encore plus court... je suis preneur !
Si vous voulez m'aider =>
- Tester le "blog": ---
- Mot de passe : ifique
- La source ici : ---
Merci d'avance pour votre aide !
Message édité par gniii2 le 02-09-2008 à 23:27:04