Forum |  HardWare.fr | News | Articles | PC | S'identifier | S'inscrire | Shop Recherche
2446 connectés 

  FORUM HardWare.fr
  Programmation
  PHP

  avoir des avis sur ma programmation

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

avoir des avis sur ma programmation

n°2092309
domi_bu
Posté le 30-07-2011 à 20:51:10  profilanswer
 

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
 

mood
Publicité
Posté le 30-07-2011 à 20:51:10  profilanswer
 

n°2092310
flo850
moi je
Posté le 30-07-2011 à 20:56:51  profilanswer
 

poste le directement ici, ce sera le plus simple


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

n°2092313
domi_bu
Posté le 30-07-2011 à 21:14:58  profilanswer
 

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

n°2092314
antac
..
Posté le 30-07-2011 à 21:17:37  profilanswer
 

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...

n°2092317
domi_bu
Posté le 30-07-2011 à 21:35:44  profilanswer
 

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
 

n°2092366
gatsu35
Blablaté par Harko
Posté le 31-07-2011 à 09:48:08  profilanswer
 

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
n°2092423
domi_bu
Posté le 31-07-2011 à 17:47:49  profilanswer
 

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
 
 

n°2092440
gatsu35
Blablaté par Harko
Posté le 31-07-2011 à 20:05:04  profilanswer
 

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
n°2092675
Scarf3ss3
Posté le 01-08-2011 à 16:50:24  profilanswer
 

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
n°2092708
the_bigboo
Posté le 01-08-2011 à 17:34:20  profilanswer
 

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...

mood
Publicité
Posté le 01-08-2011 à 17:34:20  profilanswer
 

n°2093209
domi_bu
Posté le 03-08-2011 à 21:24:08  profilanswer
 

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
 

n°2093247
rufo
Pas me confondre avec Lycos!
Posté le 04-08-2011 à 10:12:42  profilanswer
 

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
n°2093249
flo850
moi je
Posté le 04-08-2011 à 10:26:43  profilanswer
 

+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


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

n°2093254
gatsu35
Blablaté par Harko
Posté le 04-08-2011 à 10:43:16  profilanswer
 

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
n°2093258
flo850
moi je
Posté le 04-08-2011 à 10:58:56  profilanswer
 

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

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

n°2093259
gatsu35
Blablaté par Harko
Posté le 04-08-2011 à 11:14:22  profilanswer
 

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
n°2093263
rufo
Pas me confondre avec Lycos!
Posté le 04-08-2011 à 12:00:46  profilanswer
 

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
n°2093264
Tirkyth
Posté le 04-08-2011 à 12:02:24  profilanswer
 

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 !
n°2093809
Profil sup​primé
Posté le 07-08-2011 à 18:51:34  answer
 

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
n°2093819
gatsu35
Blablaté par Harko
Posté le 07-08-2011 à 20:23:10  profilanswer
 


C'est pas mieux d'utiliser un singleton ?


---------------
Blablaté par Harko
n°2093833
Profil sup​primé
Posté le 08-08-2011 à 00:38:45  answer
 

justement je ne sais pas

mood
Publicité
Posté le   profilanswer
 


Aller à :
Ajouter une réponse
  FORUM HardWare.fr
  Programmation
  PHP

  avoir des avis sur ma programmation

 

Sujets relatifs
Cours particuliers de programmation Javaprogrammation vba boucle if
[Ada][Programmation Orienté Objet] déclaration de procédure abstraite.Demande d'avis pour choix langage de programmation
programmation d'un stockage partagé pour groupe de travailProgrammation différence finie sous Excel
Projet de création de site web, vos conseils, vos avis...Problème programmation orientée objet
Probleme en Programmation C :(Choisir un language de programmation : Lequel ? (vos avis)
Plus de sujets relatifs à : avoir des avis sur ma programmation


Copyright © 1997-2022 Hardware.fr SARL (Signaler un contenu illicite / Données personnelles) / Groupe LDLC / Shop HFR