pblm de lien php avec un include

pblm de lien php avec un include - PHP - Programmation

Marsh Posté le 04-07-2006 à 20:17:51    

c quoi cette horreur ? [:heink]

Reply

Marsh Posté le 04-07-2006 à 20:17:51   

Reply

Marsh Posté le 04-07-2006 à 20:23:57    

Salut,
 
Tu t'embête un peu. Evite les IF car au bout d'un moment tu auras un temps d'excution qui sera de l'ordre de quelques secondes.
 
Voici ce que je te conseil. Dans un premier temps, fais tes liens comme ceci :
index.php?page=1
index.php?page=2
...
index.php?page=N
 
N étant un nombre
 
 
Ensuite dans ta page index.php, tu traite ton information comme ceci:

Code :
  1. if(isset($_GET['page']) && !empty($_GET['page']) && is_numeric($_GET['page'])){
  2.   switch($_GET['page']){
  3.     case 1: include('toto.php'); break;
  4.     case 2: include('titi.php'); break;
  5.     ...
  6.     case N: include('ta_page.php'); break;
  7.     default: include('page_par_defaut.php'); break;
  8.   }
  9. }
  10. else {
  11.   include ('page_par_defaut.php');
  12. }


 
Voila j'espère t'avoir aidé.
 
PS : J'ai pas testé
PS2 : Y'a des solutions meilleurs que des includes. Mais ca tu l'apprendras avec le temps et l'expérience.


Message édité par AlphaZone le 04-07-2006 à 20:24:44
Reply

Marsh Posté le 04-07-2006 à 20:24:55    


 
T'aider à quoi ?
 
Déjà on include pas directement avec le résultat d'une méthode POST ou GET.  
 
Tu prends la doc et tu regardes switch avec case et break.
 
 :heink:  

Reply

Marsh Posté le 04-07-2006 à 20:28:41    

Qui c'est qui t'as déconseillé ? looool Ca c'est la meilleur de l'année !

Reply

Marsh Posté le 04-07-2006 à 20:31:50    


 
On aurait du te déconseiller de faire cette école (enfin si école il y a). Sinon, il faut pas croire tout ce que les newb racontent sur les forums hein. [:petrus75]
 
switch est tout simplement la méthode la plus rapide, bien plus rapide que if. [:petrus] (et aussi la plus sûr vu que normalement, il y a un default à la fin).  

Reply

Marsh Posté le 04-07-2006 à 20:36:39    

je dirais aussi que c est la plus propre
dans un autre topic on a vu deux fois 5 ou 6 if imbriqués :cry:

Reply

Marsh Posté le 04-07-2006 à 21:28:20    

Solution alternative si vraiment tu es alergique aux 'switch' (mais bon comme signale plus haut ca n'a jamais tuer personne un switch):
 

Code :
  1. $liste_page = array('page1.php', 'page2.php', 'page3.php', 'page4.php');
  2. $page  = (isset($_GET['page']) && isset($liste_page[$_GET['page']]))?$liste_page[$_GET['page']]:'default_page.php';
  3. include($page);

Reply

Marsh Posté le 04-07-2006 à 22:05:01    

Elle vraiment pas jolie ta solution Woutcha, vraiment pas. Ca fait "torchon". Désolé si mes mots sont crus.
 

Reply

Marsh Posté le 05-07-2006 à 11:08:38    

AlphaZone a écrit :

Elle n'est vraiment pas jolie ta solution Woutcha, vraiment pas. Ca fait "torchon". Désolé si mes mots sont crus.


 
Desole mais une affirmation sans argumentation n'a aucune valeur.
 
Que ca te plaise ou non ma solution est correcte du point de vu syntaxique et logique, et avoir la liste des pages sous forme de tableau
est beaucoup plus elegant qu'un enorme switch...
 
Bref je garde mon "torchon" en attendant une vrai argumentation de ta part...
 
 
 

Reply

Marsh Posté le 05-07-2006 à 11:18:35    

Désolé pour la grammaire.
 
J'aimerais bien que tu m'explique quel est l'interêt de passer en paramètre des chaines de caractères ?
D'un point de vu syntaxe, c'est correct, CERTE ! Mais d'un point de vue pratique, ca vaut rien du tout. Tu crois qu'un tableau c'est plus élégant qu'un switch ? laisse moi rire !
On n'est pas la pour parler d'élégance mais d'optimisation et c'est surement pas avec un tableau que ca sera plus rapide.
 
Tu ne crois pas que c'est bien plus rapide de saisir un nombre que des caractères ?
Supposons que tu renomme ta page X.php (X étant un nom au hasard), tu vas devoir modifier tous tes liens. C'est balo quand même alors que qu'avec un simple numérique, le problème ne se serait pas posé.
 
J'espère que mon argumentation a été à la hauteur de tes espérences ;)
 
Sur ce, @ bon entendeur.

Message cité 3 fois
Message édité par AlphaZone le 05-07-2006 à 11:23:00
Reply

Marsh Posté le 05-07-2006 à 11:18:35   

Reply

Marsh Posté le 05-07-2006 à 11:20:56    

AlphaZone a écrit :

Désolé pour la grammaire.
 
J'aimerais bien que tu m'explique quel est l'interêt de passer en paramètre des chaines de caractères ?
 
Tu ne crois pas que c'est bien plus rapide de saisir un nombre que des caractères ?
Supposons que tu renomme ta page X.php (X étant un nom au hasard), tu vas devoir modifier tous tes liens. C'est balo quand même alors que qu'avec un simple numérique, le problème ne se serait pas posé.
 
J'espère que mon argumentation a été à la hauteur de tes espérences ;)


je te conseille de relire son code et de revoir ton argumentation ... :o
Ou as-tu vu qu'il passait des chaines de caractères?
Il récupère l'index de la page demandé en get, puis la page associée dans le tableau!

Reply

Marsh Posté le 05-07-2006 à 11:22:00    

anapajari a écrit :

je te conseille de relire son code et de revoir ton argumentation ... :o
Ou as-tu vu qu'il passait des chaines de caractères?
Il récupère l'index de la page demandé en get, puis la page associée dans le tableau!


Je crois que c'est toi qui à mal lu son code.
 
A bon entendeur aussi
 
PS : j'ai édité mon message entre temps. Désolé

Message cité 1 fois
Message édité par AlphaZone le 05-07-2006 à 11:22:33
Reply

Marsh Posté le 05-07-2006 à 11:42:08    

AlphaZone a écrit :

Désolé pour la grammaire.
 
J'aimerais bien que tu m'explique quel est l'interêt de passer en paramètre des chaines de caractères ?
D'un point de vu syntaxe, c'est correct, CERTE ! Mais d'un point de vue pratique, ca vaut rien du tout. Tu crois qu'un tableau c'est plus élégant qu'un switch ? laisse moi rire !
On n'est pas la pour parler d'élégance mais d'optimisation et c'est surement pas avec un tableau que ca sera plus rapide.
 
Tu ne crois pas que c'est bien plus rapide de saisir un nombre que des caractères ?
Supposons que tu renomme ta page X.php (X étant un nom au hasard), tu vas devoir modifier tous tes liens. C'est balo quand même alors que qu'avec un simple numérique, le problème ne se serait pas posé.
 
J'espère que mon argumentation a été à la hauteur de tes espérences ;)
 
Sur ce, @ bon entendeur.


 
Ou as-tu vu des chaines de caracteres en parametres ????? RELIS mon code, j'utilise des index NUMERIQUES.
 
"On n'est pas la pour parler d'élégance mais d'optimisation et c'est surement pas avec un tableau que ca sera plus rapide."
 
Exemple theorique:
 
Imagine le tableau suivant : $liste_pages = array('page1', 'page2', ..., 'page100')
 
et le switch suivant :
 

Code :
  1. switch($un_numero){
  2.    case 1: print 'page1'; break;
  3.    case 2: print 'page2'; break;
  4.    ...
  5.   case 100: print 'page100'; break;
  6.   default: print 'blabla'; break;


 
quelle solution sera la plus rapide pour afficher 'page100'?
 
Le switch avec $un_numero = 100 ou print $liste_pages[99]?
 
Je n'ai pas teste mais je parie sur le tableau perso...
 
 
 

Reply

Marsh Posté le 05-07-2006 à 11:48:35    

Rah, ca me fait mal de l'avouer mais j'ai eu tord sur toute la ligne. Erf.
 
Honte à moi

Reply

Marsh Posté le 05-07-2006 à 11:50:53    

super des warriors de la micro optimisation  [:barthaliastoxik]  
 
chacun sa methode et le temps d execution n est pas un critere valide pour differencier deux fonctions en php :/

Reply

Marsh Posté le 05-07-2006 à 11:53:57    

AlphaZone a écrit :

Je crois que c'est toi qui à mal lu son code.
A bon entendeur aussi
PS : j'ai édité mon message entre temps. Désolé


Nan nan je confirme ce que je disais, c'est toi qui a mal lu, comme le re-souligne woutcha y'a pas de chaines passées en paramètres!
 

AlphaZone a écrit :

Tu crois qu'un tableau c'est plus élégant qu'un switch ? laisse moi rire !
On n'est pas la pour parler d'élégance mais d'optimisation et c'est surement pas avec un tableau que ca sera plus rapide.


Avant de lancer ce genre d'affirmation le minimum c'est de vérifier ces propos au moins :o
Premier script t.php avec des switch

Code :
  1. <?php
  2. $start=microtime();
  3. $b=0;
  4. for($a=0; $a<=20000; $a++){
  5. switch($a%10){
  6.    case 1: $b = 'A';break;
  7.    case 2: $b = 'B';break;
  8.    case 3: $b = 'C';break;
  9.    case 4: $b = 'D';break;
  10.    case 5: $b = 'E';break;
  11.    case 6: $b = 'F';break;
  12.    case 7: $b = 'G';break;
  13.    case 8: $b = 'H';break;
  14.    case 9: $b = 'I';break;
  15.    default: $b = 'Z';break;
  16. }
  17. }
  18. $end=microtime()-$start;
  19. echo "TIME :".$end."\n";
  20. ?>


 
Deuxième t2.php avec un tableau

Code :
  1. <?php
  2. $start=microtime();
  3. $b=0;
  4. $array=array('Z','A','B','C','D','E','F','G','H','I');
  5. for($a=0; $a<=20000; $a++){
  6. $b = $array[$a%10];
  7. }
  8. $end=microtime()-$start;
  9. echo "TIME :".$end."\n";
  10. ?>


Résultat:

SRVTEST ~ # php t.php
TIME :0.017859
SRVTEST ~ # php t2.php
TIME :0.007196


La solution avec le tableau est 3 fois plus rapide [:spamafote]
 
 
 
 

Reply

Marsh Posté le 05-07-2006 à 11:55:58    

Ouai bon ca va, j'me suis planté dans mes propos. J'étais persuadé qu'il passait des chaines de caractères. N'en rajoutez pas, please :'(

Reply

Marsh Posté le 05-07-2006 à 12:00:00    

on a gagné un centieme de seconde sur 20 000 itérations c est genial [:barthaliastoxik]

Message cité 1 fois
Message édité par mIRROR le 05-07-2006 à 12:00:32
Reply

Marsh Posté le 05-07-2006 à 12:04:07    

AlphaZone a écrit :

Rah, ca me fait mal de l'avouer mais j'ai eu tord sur toute la ligne. Erf.
 
Honte à moi


 
No problemo... et puis tout cela est reste tres courtois.  :jap:

Reply

Marsh Posté le 05-07-2006 à 12:33:01    

mwoué, faut prendre aussi en compte la lisibilité et le debugging éventuel. :/
 
switch est un très bon compromis, sans doute le meilleur. :/

Reply

Marsh Posté le 05-07-2006 à 12:48:25    

Hermes le Messager a écrit :

mwoué, faut prendre aussi en compte la lisibilité et le debugging éventuel. :/
 
switch est un très bon compromis, sans doute le meilleur. :/


 
:jap:
je plussoie cette intervention pleine de sagesse

Reply

Marsh Posté le 05-07-2006 à 12:58:46    

identification numérique, array, isset donne
 

Code :
  1. 1ère partie
  2. //generer l'array qui contient le nom des include passe en GET
  3. $fichiersinclude = array();
  4. foreach (glob(__libs_dir__."*.inc.php" ) as $v) {
  5. $fichiersinclude[md5($v)] = $v;
  6. }
  7. file_put_contents("./fichiersinclude.inc.php",
  8. "<?php \$fichiersinclude=”.var_export($fichiersinclude, 1)."; ?>" );
  9. //2ème partie
  10. require_once __libs_dir__."/fichiersinclude.inc.php"
  11. if(!isset(fichiersinclude[$_GET['page']]){
  12. die("logging ban ip etc ." )
  13. }
  14. require $fichiersinclude[$_GET['page']
  15. .... code ...


 
 
Sous la condition que le nombre de fichiers à inclure ne change pas souvent cette solution est excellente.
 
PS: il ne faut jamais laisser à l'utilisateur la possibilite de choisir ses includes [:ayou]

Message cité 1 fois
Message édité par supermofo le 05-07-2006 à 13:10:45
Reply

Marsh Posté le 05-07-2006 à 13:27:09    

mIRROR a écrit :

on a gagné un centieme de seconde sur 20 000 itérations c est genial [:barthaliastoxik]


J'ai jamais dit que c'était intéressant, je voulais juste montrer que l'argument "c'est surement pas avec un tableau que ca sera plus rapide. " était tout caca.
 

Hermes le Messager a écrit :

mwoué, faut prendre aussi en compte la lisibilité et le debugging éventuel. :/
switch est un très bon compromis, sans doute le meilleur. :/


Switch est même pas un compromis, c'est effectivement la meilleur solution en terme de lisibilité!
Et de toute façon si on se retrouve avec un switch ne serait-ce que 100 élements, pour moi c'est qu'il y a un problème quelque part ...
 

Reply

Marsh Posté le 05-07-2006 à 13:38:32    

anapajari a écrit :

J'ai jamais dit que c'était intéressant, je voulais juste montrer que l'argument "c'est surement pas avec un tableau que ca sera plus rapide. " était tout caca.


 
j avais bien compris ton role d arbitre :jap:
c est la petite gueguerre contre la missante µs qui me fait hurler de rire
 
 

anapajari a écrit :

si on se retrouve avec un switch ne serait-ce que 100 élements, pour moi c'est qu'il y a un problème quelque part ...


 
et pas un petit  :sweat:  

Reply

Marsh Posté le 05-07-2006 à 13:51:04    

supermofo a écrit :

code de malade


 
 
j ai pas du comprendre ton code  :sweat:

Reply

Marsh Posté le 05-07-2006 à 14:20:09    

anapajari a écrit :

Switch est même pas un compromis, c'est effectivement la meilleur solution en terme de lisibilité!
Et de toute façon si on se retrouve avec un switch ne serait-ce que 100 élements, pour moi c'est qu'il y a un problème quelque part ...


 
Clairement. :/

Reply

Marsh Posté le 05-07-2006 à 16:11:28    

mIRROR a écrit :

je dirais aussi que c est la plus propre
dans un autre topic on a vu deux fois 5 ou 6 if imbriqués :cry:
...
super des warriors de la micro optimisation  [:barthaliastoxik]  
chacun sa methode et le temps d execution n est pas un critere valide pour differencier deux fonctions en php :/
...
on a gagné un centieme de seconde sur 20 000 itérations c est genial [:barthaliastoxik]
...
:jap: je plussoie cette intervention pleine de sagesse
...
j avais bien compris ton role d arbitre :jap:
c est la petite gueguerre contre la missante µs qui me fait hurler de rire  
et pas un petit  :sweat:
...
j ai pas du comprendre ton code  :sweat:


 
 
Y'a pas a dire, tes 6 posts sur ce topic brillent par leur interet et leur pertinence.
Merci de nous faire partager ta connaissance du php...

Reply

Marsh Posté le 05-07-2006 à 16:43:14    

Woutcha a écrit :

Y'a pas a dire, tes 6 posts sur ce topic brillent par leur interet et leur pertinence.
Merci de nous faire partager ta connaissance du php...


 
 
 [:petrus dei]  
 
il dit quoi le mongol ?
 
alphazone a repondu a la question des le debut  
donc tous tes posts sont inutiles si tu le prends comme ca :/
et tu m excuseras si tu n y trouves aucune pertinence  
j assume t inquiete pas
vous etiez adorables tous les deux a vous battre pour des microsecondes  [:itm]

Reply

Marsh Posté le 05-07-2006 à 16:57:08    

mIRROR a écrit :

[:petrus dei]  
 
il dit quoi le mongol ?
 
alphazone a repondu a la question des le debut  
donc tous tes posts sont inutiles si tu le prends comme ca :/
et tu m excuseras si tu n y trouves aucune pertinence  
j assume t inquiete pas
vous etiez adorables tous les deux a vous battre pour des microsecondes  [:itm]


 
Ne te sens pas oblige d'etre insultant pour te defendre...
Moi je vois juste que sur tes 6 posts il y a pas 1 ligne de php et surtout 3 posts qui se veulent "pseudo-ironique" a propos  
de micro-optimisation alors qu'il n'en a jamais ete question dans mes messagess ou ceux d'anapajari...
 
A bon entendeur...
 
 
 
Edit en reponse au post en dessous : Ne parle pas de ma pseudo-science sinon je vais me sentir obliger de parler de ton pseudo-humour  :D  


Message édité par Woutcha le 05-07-2006 à 17:12:46
Reply

Marsh Posté le 05-07-2006 à 17:03:43    

pas une insulte juste une replique de film  
mais bon s il te faut absoluuuuuuuuuuuuuument que je mette du code php pour que mon post ait un interet
 
 
foreach ($my_post as $wtf) :
if($interet_de_ton_code == false) {
$wtf = set_mybouche_closed(true);
exit();
}
endforeach;
 
a part etaler ta pseudo science tu n as que peu aidé l auteur de ce topic qui avait deja recu sa reponse  
 
sinon je viens de changer les piles de mon sonotone j entends super bien  
merci de t en inquieter [:itm]

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

Make sure you enter the(*)required information where indicate.HTML code is not allowed