Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Dlaczego ten warunke if nie działa na dacie ?
Forum PHP.pl > Forum > Przedszkole
arekgr
Dlaczego ten warunek if nie działa na dacie ? Pętla tworzy listę dni w miesiącu (for ..) i bazy przypisuje wydarzenia .Co robić żeby przypisac wydarzenie do dnia ?

  1. $iloscdni=date('t',$data);
  2. //echo "-- " .$s;
  3. echo "ilosc dni miesiac ". $iloscdni;
  4. $zapytanie_art="SELECT nazwa_wydarzenia,dataw FROM kalendarz_dni WHERE MONTH(dataw ) =$dm and YEAR(dataw)=$dr LIMIT 0 , 30";
  5. $result = dbquery($zapytanie_art);
  6.  
  7. //iloscdni jaki dlugi miesaic
  8. for ($i = 1; $i <= $iloscdni; $i++)
  9. {
  10. echo $i ."<br> ";
  11.  
  12. while ($data2 = dbarray($result))
  13. {
  14.  
  15. $d=date('j',strtotime($data2[dataw]));
  16. // j w date daje dzien miesiąca bez zera
  17. // petla nie dziala jak daje zmienna d
  18. if ($i==date('j',$data2[dataw])) { // <- tutaj ?!
  19. echo "-". $d . " -" . $i . "-";
  20. }
  21. }
  22. }
  23.  
Kostek.88
Wyrzuc z linijki 18.
  1. date('j',$data2[dataw])


i daj do osobnej zmiennej wyzej i podstaw do petli zmienna. Dla pewnosci zaraz po zmiennej daj

  1. print_r($zmienna); exit;

i napisz co Ci wyswietla.
arekgr
  1. $d=date('j',strtotime($data2[dataw]));
  2.  
  3. if ($i==$d) {
  4. print_r($d); exit;


Dałem to i nic .. petla nie wyświetla print daty w bazie sa wpisane i maja wartosc 6 ,26 dzien czyli $d
Kostek.88
Szczerze? Nie rozumiem nic.

1) Wiem, ze to nic nie dalo

2) Jakim cudem wyswietlilo Ci 6 i 26? Przeciez jest exit po print_r i powinno od razu przerwac dzialanie skryptu. No chyba, ze wyswietlilo wartosc "6, 26". Jaki jest w koncu wynik?

3) daj ten print_r przed warunkiem if....
arekgr
Nie wyswietla sie nic tylko napisałem że są takie daty w bazie ) więc powinno zadzialać

to wyrzuca print_r przed if

Warning: print_r() expects at least 1 parameter, 0 given in /var/www/wlepnet/kal/index.php on line 135 6=d i=1
Warning: print_r() expects at least 1 parameter, 0 given in /var/www/wlepnet/kal/index.php on line 135 2
Kostek.88
Ktoras zmienna masz pusta, z tego wynika... sprawdz tak $data2, ale PRZED IF-em
Fifi209
W zapytaniu masz zmienne: $dr $dm a w skrypcie ich nie widać
arekgr
cały kod tutaj . $dr $dm to sa zmienne przekazane do funkcji , zapytanie sql z nich korzysta

Sprawdziłem zmienna date2[dataw] przed if pokazuje za każdym razem date , jak sprawdzić czego nie pokazuję że jest pusta np ?


dataw to kolumna w tabeli z datami ..

daje caly kod z sql bazy

  1. CREATE TABLE IF NOT EXISTS `kalendarz_dni` (
  2. `id_kalendarz_dni` int(9) NOT NULL AUTO_INCREMENT,
  3. `dataw` datetime NOT NULL,
  4. `nazwa_wydarzenia` varchar(300) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  5. `miejscowosc` varchar(50) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  6. `kod_pocztowy` varchar(6) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  7. `gmina` varchar(30) CHARACTER SET utf8 COLLATE utf8_polish_ci NOT NULL,
  8. `data_dodania` date NOT NULL,
  9. PRIMARY KEY (`id_kalendarz_dni`)
  10. ) ENGINE=MyISAM DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
  11.  
  12.  
  13. INSERT INTO `kalendarz_dni` (`id_kalendarz_dni`, `dataw`, `nazwa_wydarzenia`, `miejscowosc`, `kod_pocztowy`, `gmina`, `data_dodania`) VALUES
  14. (1, '2011-12-25 00:00:00', 'Dzień s', 'K', '62', 'R', '2011-11-23'),
  15. (2, '2011-12-06 00:00:00', 'Dzien w', 'Rl', '6', 'Rl', '2011-12-03');


  1. function sm($m,$data)
  2. {
  3. echo "<br>" . $data;
  4. $d = strtotime($data);
  5. $dm=date('m', $d);
  6. echo "inna data". $dm;
  7. $dr=date('Y', $d);
  8. echo "rok : ".$dr ."";
  9. $s=$m.' month';
  10. //ilosc dni miesiac pobrany z daty
  11. $iloscdni=date('t',$data);
  12. //echo "-- " .$s;
  13. echo "ilosc dni miesiac ". $iloscdni;
  14.  
  15. //baza szukanie
  16. $zapytanie_art="SELECT nazwa_wydarzenia,dataw FROM kalendarz_dni WHERE MONTH(dataw ) =$dm and YEAR(dataw)=$dr LIMIT 0 , 30";
  17. $result = dbquery($zapytanie_art);
  18. global $db_name;
  19. echo "<br><div style=\"background-color: #e9eef6;\"><b>Wydarzenia:</b><br>";
  20.  
  21. echo $zapytanie_art;
  22. //rozpisanie całego miesiac i dni
  23. for ($i = 1; $i <= $iloscdni; $i++)
  24. {
  25. echo $i ."<br> ";
  26.  
  27. //wyszukiwanie wydarzen
  28. while ($data2 = dbarray($result))
  29. {
  30.  
  31. $d=date('j',strtotime($data2[dataw]));
  32. echo $data2[dataw] ."proba". $i;
  33. // print_r();
  34. if ($i==$d) {
  35. // print_r($d);
  36. //if(isset($data2[$i])){
  37. echo "-". $d . " -" . $i . "-"; //.$data2[data];
  38.  
  39. }
  40.  
  41. }
  42. }
  43.  
  44. }
Kostek.88
A moglbys podac co konkretnie wyswietla? CTRL+C i CTRL+V. A ja chcialem $data2 zebys wkleil, a nie $data2['dataw']... ale teraz to chyba juz nieistotne do konca.

PS. Wiem, ze dataw to kolumna w tabeli z datami.

EDIT: PS2. Co w 33. linijce robi print_r();? Tam mialo byc print_r($d)
arekgr
Array ( [nazwa_wydarzenia] => Dzień struda [dataw] => 2011-12-25 00:00:00 ) Array ( [nazwa_wydarzenia] => Dzien wioschy w TV [dataw] => 2011-12-06 00:00:00 ) 2


to daje print_r($data2)

Uwaga dałem cały kod funkcji i sql , post wyżej żeby miejsca nie zajmować.

Odp. w 33 linijce polecenie print_r($d) daje dni z bazydanych 25 i 6
Kostek.88
Dobra, to moze tak:

Cytat
Dlaczego ten warunek if nie działa na dacie ?


Co to znaczy nie dziala? Z tego co rozumiem, skrypt powinien wyswietlic

- 6 - 6
- 25 - 25

Co jest z tym nie tak?
arekgr
Nie wchodzi polecenie if wiec się wyświetla w taki sposób ..

$i =1 d= 25 dostaje takie wynik przed if

powinno być if ( $i=25 == $d= 25 )
{jest wykonanie warunku !} jednak się warunek nie wykonuje .
Kostek.88
Daj po 11. linijce
  1. print_r($data); exit;


I wklej co wyswietla
arekgr
14-12-2011

to jest data przekazana do funkcji , ten skrypt ma wypisac dni w miesiącu , a dopasować wydarzenia z bazy danych ale jak nic się nie dzieje również wypisać ten dzien jak kalendarz organizer .
Kostek.88
Hmmm... chyba jednak nie potrafie pomoc...

1) jak wyrzucisz IF-a to co DOKLADNIE wyswietla?
2) jak sie odwolujesz do tej funkcji? Gdzie masz pozostaly kod? Bo widze, ze funkcja nie zwraca na ten moment zadnej wartosci... (wiesz, chodzi o return)
arekgr
Jak wyrzucę if to dostaje wynik podglądu echo $i itd.
$i =1 i d$=25
$i =1 i d$=6

Pełne
zaskoczenie gdy $i ma wartość 2 również powinno się coś pojawić w pętli while czyli

$i =2 i d$=25
$i =2 i d$=6

a nie ma nic ? ? Nie ma tego

ta funkcja ma tylko wypisać na przeglądrece te dni i wydarzenia nie zwraca nic.

Pętla for działa ok .. i$ wypisuję się kolejnie tyle ile jes dni ...

A moze to jest winne w pętli while :

function dbarray($query) {
$result = @mysql_fetch_assoc($query);
if (!$result) {
echo mysql_error();
return false;
} else {
return $result;
}
Kostek.88
Po prostu petla for Ci sie wykonuje raz i zastanwiam sie nad przyczyna.

1) Glowna podejrzana byla zmienna $iloscdni, sprawdz ja jeszcze raz dla pewnosci. (bezposrednio przed petla)
2) Zastanawialem sie, czy nie przypisales nic do zmiennej $i podczas wykonywania petli, ale na to wyglada, ze nie.
3) Widze, ze tez nie ma problemow z inkrementacja...
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.