Est ce que bout de code est exploitable ?

Est ce que bout de code est exploitable ? - PHP - Programmation

Marsh Posté le 25-04-2010 à 15:28:10    

Tout d'abord bonjour a tous.
Je tente actuellement de développé un site web relativement "simple" (j'ai débuté php il y a 15 jours, de grosses lacunes html, a la base j'ai appris la prog via Java).
Ma difficulté principale (pour le moment) est de créer un calendrier, je ne veux pas en télécharger un alors me suis cassé la binette pour créer cette chose :
 

Code :
  1. <?php
  2.  function creerCal($mois){
  3.  $lundi="Mon";
  4.  $mardi="Tue";
  5.  $mercredi="Wed";
  6.  $jeudi="Thu";
  7.  $vendredi="Fri";
  8.  $samedi="Sat";
  9.  $dimanche="Sun";
  10.  $maxJourMois=cal_days_in_month(CAL_GREGORIAN,$mois,date("Y",mktime(0,0,0,$mois,date("d" ),date("Y" ))));
  11.  $tabMois=array(date("F",mktime(0,0,0,$mois,date("d" ),date("Y" ))));
  12.  echo '<table width="70" border="1" bordercolordark cellpadding="3">';
  13.  echo'<tr><th bgcolor=#eed861 colspan="9" align=center scope="col">',date("F",mktime(0,0,0,$mois,date("d" ),date("Y" )))," ",date("Y",mktime(0,0,0,$mois,date("d" ),date("Y" ))),'</th></tr>';
  14.  $tabJour=array($lundi,$mardi,$mercredi,$jeudi,$vendredi,$samedi,$dimanche);
  15.  echo '<tr>';
  16.  for($i=0;$i<7;$i++){
  17.  echo "<td bgcolor=#6b370f align=center><FONT color=#FFFFFF>$tabJour[$i]</td>";
  18.  }
  19.  echo '</tr>';
  20.  echo '<tr>';
  21.  $l=0;
  22.  while($l<6){
  23.    if(date("D",mktime(0,0,0,$mois,1,date("Y" )))!=$tabJour[$l]){
  24.    echo '<td bgcolor=#CCCCCC align=center></td>';
  25.    }else break;
  26.    $l++;
  27.   }
  28. for($j=0;$j<$maxJourMois;$j++){
  29.  for($k=0;$k<7;$k++){
  30.   if (date("D",mktime(0,0,0,$mois,$j+1,date("Y" )))==$tabJour[$k]){
  31.    if (date("d",mktime(0,0,0,$mois,$j+1,date("Y" )))==date("d" )&&date("m",mktime(0,0,0,$mois,$j+1,date("Y" )))==date("m" )){
  32.     echo '<td bgcolor=#FFFFFF align=center>',date("d",mktime(0,0,0,$mois,$j+1,date("Y" ))),'</td>';
  33.    }else if (date("l",mktime(0,0,0,$mois,$j+1,date("Y" )))=="Saturday"||date("l",mktime(0,0,0,$mois,$j+1,date("Y" )))=="Sunday" ){
  34.    echo '<td bgcolor=#CCCCCC align=center>',date("d",mktime(0,0,0,$mois,$j+1,date("Y" ))),'</td>';
  35.     }else echo '<td bgcolor=#eed861 align=center>',date("d",mktime(0,0,0,$mois,$j+1,date("Y" ))),'</td>';
  36.   }
  37.   }
  38.   if (date("l",mktime(0,0,0,$mois,$j+1,date("Y" )))=="Sunday" ){
  39.   echo '</tr>';
  40.   }
  41. }
  42.  echo '</tr>';
  43.  echo '</table>';
  44.  }
  45. ?>


 
 
Mes questions sont :  
 
- Est-ce que ce code est une immondice (déguelasse koa) ?
-Si non, puis-je espérer en faire un datePicker pour un formulaire ?
-Faire ce calendrier en javascript serait plus judicieux (afin d'en faire un datePicker bien sur) ?
 
je vous remercie d'avance, et merci pour votre indulgence (suis débutant rager pas sur ma maladresse ou mes aberrations).


Message édité par boullie le 25-04-2010 à 15:30:55
Reply

Marsh Posté le 25-04-2010 à 15:28:10   

Reply

Marsh Posté le 25-04-2010 à 16:25:42    

Citation :

- Est-ce que ce code est une immondice (déguelasse koa) ?

Est-ce que l'esthétisme est important dans un domaine scientifique comme l'informatique ? Faut il que le programme soit beau ou qu'il marche ? Je ramasse les copies à moins cinq.
 

Citation :

-Si non, puis-je espérer en faire un datePicker pour un formulaire ?

Vous pouvez espérer ce que vous voulez. Il n'y a pas de police de la pensée ici. Mais pour que l'espoir soit réaliste, il serait bien que vous compreniez ce que vous faîtes, plutôt que de faire un copier coller hasardeux. Donc, si vous avez des questions concernant, non pas tout le programme, mais une ou deux, voir trois lignes de ce programme, posez là nous de manière précise. On vous répondra c'est sûr.
 

Citation :

-Faire ce calendrier en javascript serait plus judicieux (afin d'en faire un datePicker bien sur) ?

Voilà une question précise. Ma réponse personnelle est "non, pas du tout". Quand on peux éviter le Javascript, il faut l'éviter, car le Javascript est lent, et il tourne sur le PC de l'utilisateur. Il vaut mieux faire du PHP si on en a la possibilité comme là, car on donne ainsi une page toute préparée à l'utilisateur. C'est un peu comme si on lui donne un plat tout chaud sortant du four PHP, au lieu d'un plat surgelé à faire réchauffer au micro-ondes javascript.

Reply

Marsh Posté le 25-04-2010 à 16:55:26    

merci pour ta réponse rapide.
C'est noté en ce qui concerne javascript, si je peux m'en passer tant mieux.
Désolé pour le bloc de code brut, c'est abusé en effet, de plus j'ai pas mis de commentaires le ferais plus promis.
 
 
 

Reply

Marsh Posté le 26-04-2010 à 10:07:37    

hello, pour simplifié ton code, regarde du coté de strftime, dateperiod, strtotime ;)

Reply

Marsh Posté le 26-04-2010 à 10:23:31    

Pour faire un datePicker, d'un point de vue ergonomie, le javascript est plus approprié. Mais pour l'accessibilité (personnes handicapées visuelles), il fauta voir une solution en html (donc php qui génère le html).
Donc d'abord tu fais tout en html et ensuite, avec du javascript non intrusif, tu remplaces le lien vers le calendrier html par un composant datePicker en javascript. Tu en trouveras facilement sur le web, sinon, tu télécharges l'un de mes softs, Astres ou Icare (cf ma signature) : dans Astres, il n'et qu'en anglais alors que dans Icare, il est en anglais et français ;)
 
et oui, ce code est caca...


Message édité par rufo le 26-04-2010 à 10:23:39

---------------
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 26-04-2010 à 14:37:15    

Merci pour ces réponses stealth et rufo
je vais jeter un coup d'oeil a tout ça, et tenter d'améliorer le code (même si je sens qu'il va aller a la poubelle).
Suis d'accord avec toi, en ce qui concerne l'ergonomie, je ne veux pas reload une page juste pour choisir une date (d'après ce que j'ai lu et de ce qu'on m'as dis : php:coté serv et javascript:coté client),
 donc je vais me tourner vers javascript, essayer par moi meme dans un premier temps et me tourner vers les softs dans un deuxième temps.
 
Mais il me semble que c'est un peu moins pratique  avec javascript pour manipuler la date(disclaimer connerie : ce que j'ai dit est potentiellement une grosse connerie), en tout cas je ne pourrais pas utiliser la technique de comparaison que j'utilise dans le code que je vous ai exposé.
Å plus.


Message édité par boullie le 26-04-2010 à 15:06:33
Reply

Marsh Posté le 26-04-2010 à 14:41:32    

pour info, Javascript a des fonction de manipulation de dates donc ce que tu peux faire en php avec les dates, tu peux le faire en javascript (en natif ou à l'aide libs GPL) ;)


---------------
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 26-04-2010 à 14:51:23    

Ça me rassure, merci pour l'info.
J'attaque javascript et je vous fais un retour sur ce que je produit, pour avoir vos avis.


Message édité par boullie le 26-04-2010 à 15:06:56
Reply

Marsh Posté le 30-04-2010 à 14:55:35    

bonjour à vous,
j'ai reussi comme j'ai pu faire un calendrier (pour le mois courant), en faisant une table html dont les td sont remplies par un script (javascript)
Mon probleme :
Je voudrais faire en sorte que lorsque l'on clique sur un bouton prec ou suiv on change de mois, evidemment je ne demande pas un script mais comment puis je faire ceci avec mon script (est ce possible deja avec ce script) ?
 
le script en question :
 

Code :
  1. // JavaScript Document
  2. window.onload=remplirCase;jourMoisMax;nomMois;
  3. var dateActuelle=new Date();
  4. var premierJour= new Date(dateActuelle.getFullYear(),dateActuelle.getMonth(),1);
  5. var j=premierJour.getDay();
  6. //retourne le nom du mois en cours
  7. function nomMois(){
  8. var chiffreMois=dateActuelle.getMonth();
  9. var tabMois=["Janvier ","Février ","Mars ","Avril ","Mai ","Juin ","Juillet ","Aout ","Septembre ","Octobre ","Novembre ","Décembre "];
  10. for (var i=0;i<=11;i++){
  11.  switch(chiffreMois){
  12.  case i:
  13.  return tabMois[i]+ dateActuelle.getFullYear();
  14.  break;
  15. }
  16. }
  17. }
  18. //retourne le dernier jour du mois
  19. function jourMoisMax(){
  20. var mois=dateActuelle.getMonth();
  21. switch(mois){
  22.  case 0:case 2:case 4:case 6:case 7:case 9:case 11:
  23.  return 30;
  24.  break;
  25.  case 1:
  26.  return 27; //manque fonction bissextile (en cours)
  27.  break;
  28.  default:
  29.  return 29;
  30. }
  31. }
  32. //rempli les td de la page html  
  33. function remplirCase(){
  34.  document.getElementById("titreMois" ).innerHTML=nomMois();
  35. if (j==0){
  36.   j=7;
  37.  }
  38. for(var i=0;i<=jourMoisMax();i++){
  39.  document.getElementById("case"+j).innerHTML=premierJour.getDate()+i;
  40.   j++;
  41. }
  42. }

Reply

Marsh Posté le 30-04-2010 à 14:59:30    

t'es en train de recoder un composant javascript déjà développé apr d'autre je sais pas combien de fois. Ce que tu demandes, tu le trouveras dans mon soft Icare, par ex : il est multi-langues (anglais et fr pour l'instant), il gère la navigation par mois (précédent/suivant) et l'année (liste déroulante) et les jours affichés suivant les 7 jours de la semaine.


---------------
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 30-04-2010 à 14:59:30   

Reply

Marsh Posté le 01-05-2010 à 19:23:31    

Merci encore Rufo,
j'ai jeté un coup d'oeil, sur le crossCalendar.js (et la doc bien sur), mais je n'ai pas compris comment l'utiliser ou je n'y ai pas assez consacré de temps.
J'espère pouvoir m'en servir, de toute façon je continu de tenter  un calendrier(datePicker) comme un exercice afin d'en apprendre plus sur JS.
 :jap:  
A Bientot

Reply

Marsh Posté le 03-05-2010 à 09:47:42    

y a de très bons datepicker construit sur des libs comme jquery ou mootools.
Est-ce bien nécessaire de tout recoder ?
ex : http://docs.jquery.com/UI/Datepicker

Reply

Marsh Posté le 03-05-2010 à 12:19:40    

Bonjour PunkRod,
ouais c'est pas nécessaire, j'avais deja pris un datepicker sur le site de "a de la daube", et il etait très bien, mais je n'arrivais pas a passer la date obtenue par le picker dans ma base de données.
Donc me suis dis je vais le refaire en mode simple, en plus je n'ai besoin que du mois suivant le mois courant.
Mais face a vos réponses, je retente le coup avec le jquery + le soft a Rufo.
Merci pour ces réponses.
ps (j'ai réussi a passer du mois courant au mois suivant youpi j'ai inventé l'eau chaude :bounce: )


Message édité par boullie le 03-05-2010 à 12:20:46
Reply

Marsh Posté le 04-05-2010 à 11:51:13    

ben mon composant, suffit juste de le coupler à une balise input de type texte et de luis donner les paramètres attendus.
Ex :

Code :
  1. <input class="readonly" id="sDate" name="sDate" type="text" size="10" maxlength="10" value="" title="saisir la date" readonly="readonly" />
  2. <script type="text/javascript">
  3. <!--
  4.      DateCalendar = new crossCalendar('DateCalendar', document.forms[0].sDate, 'Libs/JSCalendar/images/', 'd/m/Y', 'Sélectionner une date!', 'fr', true, 'Effacer la date!');
  5. //-->
  6. </script>


 
le nom de la var javascript avant le = doit être la même que dans le premier paramètre de crossCalendar(). Le 2ième est l'objet input type texte. Après, c'est le path de l'endroit où se trouves les images du composant, ensuite, c'est le format de la date pour remplir le input (ici, jour/mois/année sur 4 chiffres, voir le formalisme de la fonction date() en php), après c'est le tooltip du composant. Les 2 derniers paramètres, c'est pour dire si on rajoute un bouton ou pas pour permettre à l'utilisateur d'effacer la date saisie (true ou false donc) et le tooltip du bouton.
 
Donc franchement, rient de bien compliqué.


---------------
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-05-2010 à 16:29:26    

billgatesanonym a écrit :

Citation :

[quote]-Faire ce calendrier en javascript serait plus judicieux (afin d'en faire un datePicker bien sur) ?

Voilà une question précise. Ma réponse personnelle est "non, pas du tout". Quand on peux éviter le Javascript, il faut l'éviter, car le Javascript est lent, et il tourne sur le PC de l'utilisateur. Il vaut mieux faire du PHP si on en a la possibilité comme là, car on donne ainsi une page toute préparée à l'utilisateur. C'est un peu comme si on lui donne un plat tout chaud sortant du four PHP, au lieu d'un plat surgelé à faire réchauffer au micro-ondes javascript.


 
"le Javascript est lent"
Il faut se tenir au courant, les runtimes javascripts sont depuis quelques années beaucoup plus rapides que PHP (tout comme python et Ruby).
V8 est même jusqu'à 30 fois plus rapide que PHP (http://shootout.alioth.debian.org/u32/benchmark.php?test=all&lang=php&lang2=v8).
Il faut en plus rajouter à PHP la latence du réseau qui est infiniment plus impactante que le temps de calcul de quelques dates.
 
Pour ce qui est de l'accessibilité : un datepicker est une aide à la saisie. Qu'il soit ou non accessible n'est pas un problème car le formulaire doit pouvoir permettre la saisie manuelle de la date.

Reply

Marsh Posté le 04-05-2010 à 22:50:39    

Merci rufo pour les précisions, je vais tester de suite.
Monsieur Y,
je ne comprends pas pourquoi le formulaire doit permettre la saisie manuelle, je veux l'éviter a tout prix, afin de pouvoir récuperer la date dans la forme que je veux, pas de date exotique rentré manuellement par l'user.

Reply

Marsh Posté le 05-05-2010 à 09:34:40    

Parce que dans l'idéal, ton formulaire doit pouvoir fonctionner sans javascript.
Comme cela il est plus accessible mais aussi plus fiable : en cas de défaillance du calendrier ton formulaire reste exploitable.
 
Ton tort ici c'est de confondre aide à la saisie et validation.

Reply

Marsh Posté le 05-05-2010 à 09:41:49    

Son tord est aussi de penser que tout le monde à javascript sur son navigateur. Il ne pense pas aux personnes handicapées visuelles qui surf avec un lecteur d'écran (donc pas de javascript en général). Si le site web est public, c'est se priver d'un trafic non négligeable (environ 10% de la population Française souffre d'un handicap visuel, plus ou moins grave). :o


---------------
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 05-05-2010 à 10:51:33    

"lecteur d'écran (donc pas de javascript en général)"
 
Cette assertion par contre est fausse, les lecteurs d'écrans n'influent pas sur le paramétrage du navigateur, et le proportion d'utilisateurs ayant javascript désactivé est tout aussi faible que chez les visiteurs valides.
C'est une croyance qui a la vie dure mais qui n'a jamais été fondée. Moi c'est en lisant "PPK on javascript" que j'ai gobé cela il y a quelques années...

Reply

Marsh Posté le 05-05-2010 à 10:54:21    

Après javascript ou non, accessible ou non, je doute de l'usabilité d'un datepicker au travers un outil de synthèse vocale : raison de plus pour autoriser la saisie manuelle.

Reply

Marsh Posté le 05-05-2010 à 15:22:26    

MonsieurY a écrit :

"lecteur d'écran (donc pas de javascript en général)"
 
Cette assertion par contre est fausse, les lecteurs d'écrans n'influent pas sur le paramétrage du navigateur, et le proportion d'utilisateurs ayant javascript désactivé est tout aussi faible que chez les visiteurs valides.
C'est une croyance qui a la vie dure mais qui n'a jamais été fondée. Moi c'est en lisant "PPK on javascript" que j'ai gobé cela il y a quelques années...


 
Pour info, les aveugles n'utilisent pas un navigateur web "classique" (IE, FF, Opéra...) mais plutôt des softs genre IBM Home Page Reader. Et ça fait pas longtemps que ce genre de soft intègre Javascript... Y'en a mêmes qui utilisent Lynx et un synthétiseur vocal.
 


---------------
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 05-05-2010 à 15:54:26    

JAWS, Window-Eyes, pour ne citer qu'eux, existent depuis mathusalem. :o  
 
Après que le soft IBM n'intègre que maintenant ce que ses concurrents font depuis plus d'une décennie, je veux bien te croire vu que j'ai eu le malheur de connaitre Notes.
 
Par contre la on dérive à grand flots vers le HS.

Reply

Marsh Posté le 06-05-2010 à 13:52:40    

Merci pour ces précisions vous assurez monsieur Y et rufo,
donc je vais laisser la possibilité de saisir la date manuellement, et je ferais un contrôle au moment de la validation si j'ai bien compris.
a bientôt

Reply

Marsh Posté le    

Reply

Sujets relatifs:

Leave a Replay

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