Witam
Mam do rozwiązania następujący problem: w tabeli mam zapisane obserwacje ptaków (strona ornitologiczna), potrzebuję pobrać z niej dane z konkretnej kategorii i wyświetlić je na stronie w dwóch kolumnach - w lewej z okresu 1.01.-30.06. a w prawej z okresu 1.07.-31.12. W szablonie strony używam SMARTY.
Kod PHP
$gatunki_lista = array ();
$daty_lista_1 = array ();
$daty_lista_2 = array ();
$i = -1;
$j = -1;
$wynik = mysql_query ("SELECT gatunki.species_id, gatunki.species_nazwapl, gatunki.species_nazwalt FROM gatunki, obserwacje WHERE gatunki.species_id=obserwacje.obs_gatunek AND obserwacje.obs_typ='$id_fenologia' AND obserwacje.obs_status='1' AND year(obserwacje.obs_data)='$rok' GROUP BY gatunki.species_nazwapl ORDER BY gatunki.species_nazwapl;");
while ($g = mysql_fetch_array ($wynik)){
$gid = $g[0];
$gnazwapl = $g[1];
$gnazwalt = $g[2];
$gatunki_lista[] = array (
'nazwapl' => $gnazwapl,
'nazwalt' => $gnazwalt
);
$kid = 0;
$res = mysql_query ("SELECT obs_id, obs_data, obs_nazwamsc, obs_gatunek FROM obserwacje WHERE obs_gatunek='$gid' AND year(obs_data)='$rok' AND dayofyear(obs_data)<'182' AND obs_status='1' AND obs_typ='$id_fenologia' ORDER BY obs_data;");
while ($r = mysql_fetch_array ($res)){
$id = $r[0];
$data = formatuj_date($r[1]);
$miejsce = stripslashes ($r[2]);
$os_gatunek = $r[3];
if ($os_gatunek != $kid){
$kid = $os_gatunek;
$i++;
}
$opcje_pokaz = '<a href="pokaz.php?idm='.$id.'&t=4"><img src="'.$szablon_strony.'img/btn_preview.gif" title="Szczegóły" /></a>';
$daty_lista_1[$i][] = array (
'id' => $id,
'data' => $data,
'miejsce' => $miejsce,
'opcje' => $opcje_pokaz
);
}
$kid1 = 0;
$res1 = mysql_query ("SELECT obs_id, obs_data, obs_nazwamsc, obs_gatunek FROM obserwacje WHERE obs_gatunek='$gid' AND year(obs_data)='$rok' AND dayofyear(obs_data)>'181' AND obs_status='1' AND obs_typ='$id_fenologia' ORDER BY obs_data;");
while ($w = mysql_fetch_array ($res1)){
$id1 = $w[0];
$data1 = formatuj_date ($w[1]);
$miejsce1 = stripslashes ($w[2]);
$os_gatunek1 = $w[3];
if ($os_gatunek1 != $kid1){
$kid1 = $os_gatunek1;
$j++;
}
$opcje_pokaz = '<a href="pokaz.php?idm='.$id1.'&t=4"><img src="'.$szablon_strony.'img/btn_preview.gif" title="Szczegóły" /></a>';
$daty_lista_2[$j][] = array (
'id' => $id1,
'data' => $data1,
'miejsce' => $miejsce1,
'opcje' => $opcje_pokaz
);
}
}
$tpl -> assign ('fgatunek', $gatunki_lista);
$tpl -> assign ('daty', $daty_lista_1);
$tpl -> assign ('daty1', $daty_lista_2);
Kod HTML
<table class="tbl_fenol">
{section name=g loop=$fgatunek}
<tr>
<td colspan="2" class="gname">
{$fgatunek[g].nazwapl} <i>{$fgatunek[g].nazwalt}</i>
</td>
</tr>
<tr>
<td class="lewa">
<table class="tbl_fenol_inner">
{section name=p loop=$daty[g]}
<tr>
<td width="30">
<input type="checkbox" name="zaznaczona[]" id="zaznaczona" value="{$daty[g][p].id}" />
</td>
<td width="80">
{$daty[g][p].data}
</td>
<td>
{$daty[g][p].miejsce}
</td>
<td width="25">
{$daty[g][p].opcje}
</td>
</tr>
{/section}
</table>
</td>
<td class="prawa">
<table class="tbl_fenol_inner">
{section name=o loop=$daty1[g]}
<tr>
<td width="30">
<input type="checkbox" name="zaznaczona[]" id="zaznaczona" value="{$daty1[g][o].id}" />
</td>
<td width="80">
{$daty1[g][o].data}
</td>
<td>
{$daty1[g][o].miejsce}
</td>
<td width="25">
{$daty1[g][o].opcje}
</td>
</tr>
{/section}
</table>
</td>
</tr>
{/section}
</table>
Niestety nie wszystko działa tak jak powinno. Wygląda to tak że w pierwszym wierszu w lewej kolumnie dane są OK, ale w prawej znajdują się już dane które powinny znaleźć się w 2 wierszu 2 kolumnie; w 2 wierszu 1 kolumnie są dane z 3 wiersza 1 kolumny a w 2 kolumnie są dane z 4 wiersza 2 kolumny; w 3 wierszu 1 kolumnie są dane z 5 wiersza 1 kolumny a 2 kolumnie są dane z 6 wiersza 2 kolumny itd.
Jest jakiś sposób żeby to zadziałało czy też moje podejście do zagadnienia jest z założenia błędne? Od razu zaznaczam że nie mogę zrezygnować ze SMARTY bo cała strona jest na niej zbudowana.