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

  FORUM HardWare.fr
  Programmation
  PHP

  script de calendrier avec cases a cocher

 


 Mot :   Pseudo :  
 
Bas de page
Auteur Sujet :

script de calendrier avec cases a cocher

n°1241249
friday_13
sans avatar fixe
Posté le 08-11-2005 à 14:25:01  profilanswer
 

Bonjour,
 
voila, j'ai adapté ce script que j'ai pompé dans un bouquin (PHP5 O'Reilly).
Il affiche un calendrier mensuel selon la selection du mois et de l'annee dans 2 listes deroulantes.
j'ai ajouté une case à cocher par jour du mois, pour que l'utilisateur puisse cocher les jours qu'il souhaite reserver.
j'ai donc ajouté un bouton enregistrer, qui normalement devrait sauvegarder la selection dans la DB MySQL.
malheureusement, la methode que j'utilise pour parcourir le tableau de cases a cocher n'a pas l'air de fonctionner.  
Mais je ne sais pas a quel niveau se situe l'erreur de logique.
 
merci d'avance a qui pourra m'aider !
 
la fonction que j'ai modifié est process_form() vers la ligne 72
 
 

Code :
  1. <?php
  2. // Use the form helper functions defined in Chapter 6
  3. require 'formhelpers.php';
  4. $months = array(1 => 'January', 2 => 'February', 3 => 'March', 4 => 'April',
  5.                 5 => 'May', 6 => 'June', 7 => 'July', 8 => 'August',
  6.                 9 => 'September', 10 => 'October', 11 => 'November',
  7.                 12 => 'December');
  8. $years = array();
  9. for ($year = date('Y') - 1, $max_year = date('Y') + 5; $year < $max_year; $year++) {
  10.     $years[$year] = $year;
  11. }
  12. if ($_POST['_submit_check']) {
  13.     if ($errors = validate_form()) {
  14.         show_form($errors);
  15.     } else {
  16.         show_form();
  17.         process_form();
  18.     }
  19. } else {
  20.     // When nothing is submitted, show the form and then
  21.     // a calendar for the current month
  22.     show_form();
  23.     show_calendar(date('n'), date('Y'));
  24. }
  25. function validate_form() {
  26.     global $months, $years;
  27.     $errors = array();
  28.     if (! array_key_exists($_POST['month'], $months)) {
  29.         $errors[] = 'Select a valid month.';
  30.     }
  31.     if (! array_key_exists($_POST['year'], $years)) {
  32.         $errors[] = 'Select a valid year.';
  33.     }
  34.     return $errors;
  35. }
  36. function show_form($errors = '') {
  37.     global $months, $years, $this_year;
  38.     // If the form is submitted, get defaults from submitted variables
  39.     if ($_POST['_submit_check']) {
  40.         $defaults = $_POST;
  41.     } else {
  42.         // Otherwise, set our own defaults: the current month and year
  43.         $defaults = array('year' => date('Y'),
  44.                           'month' => date('n'));
  45.     }
  46.     if ($errors) {
  47.         print 'You need to correct the following errors: <ul><li>';
  48.         print implode('</li><li>',$errors);
  49.         print '</li></ul>';
  50.     }
  51.     print '<form method="POST" action="'.$_SERVER['PHP_SELF'].'">';
  52.     input_select('month', $defaults, $months);
  53.     input_select('year',  $defaults, $years);
  54.     input_submit('Afficher','Afficher');
  55.     input_submit('Enregistrer','Enregistrer');
  56.     print '<input type="hidden" name="_submit_check" value="1"/>';
  57.     print '</form>';
  58. }
  59. function process_form() {
  60.     // si on a clicke sur afficher
  61.     if (isset($_POST['Afficher'])) {
  62.     show_calendar($_POST['month'], $_POST['year']);
  63.     }
  64.     //sinon, verifier si des dates ont ete selectionnees
  65.     //si oui, enregistrer dans la DB
  66.     //sinon, rien faire
  67.    if (isset($_POST['Enregistrer'])) {
  68.        foreach($_POST['mycheckbox'] as $value){
  69.            echo 'test';
  70.            echo "<BR> You clicked checkbox number " .$value, "\n";
  71.        }
  72.    }
  73. }
  74. function show_calendar($month, $year) {
  75.     global $months;
  76.     $weekdays = array('Su', 'Mo', 'Tu', 'We', 'Th', 'Fr', 'Sa');
  77.     // Find the epoch timestamp for midnight on the first day of the month
  78.     $first_day = mktime(0,0,0,$month, 1, $year);
  79.     // How many days are in the month?
  80.     $days_in_month = date('t', $first_day);
  81.     // What day of the week (numerically) is the first day of the month?
  82.     // You need this to put the first table cell in the right place
  83.     $day_offset = date('w', $first_day);
  84.     // Print the table header and the row of weekday names
  85.     print<<<_HTML_
  86. <table border="0" cellspacing="0" cellpadding="2">
  87. <tr><th colspan="7">$months[$month] $year</th></tr>
  88. <tr><td align="center">
  89. _HTML_;
  90.     print implode('</td><td align="center">', $weekdays);
  91.     print '</td></tr>';
  92.     // If the first day of the month is, say, a Tuesday, then you
  93.     // need to put blank table cells under "Su" and "Mo" in the first
  94.     // row so that the day 1 table cell goes under "Tu"
  95.     if ($day_offset > 0) {
  96.         for ($i = 0; $i < $day_offset; $i++) { print '<td>&nbsp;</td>'; }
  97.     }
  98.     // Print a table cell for each day of the month
  99.     for ($day = 1; $day <= $days_in_month; $day++ ) {
  100.         print '<td align="center">' . $day ;
  101.         input_radiocheck('checkbox','mycheckbox[]', $_POST, $day);
  102.         print  '</td>';
  103.         $day_offset++;
  104.         // If this cell was the seventh in the row, then
  105.         // end the table row and reset $day_offset
  106.         if ($day_offset == 7) {
  107.             $day_offset = 0;
  108.             print "</tr>\n";
  109.             // If there are more days to come, then
  110.             // start a new table row
  111.             if ($day < $days_in_month) {
  112.                 print '<tr>';
  113.             }
  114.         }
  115.     }
  116.     // At this point, one table cell has been printed for each day
  117.     // of the month. If the last day of the month isn't a Saturday
  118.     // then the last row of the table needs to be padded with
  119.     // some blank cells out to the end of the row
  120.     if ($day_offset > 0) {
  121.         for ($i = $day_offset; $i < 7; $i++) {
  122.             print '<td>&nbsp;</td>';
  123.         }
  124.         print '</tr>';
  125.     }
  126.     print '</table>';
  127. }
  128. ?>


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
mood
Publicité
Posté le 08-11-2005 à 14:25:01  profilanswer
 

n°1241279
leflos5
On est ou on est pas :)
Posté le 08-11-2005 à 14:40:03  profilanswer
 

Regarde le code que ça génère, je suis sur que tu verras un truc qui me chifonne :D

n°1241317
friday_13
sans avatar fixe
Posté le 08-11-2005 à 15:03:39  profilanswer
 

tu veux dire le code quand j'ouvre la page, quand je clique sur Afficher ou quand je clique sur Enregistrer ?
 
Edit: je precise que je n'ai pas encore codé l'enregistrement dans la DB !
J'essaie pour l'instant de capter quelles cases ont été cochées .


Message édité par friday_13 le 08-11-2005 à 15:05:10

---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
n°1241329
leflos5
On est ou on est pas :)
Posté le 08-11-2005 à 15:09:35  profilanswer
 

Oui c'est cela ;) T'a vérifier la source html générée? Sinon C'est $_POST[] qu'il faut dérouler ;)

n°1241349
friday_13
sans avatar fixe
Posté le 08-11-2005 à 15:32:03  profilanswer
 

désolé, mais je ne comprends pas ta réponse :)
 
la fonction ne rentre pas dans cette boucle  
 
#        foreach($_POST['mycheckbox'] as $value){
#            echo 'test';
#            echo "<BR> You clicked checkbox number " .$value, "\n";
#        }
#    }
 
 


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
n°1241377
leflos5
On est ou on est pas :)
Posté le 08-11-2005 à 15:56:20  profilanswer
 

Si tu le dis alors... Je me suis pas attarder plus que ça :D

n°1241390
friday_13
sans avatar fixe
Posté le 08-11-2005 à 16:12:35  profilanswer
 

Ok, je vois  :sarcastic:


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
n°1241476
protoss_tt​h
May the Code be with you
Posté le 08-11-2005 à 17:43:32  profilanswer
 

Salut,
 
je pense pas que php comprenne "foreach($_POST['mycheckbox'] as $value)", je crois que pour verifier si une case a été cochée t'aies besoin de isset.
 
moi je ferais comme ca:
pour chaque checkbox, crée un nom avec un chiffre checkbox1, checkbox2....checkboxn
 
ensuite vérifie la validité de chaque checkbox comme ca:
 
for($i=1;$i<=nombre de checkbox;$i++)
     {//génère le nom de ta checkbox
      $name="checkbox"."$i";
      if(isset($_POST[$name]))
        {
         echo "<BR> You clicked checkbox number " .$i, "\n";
        }
     }
 
Voilà j'espère que ca peux t'aider.
++

n°1241518
omega2
Posté le 08-11-2005 à 18:08:40  profilanswer
 

protoss_tth a écrit :

Salut,
 
je pense pas que php comprenne "foreach($_POST['mycheckbox'] as $value)", je crois que pour verifier si une case a été cochée t'aies besoin de isset.
 
moi je ferais comme ca:
pour chaque checkbox, crée un nom avec un chiffre checkbox1, checkbox2....checkboxn
 
ensuite vérifie la validité de chaque checkbox comme ca:
 
for($i=1;$i<=nombre de checkbox;$i++)
     {//génère le nom de ta checkbox
      $name="checkbox"."$i";
      if(isset($_POST[$name]))
        {
         echo "<BR> You clicked checkbox number " .$i, "\n";
        }
     }
 
Voilà j'espère que ca peux t'aider.
++

[:sprint] Ca utilise une méthode pareille et ca ose la conseiller en laissant entendre que l'autre méthode ne risque pas de marcher? [:sprint]  
Une checkbox en

Code :
  1. $name="checkbox[]"

et le tour est joué. Pourquoi se prendre la tête avec de trés mauvaises méthodes?
Evidement, il faut donner une valeur différente à chaque checkbox. En tout cas, le isset sera utilisé une seule fois pour vérifier qu'au moins une case a été coché et ensuite on parcourt avec le foreach pour savoir lesquelles et on perd pas notre temps à faire plusieurs disaines de tests pour une seule case coché.
 
friday_13 > Fait un

Code :
  1. print_r($_POST);

quelque part, ca t'affichera le contenu exact et intégral du tableau $_POST avec les noms de cases et companies. Ca te permettra de voir pourquoi ca marche pas comme prévus.


Message édité par omega2 le 08-11-2005 à 18:11:04
n°1241551
friday_13
sans avatar fixe
Posté le 08-11-2005 à 18:54:56  profilanswer
 

salut
 
le resultat en HTML pour les checkbox donne ceci :
<td align="center">6<input type="checkbox" name="mycheckbox[]" value="6" />
<td align="center">7<input type="checkbox" name="mycheckbox[]" value="7" />
etc...


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
mood
Publicité
Posté le 08-11-2005 à 18:54:56  profilanswer
 

n°1242042
protoss_tt​h
May the Code be with you
Posté le 09-11-2005 à 11:27:31  profilanswer
 


Monsieur veut se donner de l'importance
Sous ses airs de seigneur, exprime son arrogance
Le niais brillant cependant par sa cécité
Car d'humilité, et bien, point n'en est.

-protoss_tth-

n°1242200
friday_13
sans avatar fixe
Posté le 09-11-2005 à 14:15:13  profilanswer
 

protoss_tth a écrit :


Monsieur veut se donner de l'importance
Sous ses airs de seigneur, exprime son arrogance
Le niais brillant cependant par sa cécité
Car d'humilité, et bien, point n'en est.

-protoss_tth-


 
les mp, tu connais  :fou:


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
n°1242328
protoss_tt​h
May the Code be with you
Posté le 09-11-2005 à 15:34:53  profilanswer
 

ouaip :p , à ce sujet, omega2 et moi même te présentons nos excuses pour le spammage intempestif du topic. :jap:
revenons à nos moutons:
Voilà qui devrait faire l'unanimité
 

Code :
  1. <?php
  2. $arr=array('checkbox1','checkbox2','checkbox3');
  3. echo "<FORM action=\"" .$_SERVER['PHP_SELF']. "\" method=\"POST\" enctype=\"text/html\">
  4.             <TABLE border=1><TR><TD><INPUT TYPE=CHECKBOX value=1 NAME=$arr[0] ></TD></TR>
  5.                             <TR><TD><INPUT TYPE=CHECKBOX value=2 NAME=$arr[1] ></TD></TR>
  6.                             <TR><TD><INPUT TYPE=CHECKBOX value=3 NAME=$arr[2] ></TD></TR>
  7.                             <TR><TD><INPUT TYPE=Submit NAME=sauver value=sauver ></TD></TR><TABLE><FORM> ";
  8. if(isset($_POST['sauver']))
  9.   {
  10.     foreach($arr as $value)
  11.     {
  12.     if(isset($_POST[$value]))
  13.     echo "cochée: checkbox $value <BR>";
  14.     }
  15.   }
  16. ?>


 
je pense qu'omega2 poussera une gueulante haut et fort si cela ne lui convient pas.
++ et   bon codage friday.

n°1242334
omega2
Posté le 09-11-2005 à 15:42:38  profilanswer
 

C'est bien ça.
Avec cette méthode, il n'y a même pas besoin des 0 1 et 2 entre crochet vu que php rajoutera de lui même les indices en recevant les données si les indices ne sont pas indiqué. Mais c'est vrai qu'avec un foreach derriére, ca changera rien.
 
PS : Désolé, je suis parfois de mauvaises humeurs et quand je vois de trés mauvais conseils ca a tendance à me mettre en colére dans ces moment là.

n°1242429
friday_13
sans avatar fixe
Posté le 09-11-2005 à 16:56:57  profilanswer
 

bon , copaings alors ? :)
 
merci pour l'aide, je teste ça ce soir et je vous dis quoi


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius
n°1247640
friday_13
sans avatar fixe
Posté le 17-11-2005 à 14:57:52  profilanswer
 

bon ben j'ai honte,
en fait comme le code html du calendrier est genere apres le tag </FORM>
les checkbox n'etaient pas dans la variable $_POST, logique.
 


---------------
L'homme de bien ne demande rien qu'à lui-même ; l'homme de peu demande tout aux autres. - Confucius

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

  script de calendrier avec cases a cocher

 

Sujets relatifs
est ce que je peux apprendre ASP avec VB script ?pb d'affichage sous FF avec un script JS
Comment inclure une fonction "spoilers" dans un script de newsprobleme entre script et GIF animes
Script de vérification de numéro de téléphone qui marche pas[action script] player rm
lancement d'un script sql[PHP] Script qui boucle.........
Interraction avec un scriptContrôler le temps d'exécution d'une partie d'un script
Plus de sujets relatifs à : script de calendrier avec cases a cocher


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