OVH Cloud OVH Cloud

bonnes pratiques (encore!)

11 réponses
Avatar
Vincent GAUVIN
Bonjour
Je débute en php, donc la plus grande indulgence est demandée;-)
Je souhaite réaliser une /petite/ appli de gestion (php et MySQL) que je
pense être très simple. Je n'ai aucune formation de base en
programmation et je souhaite acquérir les moins mauvaise méthodes en php:-)
Pour le moment, mon aplli se résume à ça:
-Un form html (form1) avec une case txt ou l'utilisateur s'identifie par
son code.
-Dans une table Mysql j'extrais les infos de cet utilisateur que
j'affiche (nom prénom adresse....)
-Puis je lui propose un nouveau form (form2) avec plusieurs champs qu'il
doit compléter.
-Puis je récupère les données de ce form pour alimenter une table Mysql.

Voilà. Rien que de très simple me semble-t-il.
Au début j'avais fait comme ça, tout ds la même page html:
-form1 --> html
-du code php
-form2-->html
--du code php.
Et ça marchait très bien.
Mais ca ne me paraissait pas /propre/. Alors j'ai fait ça (1 seule page
html et les scripts dans un sous dossier):
-form1 action script1.php form2 action script2--> html

Evidemment ça fonctionne pareil....sauf que maintenant dès que script1
s'éxécute, la page html s'afface et je perds la /lecture/ des infos
identité de l'utilisateur et en plus à la fin de l'éxécution de script1,
le form2 ne s'affiche pas.
Voilà j'espère avoir été clair;-) C'est évidemment un counnerie de
débutant mais si qqun pouvait me dépanner..
Merci à tous

--
Cordialement,
VG

10 réponses

1 2
Avatar
Steuf
Bonjour


Bonjour


Voilà. Rien que de très simple me semble-t-il.
Au début j'avais fait comme ça, tout ds la même page html:
-form1 --> html
-du code php
-form2-->html
--du code php.
Et ça marchait très bien.
Mais ca ne me paraissait pas /propre/. Alors j'ai fait ça (1 seule page
html et les scripts dans un sous dossier):
-form1 action script1.php form2 action script2--> html


Heu personnelement j'aurais tout laissé sur la même page...


Evidemment ça fonctionne pareil....sauf que maintenant dès que script1
s'éxécute, la page html s'afface et je perds la /lecture/ des infos
identité de l'utilisateur et en plus à la fin de l'éxécution de script1,
le form2 ne s'affiche pas.


Remettez tout sur la même "page" c'était très bien comme c'était avant.
Dans le sens ou, pour passer des informations d'une page à l'autre c'ets
toujours plus contraignant que de les utiliser sur la même page, surtout
quand les informations sont réutilisées pour la deuxième page.

Sinon après ne pas oublier que l'on peut utiliser la méthode get dans le
formulaire au lieu de post ( Défaut de la methode get : Ca passe par
l'url, donc ne pas utiliser pour passer des mots de passes, ou alors les
crypter ), il existe aussi les sessions en php pour garder des données
dont on aura besoin plus tard ( Eviter aussi MDP dans les sessions ).

Voilà j'espère avoir été clair;-) C'est évidemment un counnerie de
débutant mais si qqun pouvait me dépanner..
Merci à tous



De rien

--
Site dédié au développement WEB : http://www.exinsidephp.com

Avatar
bruno modulix
Steuf wrote:

Voilà. Rien que de très simple me semble-t-il.
Au début j'avais fait comme ça, tout ds la même page html:
(snip)


Mais ca ne me paraissait pas /propre/. Alors j'ai fait ça (1 seule
page html et les scripts dans un sous dossier):
-form1 action script1.php form2 action script2--> html


Heu personnelement j'aurais tout laissé sur la même page...


Oui, c'est vrai, c'est tellement plus facile à maintenir, toute une
application sur une seule page, avec tout plein de html dedans, mélangé
à la logique, et des affichages conditionnels dans tous les sens...

--
bruno desthuilliers
ruby -e "print ''.split('@').collect{|p|
p.split('.').collect{|w| w.reverse}.join('.')}.join('@')"


Avatar
Vincent GAUVIN
Steuf wrote:



Heu personnelement j'aurais tout laissé sur la même page...


Ah bon? Et bien meri. Voilà qui règle mon pb:-)
@+


--
Cordialement,
VG

Avatar
bruno modulix
Vincent GAUVIN wrote:
(snip)
Pour le moment, mon aplli se résume à ça:
-Un form html (form1) avec une case txt ou l'utilisateur s'identifie par
son code.
-Dans une table Mysql j'extrais les infos de cet utilisateur que
j'affiche (nom prénom adresse....)
-Puis je lui propose un nouveau form (form2) avec plusieurs champs qu'il
doit compléter.
-Puis je récupère les données de ce form pour alimenter une table Mysql.

Voilà. Rien que de très simple me semble-t-il.
Au début j'avais fait comme ça, tout ds la même page html:
Et ça marchait très bien.
Mais ca ne me paraissait pas /propre/.


Non.

Alors j'ai fait ça (1 seule page
html et les scripts dans un sous dossier):
-form1 action script1.php form2 action script2--> html


Comprends pas :(

Evidemment ça fonctionne pareil....sauf que maintenant dès que script1
s'éxécute, la page html s'afface et je perds la /lecture/ des infos
identité de l'utilisateur


le protocole HTTP n'a pas de mémoire. Le modèle d'exécution est simple:
le navigateur envoie une requête (ie: GET scheme://path/resource), le
serveur traite la requête, renvoie le résultat du traitement, et oublie
tout. PHP intervient au moment du traitement de la requête.

Bref, si tu veux conserver des données entre deux requêtes, c'est à toi
de le gérer. Ca s'appelle des sessions, et PHP offre un support pour ça :
http://fr.php.net/manual/en/ref.session.php


et en plus à la fin de l'éxécution de script1,
le form2 ne s'affiche pas.


Bin, tu lui demande de s'afficher au moins ?-)

Voilà j'espère avoir été clair;-)


Moyennement, ou alors c'est qu'il me faut un autre café !-)

C'est évidemment un counnerie de
débutant mais si qqun pouvait me dépanner..


Difficile sans voir le code.

En tout état de cause, il te faut au moins deux controleurs de page, un
pour le login et un pour l'édition des données. En pseudo-code:

# controleur login
# -------------------------
inclure le code applicatif

si un code utilisateur a été posté:
essayer de lire les données utilisateur correspondantes
si ok:
stocker ces données en session
rediriger vers la page edition
sortir
sinon:
message d'erreur = "code erroné"
fin si
fin si

inclure le formulaire de login
(qui affichera le message d'erreur s'il existe)
# -------------------------

# controleur edition
# -------------------------
inclure le code applicatif

s'il n'y a pas de données utilisateur en session:
rediriger vers la page login
sortir
fin si

si des données utilisateur ont été soumise:
recupérer les données depuis $_POST
valider les données
si les données sont valides:
enregistrer dans la base
message = "données sauvegardées"
sinon
message = "erreur de validation"
fin si
sinon:
récuperer les données depuis la session
fin si

inclure le formulaire d'édition
(qui affichera les messages et les données)
# -------------------------


les formulaires sont des pages php construites ainsi:
<?php
include "header.php";
affiche_messages();
?>
<!--
code du formulaire ici,
uniquement des affichages,
aucun traitement
-->
<?php
include "footer.php"
?>

Tout le code destiné à lire et écrire les données est dans un fichier
php inclus par les deux contrôleurs. Ce code est rédigé de telle façon
que les contrôleurs n'aient pas à se soucier de la façon dont ces
données sont stockées (fichiers textes, base SQL, tablette d'argile...).
Dans ton cas, trois fonctions (lire, valider, enregistrer) devraient
suffire...

Voili voilà... C'est probablement la façon la plus simple de contruire
une application en PHP. Pour le reste et les détails, je te renvoie aux
écrits de John Gallet:
http://www.saphirtech.com/cours_php.html
http://www.saphirtech.com/securite.html

HTH
--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"

Avatar
Steuf

Oui, c'est vrai, c'est tellement plus facile à maintenir, toute une
application sur une seule page, avec tout plein de html dedans, mélangé
à la logique, et des affichages conditionnels dans tous les sens...


J'ai dit toute une application ? Ici c'ets deux formulaire dépendant
l'un de l'autre, et c'ets beaucoup mieux de les mettre sur la même page.

Mais bon au lieu de critiquer pour rien, essayez plutôt de le faire
avancer en lui proposant une solution.

Merci



--
Site dédié au développement WEB : http://www.exinsidephp.com

Avatar
bruno modulix
Vincent GAUVIN wrote:
Steuf wrote:



Heu personnelement j'aurais tout laissé sur la même page...


Ah bon? Et bien meri. Voilà qui règle mon pb:-)


A ta place, je ne dirais pas merci. Enfin, c'est toi qui voit: tu veux
faire du code propre et maintenable ou de la soupe de balises ? Dans le
second cas, effectivement, ton problème est résolu...

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
bruno modulix
Steuf wrote:

Oui, c'est vrai, c'est tellement plus facile à maintenir, toute une
application sur une seule page, avec tout plein de html dedans, mélangé
à la logique, et des affichages conditionnels dans tous les sens...



J'ai dit toute une application ?


Petite application deviendra grande !-)

Mais il n'est pas besoin d'attendre d'avoir une 'grosse' application
pour travailler proprement...

Ici c'ets deux formulaire dépendant
l'un de l'autre,
et c'ets beaucoup mieux de les mettre sur la même page.


L'un de noux deux (il se peut bien sûr que ce soit moi !-) n'a pas dû
bien comprendre les specs !-) Pour ma part, j'avais compris le premier
formulaire comme un login permettant à un utilisateur de visualiser et
modifier les données le concernant, mais à la réflexion, ce pourrait
effectivement aussi bien être un système de sélection pur l'admin du
site (quoique dans ce cas, une liste et/ou une recherche multicritère
seraient plus appropriées AMHA).

Si effectivement les deux formulaires dépendent fortement l'un de
l'autre, on peut vouloir les afficher dans la même page.

*Mais* ça n'implique pas que tout les formulaires, la logique et la
présentation doivent être mélangés dans un même fichier. Même pour une
seule "page", séparer proprement logique métier (accès en
lécture/écriture aux données, validation des données etc), la
présentation (formulaires) et la logique applicative (le controleur qui
'lie' les données et la présentation) est une bonne idée. A moins bien
sûr d'avoir un goût prononcé pour le code spaghetti.

Mais bon au lieu de critiquer pour rien,
Pas pour rien. Ayant régulièrement à maintenir du code spaghetti, j'ai

de bonnes raisons de critiquer ce "paradigme".

essayez plutôt de le faire
avancer en lui proposant une solution.


Je l'ai fait en même temps - après, il y a les délais de modérations...

Merci


De rien.

--
bruno desthuilliers
python -c "print '@'.join(['.'.join([w[::-1] for w in p.split('.')]) for
p in ''.split('@')])"


Avatar
Steuf

Je l'ai fait en même temps - après, il y a les délais de modérations...



No problème on a pas dù comprendre ce qu'il voulait de la même façon,
mais il est clair que je généraliserais pas en disant qu'il faut mettre
tous les formulaires sur une même page ;-).

Mes plates excuses je suis un peu tendu en se moment je sais pas trop ce
que j'ai, je n'ai peu être pas assez de someil vu le boulo que j'ai en
se moment :-(.

Désolé


--
Site dédié au développement WEB : http://www.exinsidephp.com

Avatar
Vincent GAUVIN
bruno modulix wrote:
...

Tout le code destiné à lire et écrire les données est dans un fichier
php inclus par les deux contrôleurs. Ce code est rédigé de telle façon
que les contrôleurs n'aient pas à se soucier de la façon dont ces
données sont stockées (fichiers textes, base SQL, tablette d'argile...).
Dans ton cas, trois fonctions (lire, valider, enregistrer) devraient
suffire...

Voili voilà... C'est probablement la façon la plus simple de contruire
une application en PHP. Pour le reste et les détails, je te renvoie aux
écrits de John Gallet:
http://www.saphirtech.com/cours_php.html
http://www.saphirtech.com/securite.html


Grand merci. Dans votre réponse, beaucoup de notions que je ne connais
pas. Maintenant que vous m'avez donné les clés, j'ouvre les portes
....et je reviens sûrement dans 15j avec de nouvelles questions;-)
@+
--
Cordialement,
VG

Avatar
Vincent GAUVIN
bruno modulix wrote:


L'un de noux deux (il se peut bien sûr que ce soit moi !-) n'a pas dû
bien comprendre les specs !-) Pour ma part, j'avais compris le premier
formulaire comme un login permettant à un utilisateur de visualiser et
modifier les données le concernannt,


Bonjour Bruno et merci de votre réponse,
Oui c'est exactement ce que vous venez de décrire.


Si effectivement les deux formulaires dépendent fortement l'un de
l'autre, on peut vouloir les afficher dans la même page.


Oui encore. Je veux que les form s'affichent sur la même page. N'y-t-il
pas d'autre solution que de mélanger le code html et le php? Car comme
je vous le précisais dans le post initial, si je sépare l'html du php et
que j'appelle les scripts par /action=.../ la page html s'efface et je
ne sais pas comment la réafficher à la fin du script.

*Mais* ça n'implique pas que tout les formulaires, la logique et la
présentation doivent être mélangés dans un même fichier. Même pour une
seule "page", séparer proprement logique métier (accès en
lécture/écriture aux données, validation des données etc), la
présentation (formulaires) et la logique applicative (le controleur qui
'lie' les données et la présentation) est une bonne idée. A moins bien
sûr d'avoir un goût prononcé pour le code spaghetti.


Oui encore. C'est bien cela que je souhaite éviter.


Merci à tous les 2 de vos réponses.

--
Cordialement,
VG

1 2