Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Pętla za mało się wykonuje
Forum PHP.pl > Forum > Przedszkole
kuba1ka
W bazie danych mam nascie wydarzen w tabeli kalendarium, sprawdzalem var_dumpem zapytanie i rzeczywiscie zwraca x rekordow. Dlaczego więc pętla wykonuje się tylko raz i zwraca pierwszy z brzegu wynik?

  1. <?php
  2. $query = "SELECT ".$prefix."kalendarium.* FROM ".$prefix."kalendarium WHERE kalendarium_aktywny = '1'";
  3. $result=mysql_query($query) or die(mysql_error());
  4.  
  5. if(mysql_num_rows($result) > 0) {
  6. while($r = mysql_fetch_assoc($result)) {
  7. ?>
  8.  
  9. <script type="text/javascript">
  10. $(document).ready(function() {
  11.  
  12. $('#my-next-button').click(function() {
  13. $('#calendar').fullCalendar('next');
  14. });
  15.  
  16. $('#calendar').fullCalendar({
  17. weekends: true,
  18. header: {
  19. left: 'prev,next today',
  20. center: 'title',
  21. right: 'month,basicWeek,basicDay'
  22. },
  23. defaultDate: '<?php echo date("Y-m-d"); ?>',
  24. editable: false,
  25. eventLimit: true, // allow "more" link when too many events
  26. events: [
  27. {
  28. title: '<?php echo $r['kalendarium_wydarzenie'] ?>',
  29. start: '<?php echo $r['kalendarium_dataStart'] ?>',
  30. end: '<?php echo $r['kalendarium_dataKoniec'] ?>'
  31. }
  32.  
  33. ]
  34. });
  35.  
  36. });
  37.  
  38. </script>
  39. <?php
  40. }
  41. }
  42. ?>


Jeśli napisałem za mało infromacji proszę pisać.
nospor
A czemu zakladasz ze petla wykonala sie tylko raz? Zajrzales w zrodlo wygenerowanej strony i widzisz ze kod js wygenerowal sie tylko raz?? Smiem twierdzic, ze zobazysz iz kod js wygenerowal sie prawidlową ilosc razy. A z ty na ekranie widzisz pewnie tylko jeden kalendarz to zapewne specyfika tego kalendarza a nie petli.
kuba1ka
Tak widze jeden kalendarz. Tu chodzi o wydarzenia jakie sie w nim wyswietlaja.

Standardowo, co pozwala wyswietlic wszystkie i sa one pokazane w kalendarzu. W mojej wersji zawsze pokazuje sie tylko pierwsze z bazy, chodz po mojemu pętla też powinna zwracać więcej niż 1.
  1. <script>
  2.  
  3. $(document).ready(function() {
  4.  
  5. $('#calendar').fullCalendar({
  6. defaultDate: '2015-02-12',
  7. editable: true,
  8. eventLimit: true, // allow "more" link when too many events
  9. events: [
  10. {
  11. title: 'All Day Event',
  12. start: '2015-02-01'
  13. },
  14. {
  15. title: 'Long Event',
  16. start: '2015-02-07',
  17. end: '2015-02-10'
  18. },
  19. {
  20. id: 999,
  21. title: 'Repeating Event',
  22. start: '2015-02-09T16:00:00'
  23. },
  24. {
  25. id: 999,
  26. title: 'Repeating Event',
  27. start: '2015-02-16T16:00:00'
  28. },
  29. {
  30. title: 'Conference',
  31. start: '2015-02-11',
  32. end: '2015-02-13'
  33. },
  34. {
  35. title: 'Meeting',
  36. start: '2015-02-12T10:30:00',
  37. end: '2015-02-12T12:30:00'
  38. },
  39. {
  40. title: 'Lunch',
  41. start: '2015-02-12T12:00:00'
  42. },
  43. {
  44. title: 'Meeting',
  45. start: '2015-02-12T14:30:00'
  46. },
  47. {
  48. title: 'Happy Hour',
  49. start: '2015-02-12T17:30:00'
  50. },
  51. {
  52. title: 'Dinner',
  53. start: '2015-02-12T20:00:00'
  54. },
  55. {
  56. title: 'Birthday Party',
  57. start: '2015-02-13T07:00:00'
  58. },
  59. {
  60. title: 'Click for Google',
  61. url: 'http://google.com/',
  62. start: '2015-02-28'
  63. }
  64. ]
  65. });
  66.  
  67. });
  68.  
  69. </script>


Ew probowalem w ten sposob, ale efekt podobny.

  1. <script type="text/javascript">
  2. <?php
  3. $query = "SELECT ".$prefix."kalendarium.* FROM ".$prefix."kalendarium WHERE kalendarium_aktywny = '1'";
  4. $result=mysql_query($query) or die(mysql_error());
  5.  
  6. $data = date("Y-m-d");
  7. if(mysql_num_rows($result) > 0) {
  8. while($r = mysql_fetch_assoc($result)) {
  9.  
  10.  
  11. echo" $(document).ready(function() {
  12.  
  13. $('#my-next-button').click(function() {
  14. $('#calendar').fullCalendar('next');
  15. });
  16.  
  17. $('#calendar').fullCalendar({
  18. weekends: true,
  19. header: {
  20. left: 'prev,next today',
  21. center: 'title',
  22. right: 'month,basicWeek,basicDay'
  23. },
  24. defaultDate: '".$data."',
  25. editable: false,
  26. eventLimit: true,
  27. events: [
  28. {
  29. title: '".$r['kalendarium_wydarzenie']."',
  30. start: '".$r['kalendarium_dataStart']."',
  31. end: '".$r['kalendarium_dataKoniec']."'
  32. }
  33.  
  34. ]
  35. });
  36.  
  37. });
  38.  
  39. ";
  40. }
  41. }
  42. ?>
  43. </script>



Robie coś nie tak?
johny_s
Cytat(kuba1ka @ 23.03.2015, 11:06:42 ) *
Robie coś nie tak?

tak
zapętlasz generowanie skryptu a nie eventow
zerknij w źródło strony tak jak radził @nospor i porównaj czy masz taki sam wynik jak ten który wkleiłeś
Pyton_000
Jakbyś przeczytał uważnie co @nospor napisał i zajrzał w źródło to byś zobaczył magię.
Poza tym po co xxxx razy w pętli generujesz cały kod JS?

Kod JS dla kalendarza masz wygenerować tylko raz, a w pętli event...
kuba1ka
Probowałem w ten sposob :

Zróło jest "chyba" ok ale teraz wgl kalendarza nei zwraca.
  1. <?php
  2.  
  3.  
  4. $query = "SELECT ".$prefix."kalendarium.* FROM ".$prefix."kalendarium WHERE kalendarium_aktywny = '1'";
  5. $result=mysql_query($query) or die(mysql_error());
  6. $tab = array();
  7. if(mysql_num_rows($result) > 0) {
  8. while($r= mysql_fetch_array($result)) {
  9. $tab[] = array(
  10. 'title' => $r['kalendarium_wydarzenie'],
  11. 'start' => $r['kalendarium_dataStart'],
  12. 'end' => $r['kalendarium_dataKoniec']
  13. );
  14. }
  15. }
  16. $json = json_encode($tab);
  17.  
  18.  
  19.  
  20. ?>
  21.  
  22. <script type="text/javascript">
  23.  
  24.  
  25. $(document).ready(function() {
  26.  
  27. $('#my-next-button').click(function() {
  28. $('#calendar').fullCalendar('next');
  29. });
  30.  
  31. $('#calendar').fullCalendar({
  32. weekends: true,
  33. header: {
  34. left: 'prev,next today',
  35. center: 'title',
  36. right: 'month,agendaWeek,agendaDay'
  37. },
  38.  
  39. defaultDate: '<?php echo date("Y-m-d"); ?>',
  40. editable: false,
  41. eventLimit: true, // allow "more" link when too many events
  42.  
  43. events: [
  44. {
  45. <?php echo $json ?>,
  46. },
  47.  
  48. ]
  49.  
  50. });
  51.  
  52. });
  53.  
  54.  
  55. </script>
Pyton_000
Kod
events: [
                <?php echo $json ?>
            ]
kuba1ka
mimo to nie pokazuje wyniku( tak widzialem blad ze srednikiem po echo)
nospor
No widzisz, jednak zrodlo jest ok. Na przyszlosc staraj sie wpierw zaglebic doklanie w problem a nie strzelac.

Skoro juz wiemy, ze petla generuje sie tyle razy ile ma sie generowac mozna przejsc do meritum sprawy:
nie znam tego kalendarza co uzywasz, ale smiem twierdzic, ze o tutaj:
events: [
]
masz podac liste wydarzen. czyli ma byc tylko raz kod z
$('#calendar').fullCalendar({
...
events: [

]
});
});

A w events masz wstawic kolejne wydarzenia z bazy danych. A ty teraz generujesz tyle razy ten kod ile masz rekordow, wiec logiczne ze inicjalizuje ci tylko jedno wydarzenie, gdyz kazdy kod inicjalizuje tylko jedno wydarzenie.
kuba1ka
Ok, rozwiazane. Dziekuje za pomoc.
Nie umiejetnie stosowalem json_encode.
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.