Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: Wyświetlanie wydarzeń
Forum PHP.pl > Forum > PHP
kingpc
Chciałem mieć skrypt który będzie wyświetlał urodziny osób:
Kod
<?php
$file = file("urodziny.txt");
foreach ($file as $fileurodziny){
$urodzinki = explode("***", $fileurodziny);
$dzienur = $urodzinki[0];
$miechur = $urodzinki[1];
$rokur = $urodzinki[2];
$ktour = $urodzinki[3];
$datadzien = date("d");
$datamiech_liczba = date("m");
if($datamiech_liczba = "01") {$datamiech = "stycznia";}
if($datamiech_liczba = "02") {$datamiech = "lutego";}
if($datamiech_liczba = "03") {$datamiech = "marca";}
if($datamiech_liczba = "04") {$datamiech = "kwietnia";}
if($datamiech_liczba = "05") {$datamiech = "maja";}
if($datamiech_liczba = "06") {$datamiech = "czerwca";}
if($datamiech_liczba = "07") {$datamiech = "lipca";}
if($datamiech_liczba = "08") {$datamiech = "sierpnia";}
if($datamiech_liczba = "09") {$datamiech = "wrze?nia";}
if($datamiech_liczba = "10") {$datamiech = "pa?dziernika";}
if($datamiech_liczba = "11") {$datamiech = "listopada";}
if($datamiech_liczba = "12") {$datamiech = "grudnia";}
$datarok = date("Y");
$ile = $dzienur - $datadzien;
$wiek = $datarok - $rokur;
if($dzienur >= $datadzien && $datamiech == $miechur){
echo '<BR>' . $datadzien . ' ' . $datamiech . ' : ' . $ktour . ' (' . $wiek . ')';
}}
?>
Chciałem aby wyświetlało w takiej postaci:
Cytat
12 sierpnia: Jan Kowalski (28)
13 sierpnia: Piotr Nowak (18)

Gdy będzie dzień w którym odbywają się urodziny to chciałbym aby całe było pogrubione.

Plik urodziny.txt wygląda tak:
Kod
12***08***1979***Jan Kowalski
13***08***1989***Piotr Nowak
pojas
Dla bazy danych w pliku txt
Kod
01***01***1991***Jan Nowak
02***08***1991***Jan Maurodziniak
05***09***1990***Mietek Kowalski

wyświetla:
Kod
01 stycznia: Jan Nowak ( 16 )
<b>02 sierpnia: Jan Maurodziniak ( 16 )</b>
05 września: Mietek Kowalski ( 17 )



  1. <?php
  2.  
  3. $file = file( 'urodziny.txt' );
  4. foreach( $file as $fileurodziny )
  5. {
  6. $data = explode( '***', $fileurodziny );
  7.  
  8. switch( $data[1] )
  9. {
  10. case '01':
  11. $mounth = 'stycznia';
  12. break;
  13.  
  14. case '02':
  15. $mounth = 'lutego';
  16. break;
  17.  
  18. case '03':
  19. $mounth = 'marca';
  20. break;
  21.  
  22. case '04':
  23. $mounth = 'kwietnia';
  24. break;
  25.  
  26. case '05':
  27. $mounth = 'maja';
  28. break;
  29.  
  30. case '06':
  31. $mounth = 'czerwca';
  32. break;
  33.  
  34. case '07':
  35. $mounth = 'lipca';
  36. break;
  37.  
  38. case '08':
  39. $mounth = 'sierpnia';
  40. break;
  41.  
  42. case '09':
  43. $mounth = 'września';
  44. break;
  45.  
  46. case '10':
  47. $mounth = 'października';
  48. break;
  49.  
  50. case '11':
  51. $mounth = 'listopada';
  52. break;
  53.  
  54. case '12':
  55. $mounth = 'grudnia';
  56. break;
  57. }
  58.  
  59. $age = date( 'Y' ) - $data[2]; // wiek osoby
  60.  
  61. if( $data[0].$data[1] == date( 'dm' ) )
  62. {
  63. // jeśli dzisiaj ktoś ma urodziny wyświetl
  64. echo '<b>'.$data[0].' '.$mounth.': '.$data[3].'( '.$age.' )</b><br>'."n";
  65.  
  66. } else
  67. {
  68. // dla reszty wpisów
  69. echo $data[0].' '.$mounth.': '.$data[3].'( '.$age.' )<br>'."n";
  70. }
  71. }
  72. ?>


Może być? guitar.gif
kingpc
Wszystko ładnie, ale zapomniałem dodać, że ma wyświetlać z wyprzedzeniem 2 tygodni. Gdy na przykład do danego zawodnika czas do urodzin jest 3 tygodnie to ma go nie wyświetlać.
pojas
Baza danych
Kod
01***07***1991***Jan Nowak
02***08***1991***Marian Kowalski
03***08***1991***Bogdan Morawski
16***08***1991***Adam
17***08***1991***kingpc
18***08***1991***Ewa


Wynik:
Kod
01 lipca: Jan Nowak ( 16 )
<b>02 sierpnia: Marian Kowalski ( 16 )</b>
<b>03 sierpnia: Bogdan Morawski ( 16 )</b>
<b>16 sierpnia: Adam ( 16 )</b>
17 sierpnia: kingpc ( 16 )
18 sierpnia: Ewa ( 16 )



  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'września';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'października';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  65. $days = ( $unix_today - $unix_date )/(60*60*24);
  66. if( $days < 0 )
  67. {
  68. $days = intval( substr( $days, 1 ) );
  69. } else
  70. {
  71. $days = intval( '-'.$days );
  72. }
  73.  
  74. if( $days <= $day_limit && $days > 0 || $days == 0 )
  75. {
  76. // jeśli dzisiaj ktoś ma w przeciągu 2 tygodni urodziny wyświetl
  77. echo '<b>'.$data[0].' '.$mounth.': '.$data[3].'( '.$age.' )</b><br>'."n";
  78.  
  79. } else
  80. {
  81. // dla reszty wpisów
  82. echo $data[0].' '.$mounth.': '.$data[3].'( '.$age.' )<br>'."n";
  83. }
  84. }
  85. ?>


Może trochę nakręcone, ale działa guitar.gif
kingpc
Nie o to mi chodziło smile.gif

Ma wyświetlać tylko urodziny w najbliższych 2 tygodniach. A co do pogrubień to ma wyglądać wtedy gdy dana osoba ma urodziny:


Kod
02***08***1991***Marian Kowalski
03***08***1991***Bogdan Morawski
16***08***1991***Adam
17***08***1991***kingpc
18***08***1991***Ewa


Kod
<b>02 sierpnia: Marian Kowalski (16)</b>
03 sierpnia: Bogdan Morawski (16)
16 sierpnia: Adam (16)
pojas
Proszę uprzejmie:
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'września';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'października';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  65. $days = ( $unix_today - $unix_date )/(60*60*24);
  66. if( $days < 0 )
  67. {
  68. $days = intval( substr( $days, 1 ) );
  69. } else
  70. {
  71. $days = intval( '-'.$days );
  72. }
  73.  
  74. if( $days <= $day_limit && $days > 0 && $days <> 0 )
  75. {
  76. // jeśli ktoś ma w przeciągu 2 tygodni urodziny wyświetl
  77. echo $data[0].' '.$mounth.': '.$data[3].'( '.$age.' )<br>'."n";
  78.  
  79. } elseif( $days == 0 )
  80. {
  81. // jeśli ktoś ma dzisiaj urodziny wyświetl
  82. echo '<b>'.$data[0].' '.$mounth.': '.$data[3].'( '.$age.' )</b><br>'."n";
  83. }
  84. }
  85. ?>
kingpc
Dzięki. Właśnie o to mi chodziło. A w skrypcie jest ustawione że zawodnik, który ma wcześniej urodziny zawsze będzie wyżej?
pojas
Cytat
w skrypcie jest ustawione że zawodnik, który ma wcześniej urodziny zawsze będzie wyżej?
Nie, ale zawsze można to zmienić guitar.gif

Ten kod właśnie tak działa:
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'września';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'października';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. // rok 2000 przypadkowo, liczy się tylko miesiąc i dzień :)
  65. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  66. $days = ( $unix_today - $unix_date )/(60*60*24);
  67. if( $days < 0 )
  68. {
  69. $days = intval( substr( $days, 1 ) );
  70. } else
  71. {
  72. $days = intval( '-'.$days );
  73. }
  74.  
  75. if( $days <= $day_limit && $days > -1 )
  76. {
  77. /* Format wyświetlania informacji
  78. $data[0] - dzień urodzin
  79. $data[1] - miesiąc urodzin ( liczba z zerem na początku )
  80. $mounth - miesiąc urodzin ( słownie )
  81. $data[3] - imię i nazwosko
  82. $age - wiek osoby
  83. */
  84. $return[$unix_date] = "$data[0] $mounth: $data[3] ( $age )";
  85.  
  86. }
  87. if( $days == 0 )
  88. {
  89. // specjalny styl dla dzisiejszego dnia
  90.  
  91. // $return[$unix_date] = "<b>$data[0] $mounth: $data[3] ( $age )</b>";
  92. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  93. }
  94. }
  95. sort( $return, SORT_NUMERIC );
  96. foreach( $return as $person )
  97. {
  98. echo $person."<br>n";
  99. }
  100. ?>

Na zdrowie aarambo.gif
kingpc
Dzięki. Właśnie o to mi chodziło smile.gif
kingpc
Mam taki kod:
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'wrze?nia';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'pa?dziernika';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. // rok 2000 przypadkowo, liczy si? tylko miesi?c i dzie? :)
  65. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  66. $days = ( $unix_today - $unix_date )/(60*60*24);
  67. if( $days < 0 )
  68. {
  69. $days = intval( substr( $days, 1 ) );
  70. } else
  71. {
  72. $days = intval( '-'.$days );
  73. }
  74.  
  75. if( $days <= $day_limit && $days > -1 )
  76. {
  77. /* Format wy?wietlania informacji
  78. $data[0] - dzie? urodzin
  79. $data[1] - miesi?c urodzin ( liczba z zerem na pocz?tku )
  80. $mounth - miesi?c urodzin ( s?ownie )
  81. $data[3] - imi? i nazwosko
  82. $age - wiek osoby
  83. */
  84. $return[$unix_date] = "$data[0] $mounth: $data[3] ( $age )";
  85.  
  86. }
  87. if( $days == 0 )
  88. {
  89. // specjalny styl dla dzisiejszego dnia
  90.  
  91. // $return[$unix_date] = "<b>$data[0] $mounth: $data[3] ( $age )</b>";
  92. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  93. }
  94. }
  95. sort( $return, SORT_NUMERIC );
  96. foreach( $return as $person )
  97. {
  98. echo $person."<br>\n";
  99. }
  100. ?>
I na stronię pojawia się taki błąd:
Cytat
Warning: sort() expects parameter 1 to be array, null given in /home/poloniam/public_html/main.php(53) : eval()'d code on line 95

Warning: Invalid argument supplied for foreach() in /home/poloniam/public_html/main.php(53) : eval()'d code on line 96
Myślę, że powód może tkwić, że nikt przez najbliższe 2 tygodnie nie ma urodzin. Mam rację? Może ktoś poprawić kod?
loonger
zamień końcówkę na:

  1. <?php
  2. sort( $return, SORT_NUMERIC );
  3. if(isset($return)) {
  4. foreach( $return as $person )
  5. {
  6. echo $person."<br>\n";
  7. }
  8. }
  9. else {
  10. echo "Nikt nie ma urodzin w najbliższym czasie.";
  11. }
  12. ?>
kingpc
Mam kod
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'wrze?nia';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'pa?dziernika';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. // rok 2000 przypadkowo, liczy si? tylko miesi?c i dzie? :)
  65. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  66. $days = ( $unix_today - $unix_date )/(60*60*24);
  67. if( $days < 0 )
  68. {
  69. $days = intval( substr( $days, 1 ) );
  70. } else
  71. {
  72. $days = intval( '-'.$days );
  73. }
  74.  
  75. if( $days <= $day_limit && $days > -1 )
  76. {
  77. /* Format wy?wietlania informacji
  78. $data[0] - dzie? urodzin
  79. $data[1] - miesi?c urodzin ( liczba z zerem na pocz?tku )
  80. $mounth - miesi?c urodzin ( s?ownie )
  81. $data[3] - imi? i nazwosko
  82. $age - wiek osoby
  83. */
  84. $return[$unix_date] = "$data[0] $mounth: $data[3] ( $age )";
  85.  
  86. }
  87. if( $days == 0 )
  88. {
  89. // specjalny styl dla dzisiejszego dnia
  90.  
  91. // $return[$unix_date] = "<b>$data[0] $mounth: $data[3] ( $age )</b>";
  92. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  93. }
  94. }
  95. sort( $return, SORT_NUMERIC );
  96. if(isset($return)) {
  97. foreach( $return as $person )
  98. {
  99. echo $person."<br>\n";
  100. }
  101. }
  102. else {
  103. echo "Nikt nie ma urodzin w najbliższym czasie.";
  104. }
  105. ?>
A tutaj nadal:
Cytat
Warning: sort() expects parameter 1 to be array, null given in /home/poloniam/public_html/main.php(53) : eval()'d code on line 95
Nikt nie ma urodzin w najbliższym czasie.
worriedsmiley.gif
Hazel
Wklejam kod do edytora, tworzę plik urodziny.txt, zapisuję w nim linijkę:

Kod
10 *** 02

Uruchamiam - działa.
Wyświetla się wynik.
Twój błąd oznacza, że tablica $return nie została zdefiniowana (bo inicjalizujesz ją wewnątrz instrukcji warunkowej, która mogła być niespełniona i parser przeszedł dalej). Powtarzam jednak, że u mnie działa ten kod, więc nie wiem, gdzie jest problem u Ciebie. Może masz inne założenia co do wpisywania danych do pliku urodziny.txt. Albo skrypt w zalożeniu ma robić coś innego niż zwracać

Kod
10 lutego: (2007)

Ale w takiej formie, w jakiej jest to w kodzie, ja wpisałem dobrze i skrypt zwrócił prawidłowy wynik.
kingpc
Plik urodziny.txt wygląda tak:
Cytat
12***08***1979***Jan Kowalski
13***08***1989***Piotr Nowak
Hazel
No to wyświetla się wynik:
Kod
12 sierpnia: Jan Kowalski ( 28 )
13 sierpnia: Piotr Nowak( 18 )

Żadnych warnów ani fatali, w czym jest problem?
kingpc
To dlaczego pojawia się taki komunikat:
Cytat
Warning: sort() expects parameter 1 to be array, null given in /home/poloniam/public_html/main.php(53) : eval()'d code on line 95
Nikt nie ma urodzin w najbliższym czasie.
loonger
mój błąd. końcówka powinna wyglądać tak:
  1. <?php
  2. if(isset($return)) {
  3. sort( $return, SORT_NUMERIC );
  4. foreach( $return as $person )
  5. {
  6. echo $person."<br>\n";
  7. }
  8. }
  9. else {
  10. echo "Nikt nie ma urodzin w najbliższym czasie.";
  11. ?>
kingpc
Teraz mam taki komunikat
Cytat
Parse error: syntax error, unexpected $end in /home/poloniam/public_html/main.php(53) : eval()'d code on line 105
Prz takim kodzie
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'wrze?nia';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'pa?dziernika';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. // rok 2000 przypadkowo, liczy si? tylko miesi?c i dzie? :)
  65. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  66. $days = ( $unix_today - $unix_date )/(60*60*24);
  67. if( $days < 0 )
  68. {
  69. $days = intval( substr( $days, 1 ) );
  70. } else
  71. {
  72. $days = intval( '-'.$days );
  73. }
  74.  
  75. if( $days <= $day_limit && $days > -1 )
  76. {
  77. /* Format wy?wietlania informacji
  78. $data[0] - dzie? urodzin
  79. $data[1] - miesi?c urodzin ( liczba z zerem na pocz?tku )
  80. $mounth - miesi?c urodzin ( s?ownie )
  81. $data[3] - imi? i nazwosko
  82. $age - wiek osoby
  83. */
  84. $return[$unix_date] = "$data[0] $mounth: $data[3] ( $age )";
  85.  
  86. }
  87. if( $days == 0 )
  88. {
  89. // specjalny styl dla dzisiejszego dnia
  90.  
  91. // $return[$unix_date] = "<b>$data[0] $mounth: $data[3] ( $age )</b>";
  92. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  93. }
  94. }
  95. sort( $return, SORT_NUMERIC );
  96. if(isset($return)) {
  97. sort( $return, SORT_NUMERIC );
  98. foreach( $return as $person )
  99. {
  100. echo $person."<br>\n";
  101. }
  102. }
  103. else {
  104. echo "Nikt nie ma urodzin w najbliższym czasie.";
  105. ?>
UDAT
Wystarczy dodać klamrę po echo - powinno to wyglądać tak:
  1. <?php
  2. else {
  3.  echo "Nikt nie ma urodzin w najbliższym czasie.";
  4. }
  5. ?>
kingpc
Mam taki kod:
  1. <?php
  2.  
  3. $day_limit = 14; // dniowe wyprzedzenie
  4.  
  5. $file = file( 'urodziny.txt' );
  6. foreach( $file as $fileurodziny )
  7. {
  8. $data = explode( '***', $fileurodziny );
  9.  
  10. switch( $data[1] )
  11. {
  12. case '01':
  13. $mounth = 'stycznia';
  14. break;
  15.  
  16. case '02':
  17. $mounth = 'lutego';
  18. break;
  19.  
  20. case '03':
  21. $mounth = 'marca';
  22. break;
  23.  
  24. case '04':
  25. $mounth = 'kwietnia';
  26. break;
  27.  
  28. case '05':
  29. $mounth = 'maja';
  30. break;
  31.  
  32. case '06':
  33. $mounth = 'czerwca';
  34. break;
  35.  
  36. case '07':
  37. $mounth = 'lipca';
  38. break;
  39.  
  40. case '08':
  41. $mounth = 'sierpnia';
  42. break;
  43.  
  44. case '09':
  45. $mounth = 'września';
  46. break;
  47.  
  48. case '10':
  49. $mounth = 'października';
  50. break;
  51.  
  52. case '11':
  53. $mounth = 'listopada';
  54. break;
  55.  
  56. case '12':
  57. $mounth = 'grudnia';
  58. break;
  59. }
  60.  
  61. $age = date( 'Y' ) - $data[2]; // wiek osoby
  62.  
  63. $unix_date = mktime( 0, 0, 0, $data[1], $data[0], 2000 );
  64. // rok 2000 przypadkowo, liczy si? tylko miesi?c i dzie? :)
  65. $unix_today = mktime( 0, 0, 0, date( 'n' ), date( 'j' ), 2000 );
  66. $days = ( $unix_today - $unix_date )/(60*60*24);
  67. if( $days < 0 )
  68. {
  69. $days = intval( substr( $days, 1 ) );
  70. } else
  71. {
  72. $days = intval( '-'.$days );
  73. }
  74.  
  75. if( $days <= $day_limit && $days > -1 )
  76. {
  77. /* Format wy?wietlania informacji
  78. $data[0] - dzie? urodzin
  79. $data[1] - miesi?c urodzin ( liczba z zerem na pocz?tku )
  80. $mounth - miesi?c urodzin ( s?ownie )
  81. $data[3] - imi? i nazwosko
  82. $age - wiek osoby
  83. */
  84. $return[$unix_date] = "$data[0] $mounth: $data[3] ( $age )";
  85.  
  86. }
  87. if( $days == 0 )
  88. {
  89. // specjalny styl dla dzisiejszego dnia
  90.  
  91. // $return[$unix_date] = "<b>$data[0] $mounth: $data[3] ( $age )</b>";
  92. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  93. }
  94. }
  95. sort( $return, SORT_NUMERIC );
  96. if(isset($return)) {
  97. sort( $return, SORT_NUMERIC );
  98. foreach( $return as $person )
  99. {
  100. echo $person."<br>\n";
  101. }
  102. }
  103. else {
  104.  echo "Nikt nie ma urodzin w najbliższym czasie.";
  105. }
  106. ?>
I znów komunikat:
Cytat
Warning: sort() expects parameter 1 to be array, null given in /home/poloniam/public_html/main.php(53) : eval()'d code on line 95
Nikt nie ma urodzin w najbliższym czasie.
loonger
usuń wiersz nr 95
Hazel
Poważnie mówisz?
On chce dostać posortowaną tablicę, a Ty mu każesz usunąć sort()...
Przeciez wiadomo, że jak usunie linijkę, w której jest błąd, to błąd zniknie, tyle że razem z linijka, która warunkuje poprawne funkcjonowanie kodu sciana.gif
Jak tak w ogóle można napisać? blink.gif

@kingpc
O co chodzi w zmiennej $return?
Czym chcesz, aby była?
Bo na razie jest tablicą o indeksie $unix_date, czyli na dzis dzień 966117600.
Czy jesteś pewien, że o to chodzi?
Ja Twojego kodu nie rozumiem.
macbirdie
A można tak napisać, bo ten sort w linijce 95 jest zbędny - dwie linijki niżej w bloku if jest sortowanie po sprawdzeniu, czy w ogóle tablica $return istnieje.
Hazel
Nie można tak napisać, jeśli wychodzi się z założenia (zbyt pochopnego zresztą), że wiersz 95 jest tylko sprawdzeniem, czy funkcja sort() działa, jeśli warunek if niżej nie jest spełniony. Ja z takiego wyszedłem, bo często coś takiego robie w swoich aplikacjach, tyle że to założenie w tym przypadku jest zupełnie abstrakcyjne.

@kingpc
Jeśli chcesz, aby ta tablica kiedykolwiek się sortowała, to niestety nie możesz skasować linii 95 i patrz mój post wyżej.
A jeśli chcesz po prostu, aby kod działał poprawnie, to olej sortowanie tablicy, skasuj 95 i żadnego błędu Ci nie wywali. Tylko że to jest w ogóle kompletny idiotyzm, wtedy możesz wyrzucić też linie 96-103 i klamrę w 105, i kod będzie poprawnie funkcjonować (tyle że nie tak, jakbyś chciał).
btw, linijka
  1. <?php
  2. $return[$unix_date] = '<b>'.$return[$unix_date].'</b>';
  3. ?>

jest co najmniej nie na miejscu.
macbirdie
Tylko po co sprawdzać działanie funkcji sort? I po co sprawdzać ją dla prawdopodobnie pustej zmiennej w argumencie, skoro zaraz i tak będzie jeszcze raz odpalone sortowanie dla istniejącej zmiennej (w założeniu tablicy)? blink.gif
Hazel
Sortowanie dla zmiennej $return nigdy nie zostanie odpalone, bo wartość $return ZAWSZE jest pusta.
Czy może sie mylę, bo mam problemy z koncentracją dziś...
Ale aż takie chyba nie? sciana.gif
A jeśli sprawdzac - to tylko na chwilę, żeby zorientować się, że $return naprawdę zawsze jest null, i zaraz skasować ten wiersz.
macbirdie
A cały foreach?
A w nim cały blok od
Kod
if( $days <= $day_limit && $days > -1  )

w dół?
Dlaczego ma być "ZAWSZE" pusta?

Przeczytałeś w ogóle kod? winksmiley.jpg
Hazel
No przeczytałem, ale tam $return to jest tablica, której jedynym kluczem jest liczba zbliżona do 966117600...
W sumie to nie wiem, może po prostu spasuję i powiem, żeby autor skasował linię 95.
Przepraszam za kłopot.
kingpc
Hmm a mógłby ktoś napisać taki sam kod ale poprawnie?
pojas
  1. <?php
  2.  
  3. $persons = array();
  4.  
  5. foreach(file('urodziny.txt') as $line)
  6. {
  7. $person = explode('***', $line);
  8.  
  9. $person[0] = preg_replace('#0?([0-9])#', '$1', $person[0]);
  10. $person[1] = preg_replace('#0?([0-9])#', '$1', $person[1]);
  11.  
  12. $person['specialUnixDate'] = mktime(0,0,0, $person[1], $person[0], 2000);
  13.  
  14. $persons[] = $person;
  15. }
  16.  
  17. $sort_arr = array();
  18.  
  19. foreach($persons AS $uniqid => $row)
  20. {
  21. foreach($row AS $key=>$person)
  22. {
  23. $sort_arr[$key][$uniqid] = $person;
  24. }
  25. }
  26.  
  27. array_multisort($sort_arr['specialUnixDate'], SORT_ASC, $persons);
  28.  
  29. $specialUnixToday = mktime(0,0,0, date('n'), date('j'), 2000);
  30.  
  31. echo count($persons).' wpisów. Już niedługo urodziny będą obchodzić:<br /><br />'."\n";
  32.  
  33. foreach($persons as $person)
  34. {
  35. $difference = $person['specialUnixDate'] - $specialUnixToday;
  36.  
  37. if($difference > -1)
  38. {
  39. $mounths = array( 'styczeń', 'luty', 'marzec', 'kwiecień', 'maj', 'czerwiec',
  40. 'lipiec', 'sierpień', 'wrzesień', 'październik', 'listopad', 'grudzień');
  41.  
  42. $person[1] = $mounths[$person[1]-1];
  43.  
  44. if($difference == 0)
  45. {
  46. // Dzisiejsze urodziny.
  47. echo '<b>'.$person[0].' '.$person[1].': '.$person[3].' ( '.(date('Y')-$person[2]).' )</b><br />'."\n";
  48.  
  49. } elseif($difference < 60*60*24*14)
  50. {
  51. // Następne urodziny (60*60*24*14 - dwa tygodnie)
  52. echo $person[0].' '.$person[1].': '.$person[3].' ( '.(date('Y')-$person[2]).' )<br />'."\n";
  53.  
  54. }
  55. }
  56. }
  57. ?>

Sprawdź czy działa... guitar.gif
kingpc
Mam taki komunikat
Cytat
31 wpisów. Już niedługo urodziny będą obchodzić:
pojas
Dla takiego pliku
Kod
01***11***1999***Jan Nowak III
17***09***1992***Jan Nowak II
07***09***1410***Jan Nowak I
09***09***1991***Jan Nowak
wyświetla
Kod
4 wpisów. Już niedługo urodziny będą obchodzić:

9 wrzesień: Jan Nowak ( 16 )
17 wrzesień: Jan Nowak II ( 15 )


Cytat
Mam taki komunikat
Cytat
31 wpisów. Już niedługo urodziny będą obchodzić:

Może poprostu nikt w przeciągu 2 tygodni nie będzie miał urodzin? Możesz wstawić sobie instrukcję warunkową i będzie wyświetlał informację, że nikt nie będzie miał urodzin. Nie wiem co jest grane, ale u mnie działa poprawnie (do czasu?)...
kingpc
Ale chciałbym aby wyświetlało tak jak:

9 września: Jan Kowalski (24)

26 września: Piotr Nowak (21)
pojas
Nie wiem o co Ci chodzi.
- jeśli o to, że nazwa miesiąca jest w mianowniku, to chyba się domyśliłeś, że można to zminić (39, 40 linia)
- jeśli o to, że na początku jest informacja o ilości wpisów (a ma jej nie być) - usuń linię 31
- jeśli o to, że dzisiejszy ma być pogrubiony - on taki jest, w poprzednim poście tego nie uwzględniłem, ale chyba sprawdziłeś?
- jeśli o to, że ma być pusta linia między każdym wpisem to dodaj drugie "<br />" do tego, które już jest wstawione (47, 52 linia)
franki01
A ja sie zapytam jaka jest wersja PHP na tym serwerze? snitch.gif
kingpc
Wersja PHP 5.2.3
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.