Problème code erreur PHP

Problème code erreur PHP - PHP - Programmation

Marsh Posté le 18-02-2008 à 16:27:09    

Bonjours à tous,
 
aprés installation du module compte à rebours dans mon site créé à l'aide de Joomla si je l'affiche dans mon site j'ai le message suivant:
 
Notice: Uninitialized string offset: 2 in /mnt/103/free.fr/6/6/lequesnel2008/modules/mod_comptearebour.php on line 62
 
comme je ne comprends pas tré bien ce language voici mon fichier php si quelqu'un peut me dire où est l'erreur:

 

Code :
  1. <?php
  2.  
  3. /**
  4. * Module CompteARebour v 1.0 Fr
  5. * Philippe ANTOINE - 21 septembre 2007
  6. * mod_comptearebour est une adapation francisée de mod_countdown 0.6 (Joomgets)
  7. * La francisation porte sur l'affichage du module dans le frontend
  8. * ainsi que dans le backend pour le paramétrage.
  9. * L'adaptation apporte les nouveautés suivantes :
  10. * - choix de la couleur du texte
  11. * - ajout possible d'un message
  12. * @package Joomla
  13. * @copyright Copyright (C) 2005 Open Source Matters. All rights reserved.
  14. * @license http://www.gnu.org/copyleft/gpl.html GNU/GPL, see LICENSE.php
  15. * Joomla! is free software. This version may have been modified pursuant
  16. * to the GNU General Public License, and as distributed it includes or
  17. * is derivative of works licensed under the GNU General Public License or
  18. * other free or open source software licenses.
  19. * See COPYRIGHT.php for copyright notices and details.
  20. */
  21.  
  22. defined( '_VALID_MOS' ) or die( 'Directly access to file not permited.' ) ;
  23.  
  24. global $mosConfig_lang ;
  25.  
  26. $ev_txtcolor = @$params->get('ev_txtcolor');
  27. $ev_displaytitle = @$params->get('ev_dtitle');
  28. $ev_title = @$params->get('ev_tit');
  29. $ev_displaydate = @$params->get('ev_ddate');
  30. $ev_day = @$params->get('ev_d');
  31. $ev_month = @$params->get('ev_m');
  32. $ev_year = @$params->get('ev_y');
  33. $ev_displayhour = @$params->get('ev_dhour');
  34. $ev_hour = @$params->get('ev_h');
  35. $ev_minutes = @$params->get('ev_min');
  36.  
  37. $ev_displayURL = @$params->get('ev_dlink');
  38. $ev_URLtitle = @$params->get('ev_ltitle');
  39. $ev_URL = @$params->get('ev_l');
  40.  
  41. $ev_offset = @$params->get('ev_offset') ? @$params->get('Offset') : '0' ;
  42.  
  43. $ev_affichermessage = @$params->get('ev_affichermessage');
  44. $ev_message = @$params->get('ev_message');
  45.  
  46. $eventdown = mktime($ev_hour, $ev_minutes, 0, $ev_month, $ev_day, $ev_year, -1);
  47.  
  48. $today = time() + 3600*$ev_offset ;
  49.  
  50. $difference = $eventdown - $today ;
  51. if ($difference < 0) $difference = 0 ;
  52.  
  53. $days_down = floor($difference/60/60/24) ;
  54. if ($days_down<10) {
  55. $days_down = strval("0".$days_down);
  56. } else {
  57. $days_down = strval($days_down);
  58. }
  59.  
  60. $day_a = $days_down{0};
  61. $day_b = $days_down{1};
  62. $day_c = $days_down{2};
  63.  
  64. $hours_left = floor(($difference - $days_down*60*60*24)/60/60) ;
  65. if ($hours_left<10) {
  66. $hours_left = "0".$hours_left;
  67. }
  68. $minutes_left = floor(($difference - $days_down*60*60*24 - $hours_left*60*60)/60) ;
  69.  
  70. ?>
  71. <?php echo '<div style="color:'.$ev_txtcolor.'">';?>
  72.  
  73. <div align="center" style="border:1px solid #cdcdcd;padding:10px;margin-top:10px;margin-bottom:10px;">
  74. <div style="font-size:16px;font-weight:bold;"><?php if ($ev_displaytitle) { echo $ev_title; } ?></div>
  75. <div><?php if ($ev_displaydate) { echo $ev_day.'/'.$ev_month.'/'.$ev_year; } ?></div>
  76. <div style="font-size:20px;font-weight:bold;margin:0px;padding:0px;line-height:normal;"><?php echo 'dans'?></div>
  77.  
  78. <div style="font-size:60px;font-weight:bold;margin:0px;padding:0px;line-height:normal;"><?php echo $day_a.$day_b.$day_c; ?></div>
  79.  
  80. <div style="font-size:20px;font-weight:bold;margin:0px;padding:0px;line-height:normal;"><?php echo 'jours'?></div>
  81. <div><?php if ($ev_displayhour) { echo $hours_left.'h : '.$minutes_left.'min'; } ?></div>
  82. <?php if($ev_displayURL) {?>
  83. <div><?php echo '<HR><div><a href="'.$ev_URL.'">'.$ev_URLtitle.'</a>';?></div>
  84. <?php } ?>
  85. <?php if($ev_affichermessage) { ?>
  86. <div style="font-size:20px;font-weight:bold;margin:0px;padding:0px;line-height:normal;"><?php echo '<HR>'.$ev_message;?></div>
  87. <?php } ?>
  88. </div>


 
Je remercie d'avance ce qui pourrony m'aider
 
elmoricq-edit : édition du titre qui était en majuscules, et utilisation des balises [code ][/code ].
Merci de lire les règles de la catégorie Programmation.

Message cité 1 fois
Message édité par Elmoricq le 18-02-2008 à 16:37:27
Reply

Marsh Posté le 18-02-2008 à 16:27:09   

Reply

Marsh Posté le 18-02-2008 à 16:30:11    

fil80 a écrit :


 
Notice: Uninitialized string offset: 2 in /mnt/103/free.fr/6/6/lequesnel2008/modules/mod_comptearebour.php on line 62
 
comme je ne comprends pas tré bien ce language voici mon fichier php si quelqu'un peut me dire où est l'erreur:


 
ligne 62.


---------------
Can't buy what I want because it's free -
Reply

Marsh Posté le 18-02-2008 à 17:07:31    

ta variable est un "string", et un string c'est aussi un tableau de char.
 
Tu accède à ce tableau pour en récupérer 3 char

Code :
  1. $day_a = $days_down{0};
  2. $day_b = $days_down{1};
  3. $day_c = $days_down{2};


mais apparement ton string n'en contient que 2, donc PHP t'affiche un notice pour te dire que le 3eme indice (offset) du tableau n'est pas initialisé (il n'y a rien dedans).
 
Le problème vient du fait que tu as un contrôle pour rajouter un "0" devant le nombre de jours si celui-ci est inférieur à 2 chiffres (10), mais pas de contrôle si est inférieur à 3 chiffres (100) donc là ou tu fais

Code :
  1. $days_down = floor($difference/60/60/24) ;
  2. if ($days_down<10) {
  3. $days_down = strval("0".$days_down);
  4. } else {
  5. $days_down = strval($days_down);
  6. }


rajoute un contrôle pour tester si c'est inférieur à 100, et dans ce cas il te faut rajouter un autre 0 devant.
 
Je te donne pas le code tout fait, mais déjà une bonne piste ;)
 
Dans l'état actuel, si tu met un évènement qui se produit dans plus de 100 jours, tu n'aura pas le notice, mais dès qu'on arrive en dessous de cette durée, tu l'as...
 
 
 


---------------
- Xav - ...There are no crimes when there are no laws... -- Xav's World
Reply

Sujets relatifs:

Leave a Replay

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