avoir des avis sur ma programmation

avoir des avis sur ma programmation - PHP - Programmation

Marsh Posté le 30-07-2011 à 20:51:10    

Bonjour
 
J'aimerai bien avoir des avis sur la manière dont je code.  
 
Puis je envoyer à quelqu'un de bonne volonté une page "type" qui est représentative de la manière dont je programme. Je précise que je ne connaissais pas grand chose à tous ces termes html, php , css il y a quelques semaines. Donc c'est forcément truffé de choses pas belles.... mais vos avis m'intéresseraient.  
 
Merci
 
Dominique
 

Reply

Marsh Posté le 30-07-2011 à 20:51:10   

Reply

Marsh Posté le 30-07-2011 à 20:56:51    

poste le directement ici, ce sera le plus simple


---------------

Reply

Marsh Posté le 30-07-2011 à 21:14:58    

pas tres pratique. Ca va faire des pages et des pages. Je peux t'envoyer cet exemple en mp ?
 

Reply

Marsh Posté le 30-07-2011 à 21:17:37    

en même temps tu as pas besoin de tout nous montrer, faut voir la façon dont tu indentes, dont tu nommes et gères tes variables, etc...

Reply

Marsh Posté le 30-07-2011 à 21:35:44    

antac a écrit :

en même temps tu as pas besoin de tout nous montrer, faut voir la façon dont tu indentes, dont tu nommes et gères tes variables, etc...


 
 
bon ok, je me lance. Alors voici une page qui gère la creation d'enseignants. J'ai une page dans un réperteroire "controleur", une page dans un répertoire "vue" et un index.php qui appelle le bon contrôleur.  
 
1) tout d'abord le controleur :
 

Code :
  1. <?php
  2. include_once 'class/personne.class.php';
  3. include_once 'class/etablissement.class.php';
  4. include_once 'class/securite.class.php';
  5. /* initialisation des variables qui seront ensuite reprises dans la vue */
  6. $id_etablissement = $_SESSION['_ID_ETABLISSEMENT'];
  7. $id_personne = "";
  8. $civilite=0;
  9. $nom = "";
  10. $prenom = "";
  11. $email = "";
  12. $login = "";
  13. $password = "";
  14. $commentaire = "";
  15. $cp="";
  16. $adresse1="";
  17. $adresse2="";
  18. $cp="";
  19. $commune="";
  20. $erreur = false;
  21. $erreur_libelle = "";
  22. // si formulaire posté  
  23. if (isset($_POST['ok']))
  24. {
  25. $_POST  = array_map('securite::html', $_POST);
  26. $id_personne = $_POST['id_personne'];
  27. //est ce que cette personne essaye d'accéder à un administrateur qui n'est pas de son établissement ?
  28. if ($id_personne != "" ){
  29.  if (Securite::login_autorise_personne($_SESSION['_ID_PERSONNE'], $id_personne) == false ) {header('Location: index.php?section=acces_interdit');exit;}
  30. }
  31. $civilite = $_POST['civilite'];
  32. $nom = $_POST['nom'];
  33. $prenom = $_POST['prenom'];
  34. $email = $_POST['email'];
  35. $password = $_POST['password'];
  36. $commentaire = $_POST['commentaire'];
  37. $adresse1 = $_POST['adresse1'];
  38. $adresse2 = $_POST['adresse2'];
  39. $cp = $_POST['cp'];
  40. $commune = $_POST['commune'];
  41. // vérif du nom
  42. if (($_POST['nom'] == "" ) or (!isset($_POST['nom'])))
  43. {  $erreur_libelle .= "- Saisir un nom. <br />";  $erreur = true;    }
  44. else {
  45.  // vérif du nom
  46.  if (!preg_match("#^[a-zA-Z' ]{2,}$#", $_POST['nom']))
  47.  {  $erreur_libelle .= "- Le nom ne doit contenir que des lettres. <br />";   $erreur = true;    }
  48. }
  49. // vérif présence de l'email
  50. if (($_POST['email'] == "" ) or (!isset($_POST['email'])))
  51. {  $erreur_libelle .= "- Saisir un email. <br />";  $erreur = true;    }
  52. else {
  53.   // vérif format de l'email
  54.   if (!preg_match("/^[a-zA-Z0-9._-]+@[a-z0-9._-]{2,}\.[a-z]{2,4}$/", $_POST['email']))
  55.   {  $erreur_libelle .= "- Format d'email incorrect (exemple correct : eric.dupont@orange.fr). <br />";   $erreur = true;    }
  56. }
  57. // vérifier saisie login
  58. if ((!isset($_POST['login'])) or ($_POST['login']=="" ))
  59. { $erreur_libelle .= "- Saisir un login. <br />"; $erreur = true;  }
  60. else {
  61.  // vérifier unicité login
  62.  if (isset($_POST['login'])) {
  63.   $login = $_POST['login'];
  64.   if ( (personne::verifUniciteLogin($_POST['login'], $_POST['id_personne']) == false) )
  65.   { $erreur_libelle .= "- Ce login est déjà utilisé. <br />"; $erreur = true; }
  66.  }
  67. }
  68. // vérif du password
  69. if (($_POST['password'] == "" ) or (!isset($_POST['password'])))
  70. {  $erreur_libelle .= "- Saisir un mot de passe. <br />";  $erreur = true;    }
  71. // si pas d'erreur => maj base de données
  72.     if ($erreur == false)
  73. {
  74.  $personne =  new personne($_POST['id_personne'], 1, $_SESSION['_ID_ETABLISSEMENT'], null, $_POST['civilite'], strtoupper($_POST['nom']), ucwords($_POST['prenom']), $_POST['login'], $_POST['password'], null, null, $_POST['commentaire'], $_POST['adresse1'], $_POST['adresse2'], $_POST['cp'], $_POST['commune'], null, $_POST['email'], null, "N", null, $_SESSION['_LOGIN'], $_SESSION['_LOGIN']);
  75.  if ($_POST['id_personne']!= "" )
  76.  // ==> modification en base
  77.  {
  78.   personne::update($personne);
  79.   // renvoie vers la liste des enseignants apres la modif
  80.   header("location: index.php?section=liste_enseignant" );
  81.  }
  82.  else
  83.  // ==> insertion en base d'un nouvel admin (type = 1)
  84.  {
  85.   $lastID = personne::insert($personne);
  86.   $_GET['id_personne'] = $lastID;
  87.   // renvoie vers la liste des affectations apres la creation
  88.   header("location: index.php?section=enseignant_affectation&id_personne=".$lastID);
  89.  }
  90. }
  91. }
  92. $id_etablissement = $_SESSION['_ID_ETABLISSEMENT'];
  93. // cas de la modif d'un enseignant ==> recherche des infos de cet enseignant en base
  94. if (isset($_GET['id_personne'])) {
  95. $_GET  = array_map('securite::html', $_GET);
  96. $id_personne = $_GET['id_personne'];
  97. //est ce que cette personne essaye d'accéder à un administrateur qui n'est pas de son établissement ?
  98. if (Securite::login_autorise_personne($_SESSION['_ID_PERSONNE'], $id_personne) == false ) {header('Location: index.php?section=acces_interdit');exit;}
  99. $personne = personne::select($id_personne);
  100. $id_etablissement = $personne['id_etablissement'];
  101. $civilite = $personne['civilite'];
  102. $nom = $personne['nom'];
  103. $prenom = $personne['prenom'];
  104. $login = $personne['login'];
  105. $email = $personne['email'];
  106. $password = $personne['password'];
  107. $commentaire = $personne['commentaire'];
  108. $adresse1 = $personne['adresse1'];
  109. $adresse2 = $personne['adresse2'];
  110. $cp = $personne['cp'];
  111. $commune = $personne['commune'];
  112. }
  113. include_once 'vue/enseignant/enseignant.php';
  114. ?>


 
 
je vous l'avais dit, c'est verbeux....
 
Et la vue :
 

Code :
  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.1//EN" "http://www.w3.org/TR/xhtml11/DTD/xhtml11.dtd">
  2. <html xmlns="http://www.w3.org/1999/xhtml" xml:lang="fr" >
  3. <head>
  4.        <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1" />
  5.    <title>Etablissement</title>
  6.    <link rel="stylesheet" media="screen" type="text/css" title="Design" href="vue/css/style.css" />
  7.    <script src="vue/js/verif_formulaire_etablissement_login.js" type="text/javascript"></script>
  8.    <script src="vue/js/generatePassword.js" type="text/javascript"></script>
  9. </head>
  10. <body>
  11.  <?php include_once("vue/include/en_tete.php" );  ?>
  12.  <?php include_once("vue/include/menu.php" );  ?>
  13.  <div id="contenu">
  14.   <!-- ******************
  15.     * menu à onglets *
  16.     ******************  -->
  17.   <?php if(isset($id_personne)){ $onglet_actif = 1; include_once 'vue/enseignant/entete_enseignant.php';} ?>
  18.   <!-- *************************
  19.     * formulaire enseignant *
  20.     ************************* -->
  21.   <!--  <form name="f" class="form_centre" method="post" action="index.php?section=enseignant&amp;id_personne=<?php echo $id_personne; ?>" onsubmit="return verifForm(this)" >  -->
  22.   <form  id="f" class="form_centre" method="post" action="index.php?section=enseignant" onsubmit="return verifForm(this)" >
  23.   <p>
  24.            <input type="hidden" name="id_etablissement"   value="<?php echo $id_etablissement;  ?>" />
  25.            <input type="hidden" name="id_personne"    value="<?php echo $id_personne;   ?>" />
  26.    <label>Civilité :</label>  <select name="civilite" onkeyup="verif_civilite(this)" >
  27.             <option value="0" selected="selected">-- civilité --</option>
  28.             <option value='Melle'<?php if ($civilite=='Melle')  {echo "selected='selected'";}?>>Mademoiselle</option>
  29.             <option value='Mde'  <?php if ($civilite=='Mde')    {echo "selected='selected'";}?>>Madame</option>
  30.             <option value='Mr'  <?php if ($civilite=='Mr')  {echo "selected='selected'";}?>>Monsieur</option>
  31.            </select><br />
  32.    <label>Nom :</label>   <input type="text"  name="nom"   class="UpperCase" value = "<?php echo $nom  ?>" onblur="verif_nom(this)"   /><br />
  33.    <label>Prénom :</label>   <input type="text"  name="prenom"   class="Capitale" value = "<?php echo $prenom ?>"         /> <br />
  34.    <label>Email :</label>   <input type="text"  name="email"   value = "<?php echo $email  ?>"  onblur="verif_email(this)"  /><br />
  35.    <label>Login :</label>   <input type="text"  name="login" id="login"  value = "<?php echo $login  ?>"  onblur="verif_login(this)"  /><br />
  36.            <!-- <input type="checkbox" name="choixautologin" onclick="login_disabled()"/><em>Laisser choisir le système</em><br />  -->
  37.    <label>Mot de passe :</label> <input type="text"  id="password" name="password" value="<?php echo $password?>"  onblur="verif_password(this)" title="un bon mot de passe doit être une combinaison de lettres et chiffres, et de longueur supérieure à 6 caractères"/><input type="button" name="genererpassword" value="Générer un mot de passe" onclick="generatePassword()"/><br />
  38.    <label>Commentaire :</label><textarea name="commentaire"   rows="5" cols="40"><?php echo $commentaire?></textarea>    <br /><br />
  39.   </p>
  40.   <fieldset class='width500px'><legend>Adresse</legend>
  41.    <label>Adresse 1:</label>  <input type="text"  name="adresse1" value="<?php echo $adresse1 ?>" maxlength="45" size = "45"  /> <br />
  42.    <label>Adresse 2:</label>  <input type="text"  name="adresse2" value="<?php echo $adresse2 ?>" maxlength="45" size = "45"  /> <br />
  43.    <label>Code postal :</label> <input type="text"  name="cp"   value="<?php echo $cp   ?>" maxlength="5" size="5"  /> <br />
  44.    <label>Commune :</label>  <input type="text"  name="commune"  value="<?php echo $commune ?>"         /> <br /><br />
  45.   </fieldset>
  46.   <p>
  47.   <label><input type="submit" name="ok" value="OK" /><br /></label>
  48.    <br /><br /><span class="message_erreur"><?php echo $erreur_libelle ?></span>
  49.   </p></form>
  50.    </div>
  51.  
  52.  
  53.  
  54.  
  55.  
  56.        <?php include_once("vue/include/pied_page.php" ); ?>
  57.    </body>
  58. </html>


 
exemple de classe pour mettre à jour la bdd mysql :
 

Code :
  1. public static function insert(personne  $personne)
  2. {
  3.  include_once 'connectionBDD.class.php';
  4.  include_once 'class/date.class.php';
  5.  // creation d'un acces bdd
  6.  // $maconnexion = new connectionBDD();
  7.  // $bdd = $maconnexion->getconnectionBDD();
  8.  $bdd = connectionBDD::getInstance()->getConnexion();
  9.  $requete = $bdd->prepare('insert into personne(
  10.                    id_type_personne,
  11.          id_etablissement,
  12.          id_regime_scolaire,
  13.                    civilite,
  14.                    nom,
  15.                    prenom,
  16.                    login,
  17.                    password,
  18.                    age_password,
  19.                    date_naissance,
  20.                    commentaire,
  21.                    adresse1,
  22.                    adresse2,
  23.                    cp,
  24.                    commune,
  25.                    pays,
  26.                    email,
  27.                    photo,
  28.                    is_admin,
  29.                    sexe,
  30.                    date_creation,
  31.                    auteur_creation,
  32.                    date_maj,
  33.                    auteur_maj
  34.                    )   values   (
  35.                    :id_type_personne,
  36.                    :id_etablissement,
  37.                    :id_regime_scolaire,
  38.                    :civilite,
  39.                    :nom,
  40.                    :prenom,
  41.                    :login,
  42.                    :password,
  43.                    :age_password,
  44.                    :date_naissance,
  45.                    :commentaire,
  46.                    :adresse1,
  47.                    :adresse2,
  48.                    :cp,
  49.                    :commune,
  50.                    :pays,
  51.                    :email,
  52.                    :photo,
  53.                    :is_admin,
  54.                    :sexe,
  55.                    now(),
  56.                    :auteur_creation,
  57.                    null,
  58.                    null)
  59.                    ');
  60.  $requete->bindValue(':id_type_personne',  $personne->id_type_personne);
  61.  $requete->bindValue(':id_etablissement',  $personne->id_etablissement);
  62.  $requete->bindValue(':id_regime_scolaire',  $personne->id_regime_scolaire);
  63.  $requete->bindValue(':civilite',    $personne->civilite);
  64.  $requete->bindValue(':nom',     $personne->nom);
  65.  $requete->bindValue(':prenom',     $personne->prenom);
  66.  $requete->bindValue(':login',     $personne->login);
  67.  $requete->bindValue(':password',   $personne->password);
  68.  $requete->bindValue(':age_password',   $personne->age_password);
  69.  $requete->bindValue(':date_naissance',   $personne->date_naissance);
  70.  $requete->bindValue(':commentaire',   $personne->commentaire);
  71.  $requete->bindValue(':adresse1',    $personne->adresse1);
  72.  $requete->bindValue(':adresse2',    $personne->adresse2);
  73.  $requete->bindValue(':cp',      $personne->cp);
  74.  $requete->bindValue(':commune',    $personne->commune);
  75.  $requete->bindValue(':pays',     $personne->pays);
  76.  $requete->bindValue(':email',     $personne->email);
  77.  $requete->bindValue(':photo',     $personne->photo);
  78.  $requete->bindValue(':is_admin',    $personne->is_admin);
  79.  $requete->bindValue(':sexe',     $personne->sexe);
  80.  $requete->bindValue(':auteur_creation',  $personne->auteur_creation);
  81.  $requete->execute() or die(print_r($requete->errorInfo()));
  82.  return $bdd->lastInsertId();
  83. }


 
Donc mes questions :
- ça vous parait correct ? et bien fait  ?
- je contrôle tout ce qui arrive par le formulaire, même si la page html contrôle en amont avec son propre code js. N'est ce pas trop luxueux ? (cette partie est particulièrement verbeuse....)
- l'utilisation de fonction dans des classes pour mettre à jour la bdd : est ce la bonne méthode ?  
 
Le tout fonctionne parfaitement.  
 
Indulgence sivouplai, je débute dans ce langage. Je vous remercie d'avance de tous les commentaires que vous pourriez faire sur cet extrait. Comme j'ai pas mal de pages à faire dans ce style, je voulais avoir des avis avant de me lancer dans les autres pages.  
 
DOminique
 

Reply

Marsh Posté le 31-07-2011 à 09:48:08    

dans la requete sql, le auteur_maj me choque. L'auteur n'est-il pas déjà authentifié quand il mets à jour une personne. Dans ce cas c'est l'id de l'auteur que tu mets pas toutes ses informations.


---------------
Blablaté par Harko
Reply

Marsh Posté le 31-07-2011 à 17:47:49    

Salut Gatsu35
 
l'auteur_maj : c'est bien l'id de la personne connectée qui est mémorisée en table. Peut être que le nom de colonne est mal choisi.  
 
DOminique
 
 

Reply

Marsh Posté le 31-07-2011 à 20:05:04    

domi_bu a écrit :

Salut Gatsu35

 

l'auteur_maj : c'est bien l'id de la personne connectée qui est mémorisée en table. Peut être que le nom de colonne est mal choisi.

 

DOminique

 




Je suis une merde j'ai mal lu la requete. Pardon :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 01-08-2011 à 16:50:24    

Citation :

Je précise que je ne connaissais pas grand chose à tous ces termes html, php , css il y a quelques semaines.


Et tu utilises déjà des variables statics !  :jap:  
Et puis ça, je trouve ça sympa pour quelqu'un de débutant

Code :
  1. $_GET  = array_map('securite::html', $_GET);


Franchement c'est bien.


Message édité par Scarf3ss3 le 01-08-2011 à 16:50:53
Reply

Marsh Posté le 01-08-2011 à 17:34:20    

Après, personnellement, ce qui me gène un peu là dedans c'est de réécrire une variable globale, si pour une raison ou pour une autre, un autre de tes scripts exploite cette variable globale, et qu'elle a été altérée par ta méthode security::html, ça peut créer des effets de bord assez gênant...

Reply

Marsh Posté le 01-08-2011 à 17:34:20   

Reply

Marsh Posté le 03-08-2011 à 21:24:08    

bonsoir tout le monde
 
je me permets de relancer et plus particulièrement au sujet de la manière dont je fais l'insertion en base.
 
Actuellement j'utilise une fonction statique qui est déclarée dans la classe. Et j'appelle cette fonction en faisant un "personne::insert($personne)" avec un passage de paramètre.
 
Mais j'ai vu sur d'autres tuto que certains déclarent une méthode insertion dans la classe (classe "personne" par exemple) pour ensuite faire l'insertion par "$p->insertion()" où $p est un objet créé avec la même classe "personne".
 
On est d'accord : les 2 techniques fonctionnent et réalisent une insertion d'une ligne en base de données.  
 
Mais y-a-t-il une méthode à privilégier ? et pourquoi  ?
 
DOminique
 

Reply

Marsh Posté le 04-08-2011 à 10:12:42    

La 2ème solution me paraît plus naturelle. T'as un objet en mémoire et à un moment donné, tu veux le stocker en base. De la même manière, cet objet peut être construit à partir d'infos filées en paramètres dans le constructeur ou chargé à partir d'infos en BD...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-08-2011 à 10:26:43    

+1
il me semble que c'est a la charge des objets de savoir se sauvegarder.  
 
Tout mes objets ont donc une méthode save qui se charge de faire l'insert ou l'update


---------------

Reply

Marsh Posté le 04-08-2011 à 10:43:16    

flo850 a écrit :

+1
il me semble que c'est a la charge des objets de savoir se sauvegarder.  
 
Tout mes objets ont donc une méthode save qui se charge de faire l'insert ou l'update


Ca  veut dire que l'objet sait comment est structurée la base ?
Quand tu parle de "tes objects", ce sont des classes complexes ou de simples classes qui ne contiennent de des infos ?


---------------
Blablaté par Harko
Reply

Marsh Posté le 04-08-2011 à 10:58:56    

1/ oui ( tout du moins pour les objets pour lesquels ça à un sens , pas la session par exemple )
2/ c'est à dire ? 


Message édité par flo850 le 04-08-2011 à 10:59:11

---------------

Reply

Marsh Posté le 04-08-2011 à 11:14:22    

Ben en gros, si ce ne sont que de simples objets de données, une classe Animal par exemple. Je me vois mal lui faire connaitre la base de données :/
 
Ou alors cette classe représente une table de la base, et j'ai un "manager" qui gère de l'insérer, mais je me vois mal avoir ce code dans la classe (même s'il y a de l'héritage).
 
Je peux me tromper bien sur, si tu pouvais m'éclairer je suis preneur d'informations sur les bonnes pratiques du développement coté serveur :o


---------------
Blablaté par Harko
Reply

Marsh Posté le 04-08-2011 à 12:00:46    

Tu peux très bien avoir une simple méthode "save" qui appelle une autre classe qui se connecte à la BD et qui elle, sait comment sauvegarder l'objet (par ex, en lui passant simplement, le nom de la table à remplir)...


---------------
Astres, outil de help-desk GPL : http://sourceforge.net/projects/astres, ICARE, gestion de conf : http://sourceforge.net/projects/icare, Outil Planeta Calandreta : https://framalibre.org/content/planeta-calandreta
Reply

Marsh Posté le 04-08-2011 à 12:02:24    

Les deux approches sont valables.
 
Les objets peuvent être capables de se sauvegarder eux-même en base de données, dans des approches type active record (http://fr.wikipedia.org/wiki/Activ [...] onception))
 
Ou alors on a un manager qui manage justement les objets. Les deux approches se font et sont valables je pense.


---------------
Mon Feedback !
Reply

Marsh Posté le 07-08-2011 à 18:51:34    

et des méthodes statiques pour le manager ?

Code :
  1. public static function save(Animal $animal) { ...

Message cité 1 fois
Message édité par Profil supprimé le 08-08-2011 à 00:36:51
Reply

Marsh Posté le 07-08-2011 à 20:23:10    


C'est pas mieux d'utiliser un singleton ?


---------------
Blablaté par Harko
Reply

Marsh Posté le 08-08-2011 à 00:38:45    

justement je ne sais pas

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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