Précédent   Forum des professionnels en informatique > PHP > PHP & SGBD
PHP & SGBD Forum d'entraide sur les SGBD avec PHP. Avant de poster : FAQ BDD, toutes les FAQ PHP, cours BDD et sources BDD
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse Proposer ce sujet en actualité
 
Outils de la discussion
Publicité
'
Vieux 02/06/2006, 00h29   #1
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Par défaut [Conception] utiliser le même script a plusieurs endroits dans différents répertoires

Bonjour,

J'en ai un peu marre de copier coller des bouts de codes identiques dans différentes pages de mon site : je voudrais rationaliser un peu mon code (je dis rationaliser, si vous avez un meilleur terme hein...).

Donc je me demande si il n'est pas possible de placer ce bout de code dans un fichier et de l'appeler ensuite là où j'en ai besoin. Je ne parle pas d'un require ou d'un include hein.

Y'a-t'il une solution? Peut être avec les fonctions ? Personnellement je ne les ai jamais utilisées c'est peut être un tort et c'est peut être le moment, sauf si ça n'a rien à voir.

Merci pour vos conseils/idées/chèques/suggestions/recommandations.
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 09h54   #2
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
salut, et pourquoi pas avec des classes?
ca me parait bien approprié pour ton cas.
Sinon pour le cheque tu peux me contacter en privé, pour que je te donne mes coordonnées pour que tu me l'envoie
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 10h58   #3
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
j'ai un meilleur terme : structurer ;o)

pourquoi tu n'aime pas les include ? (le require je comprends ;o)

Les fonctions ne sont utiles que si tu as de legere variation dans la portion de code que tu souhaite afficher. Par exemple, si tu veux afficher un texte formaté d'une certaine maniere :
Code :
<span style="..."><b><center> [ texte ] </center></b></span>
tu peux faire une fonction :

Code :
1
2
3
function affiche($texte) {
 echo "<span style='...'><b><center> [ $texte ] </center></b></span>";
}
et l'appeller :

Code :
1
2
3
<?php affiche('texte'); ?>
<?php affiche('texte1'); ?>
<?php affiche('texte2'); ?>
autant de fois que tu veux.

Si tu n'as pas de texte variable, (genre pour un header ou un footer de page) le mieux reste un include :
Code :
<?php include('header.php'); ?>
A noter que pour utiliser des fonctions, il te faudra aussi des include contenant les declarations des fonctions :
Code :
<?php include_once('fonctions.php'); ?>
sur toutes les pages appellant les fonctions.
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 14h30   #4
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
D'accord, donc même pas avec les fonctions, l'include est obligatoire. Ok.

Maintenant prenons cet exemple :
- J'ai un script qui vérifie le vocabulaire du champ de formulaire nommé "contenu".
- La variable sur laquelle ce script agit est $contenu.
- Je veux maintenant utiliser ce même script à un autre endroit du site, pour un autre champ qui se nomme lui "titre".
- Ici si je sépare le script initial et que je l'inclu, il va correctement fonctionner pour le premier formulaire mais pas pour le second.

Je peux, me direz-vous, faire un $contenu=$titre pour qu'il fonctionne correctement dans le deuxième cas.

Mais en fait vous faites comment vous ? Vous avez x requêtes sql ou script à faire à différents endroits , vous copiez-collez sans arrêt le même script par exemple ? Quite à devoir tous les modifier plutot qu'un seul ?

Je demande ça parce que mon site commence à devenir assez complexe et je dois mieux le structurer. Y'a pas des méthodes pré-établies pour batir des plans de site cohérents ? Tout le monde fait à sa façon ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 14h37   #5
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
dans ton script tu auras quelque chose comme ca
Code :
1
2
3
4
5
6
7
8
9
10
 
function verifortho($value)
{
blablabablba
 
if ($ok)
return true;
else
return false;
}
dans ta page tu feras
Code :
1
2
3
4
5
6
7
8
 
// pour le contenu
if (verifortho($contenu) === false)
echo "il y a des fautes";
 
// pour le titre
if (verifortho($titre) === false)
echo "il y a des fautes dans le titre.";
Donc en fait tu passe un parametre(ou des) a ta fonction pour qu'elle fonctionne en fonction d'eux.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 15h15   #6
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Voilà c'est exactement un truc comme ça que j'avais en tête.

Prenons l'exemple de ce script qui effectue des remplacement des remplacements à l'intérieur de $titre.
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
$titre = preg_replace(
            array(
                '#a{2,}#i',
                '#b{3,}#i',
                '#c{3,}#i',
                '#d{3,}#i',
                '#e{4,}#i',
                '#f{3,}#i',
                '#g{3,}#i',
                '#h{2,}#i',
                '#i{2,}#i',
                '#j{2,}#i',
                '#k{2,}#i',
                '#l{3,}#i',
                '#m{3,}#i',
                '#n{3,}#i',
                '#o{3,}#i',
                '#p{3,}#i',
                '#q{2,}#i',
                '#r{3,}#i',
                '#s{3,}#i',
                '#t{3,}#i',
                '#u{2,}#i',
                '#v{2,}#i',
                '#w{2,}#i',
                '#x{2,}#i',
                '#y{2,}#i',
                '#z{2,}#i',
                ),
            array(
                'a',
                'bb',
                'cc',
                'dd',
                'eee',
                'ff',
                'gg',
                'hh',
                'i',
                'j',
                'k',
                'll',
                'mm',
                'nn',
                'oo',
                'pp',
                'q',
                'rr',
                'ss',
                'tt',
                'u',
                'v',
                'w',
                'x',
                'y',
                'z'),
 
            $titre
            );
Imaginons que maintenant je veuille simplement inclure ce script, sans le modifier à chaque utilisation et qu'ils fonctionnent pour toutes les variables des différents pages où je l'utilise. Cela donnerait quoi dans ce cas ? J'ai besoin d'un exemple pratique.
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 15h23   #7
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
dans ton fichier tu aurais
Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
 
function remplace($titre)
{
$titre = preg_replace(
            array(
                '#a{2,}#i',
                '#b{3,}#i',
                '#c{3,}#i',
                '#d{3,}#i',
                '#e{4,}#i',
                '#f{3,}#i',
                '#g{3,}#i',
                '#h{2,}#i',
                '#i{2,}#i',
                '#j{2,}#i',
                '#k{2,}#i',
                '#l{3,}#i',
                '#m{3,}#i',
                '#n{3,}#i',
                '#o{3,}#i',
                '#p{3,}#i',
                '#q{2,}#i',
                '#r{3,}#i',
                '#s{3,}#i',
                '#t{3,}#i',
                '#u{2,}#i',
                '#v{2,}#i',
                '#w{2,}#i',
                '#x{2,}#i',
                '#y{2,}#i',
                '#z{2,}#i',
                ),
            array(
                'a',
                'bb',
                'cc',
                'dd',
                'eee',
                'ff',
                'gg',
                'hh',
                'i',
                'j',
                'k',
                'll',
                'mm',
                'nn',
                'oo',
                'pp',
                'q',
                'rr',
                'ss',
                'tt',
                'u',
                'v',
                'w',
                'x',
                'y',
                'z'),
 
            $titre
            );
return $titre;
}
 
// et pour l'appel
 
$new= remplace($mavariable);
$titi = remplace($toto);
tu peux ainsi faire plusieurs appel sans modifier le code, la seule chose qui change c'est la variable que tu fournis en parametre.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 15h47   #8
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
1) Bon finalement ça change pas grand chose par rapport à la solution qui consiste à inclure le code que j'ai marqué au dessus et puis juste avant je passe la variable à filtrer dans une autre qui à le nom de celle sur laquelle travaille le script ?

2) Rq j'ai pas compris ce que viennent faire $new= remplace($mavariable);
$titi = remplace($toto); dans ton exemple, Bebel. Et dans ta fonction, tu as déjà un nom imposé, $titre, donc comment faire pour que cette fonction travaille avec une autre variable.
J'ai rien pigé de plus désolé
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 15h56   #9
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
Citation:
Envoyé par psychoBob

2) Rq j'ai pas compris ce que viennent faire $new= remplace($mavariable);
$titi = remplace($toto); dans ton exemple, Bebel. Et dans ta fonction, tu as déjà un nom imposé, $titre, donc comment faire pour que cette fonction travaille avec une autre variable.
J'ai rien pigé de plus désolé
en fait j'appelle la fonction remplace en lui passant $mavariable ou $toto comme parametre.
dans la fonction $titre est juste le nom de mon parametre dans sa declaration. Mais apres pour l'appel je peux lui passer le parametre que je veux.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h05   #10
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bon je vais me chercher un bon tuto sur les fonctions, ça a l'air pratique, il serait peut être tant que je m'y mette (si vous en avez un hésitez pas).
Un exemple pour voir. C'est valable ça ?

Code :
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
//fonction écrite dans un fichier inclu en haut de la page.
function genial($bob)
{
$bob= preg_replace(
            array(
                '#a{2,}#i',
                '#z{2,}#i',
                ),
            array(
                'a',
                'z'),
 
            $bob
            );
return $bob;
}
 
// appel de la fonction en milieu de page par exemple :
$jacques= genial($bob);
Donc si j'ai bien compris je marque genial($bob) parce que genial est le nom donné à la fonction et ensuite je marque $jacques=genial($bob) pour appeler cette fonction nommée genial() et la faire agir sur $jacques.
Mais alors pourquoi a-t'on tout de même une variable indiquée en paramètre dans la fonction tout en haut ? Uniquement pour l'écriture de celle-ci et la faire fonctionner ?
Et lorsque l'on fait $jacques=genial($bob) cela équivaut à dire remplace la variable $bob par la variable $jacques dans la fonction genial() et fait pareil avec, c'est ça ?
Et donc une fois que j'ai inclu la fonction dans la page, je peux l'appeler autant de fois que je veux sans avoir à la réécrire, c'est cela ? Je change juste le nom de la variable sur laquelle elle doit agir, c'est cela ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h10   #11
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
Non en fait si tu veux appliquer la methode genial a $jacques tu dois faire
Citation:
genial($jacques)
si tu fais par exemple

$andre = genial($jacques)
tu auras dans $andre le resultat de l'appel de la fonction sur $jacques.

Citation:
Mais alors pourquoi a-t'on tout de même une variable indiquée en paramètre dans la fonction tout en haut ? Uniquement pour l'écriture de celle-ci et la faire fonctionner ?
la variable dans l'entete de la fonction est pour la remplacer et l'utilise dans le corps de la fonction. Apres c'est PHP qui se debrouille pour qu'au moment de l'appel attribue la valeur de $jacques a $bob.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h22   #12
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
ok, c'est noté, je vais faire quelques tests pour voir si tout fonctionne comme prévu.
Merci Bebel
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h26   #13
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
De rien
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h29   #14
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Une autre question :
Si j'ai trois script qui font appel à une même fonction et que j'inclu cette fonction en haut de la page. Est-ce que cela permet d'optimiser le temps d'exécution de page, par rapport à la solution qui consiste à recopier trois fois le même script ?
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 16h31   #15
Membre Expert
 
Avatar de Bebel
 
Homme David B.
Développeur informatique
Inscription : avril 2003
Messages : 742
Détails du profil
Informations personnelles :
Nom : Homme David B.
Âge : 29
Localisation : France, Haute Garonne (Midi Pyrénées)

Informations professionnelles :
Activité : Développeur informatique
Secteur : Aéronautique - Marine - Espace - Armement

Informations forums :
Inscription : avril 2003
Messages : 742
Points : 1 085
Points : 1 085
je dirais oui, mais dans ce cas, je n'en suis pas sur. Mais une chose de sur c'est que si tu devais modifier la fonction tu n'aurais a le faire qu'une fois et pas x fois par page ou tu utiliserais le code. Et donc dans ce cas ca eviterais des oublis.
__________________
Tout énigme a une solution ! Tout est question de discipline !
Bebel est actuellement connecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 17h10   #16
Membre Expert
 
Homme
Inscription : janvier 2004
Messages : 1 238
Détails du profil
Informations personnelles :
Sexe : Homme
Localisation : France

Informations professionnelles :
Secteur : Finance

Informations forums :
Inscription : janvier 2004
Messages : 1 238
Points : 1 421
Points : 1 421
non, le temps d'execution est meme legerement augmenté... mais si legerement que c'est négligeable... les avantages d'une fonction (maintenabilité, lisibilité, etc...) compensent largement cet inconvenient.

Pour tout te dire... je trouve meme difficile a croire que tu ait pu faire du php sans utiliser de fonction jusqu'a présent, c'est quasi inconcevable pour moi ;o)
__________________
PHP :
Regle n°1 : mysql_query(...), mysql_connect(...) et mysq_select_db(...) doivent EN DEBUG etre suivies de or die(mysql_error()); (mais jamais en production)
Regle n°2 : Mieux encore : mysql_query($requete) or die("$requete<br/>".mysql_error());
Regle n°3 : echo '<pre>';var_dump($var);echo '</pre>'; affiche le contenu et le type d'une variable.
Publiez vos textes de fantasy et de science-fiction sur http://www.cercledefaeries.com/concours/
Fladnag est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 02/06/2006, 19h24   #17
Membre éclairé
 
Inscription : juillet 2005
Messages : 1 221
Détails du profil
Informations forums :
Inscription : juillet 2005
Messages : 1 221
Points : 398
Points : 398
Bah non seulement j'ai fait du php mais en plus j'ai fait tout un forum comme ça
Mais maintenant je ressens le besoin de rendre mon compte plus confortable à lire et à mettre à jour, alors je me disais bien que les fonctions étaient faites pour ça . Mieux vaut tard que jamais !

(Rq j'ai pas essayé encore de les placer dans mon code, je suis pas sur ça là, mais bon je vois pas pk ça poserait de problème).
__________________
C'est pas parce que j'ai tort que vous avez raison.
psychoBob est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 03/06/2006, 03h29   #18
Membre chevronné
 
Avatar de kankrelune
 
Inscription : décembre 2005
Messages : 766
Détails du profil
Informations forums :
Inscription : décembre 2005
Messages : 766
Points : 745
Points : 745
Structurer une application c'est très important...
  • 1 pour un code plus propre dans lequel tu ne te perd pas
  • 2 pour une maintenance facilitée
  • 3 pour de meilleurs performances

Un site web et par extension la plupart des appli quelque soit le language utilisé c'est comme une maison... il est inutile de mettre un chauffe-eau dans chaque pieces... .. .

Dans l'idée il est donc important de bien organiser la structure interne du site (je ne parle pas de la navigation)... en général on crée des fichiers commun qui définnissent/appliquent des routines elles même communes au site... l'exemple le plus courant c'est le header.php qui vas lancer toutes les routines indispensable au site... connection à la base, récupération de la configuration du site, verification relative à l'utilisateur (connecté, pas connecté, droits, mise à jour de la session), définition des fonctions communes au site, instanciation de class (par exemple pour les templates) s'il y a besoin, etc... ainsi tu n'as plus qu'a inclure le fichier header.php dans ta page pour que toute ces routine soit lancée... .. .

Ne pas fonctionner comme ça à pour avantage de faire gagner quelques microsecondes en temps d'éxécution (faut s'appeler flash gordon pour voir la différence comme disait quelqu'un sur un autre topic) mais de rendre illisible le code (page de xxxxxxx lignes), d'en rendre la maintenance quasi impossible (50 pages à modifier pour changer 3 lignes) et surtout de considérablement grossir ton appli (les fichiers font le double voir le triple de la taille qu'ils pourraient faire)... .. .

Voili voilou... .. .

@ tchaOo°
kankrelune est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse Proposer ce sujet en actualité
Outils de la discussion



Fuseau horaire GMT +2. Il est actuellement 15h47.


 
 
 
 
Partenaires

Hébergement Web