Autor | Zpráva | ||
---|---|---|---|
Adrifinel Profil |
Kdysi mi bylo uděláno filtrování, ale když jsem se autorky ptala na úpravu, už si nepamatovala, že něco takového vůbec dělala.
echo '<form method="GET" action="?" id="noborder"> Filtrovat měsíc: <select name="filter" class="kolon"> <option value="0" '.$optf[0].'>Zobrazit vše</option> <option value="1" '.$optf[1].'>Leden</option> <option value="2" '.$optf[2].'>Únor</option> <option value="3" '.$optf[3].'>Březen</option> <option value="4" '.$optf[4].'>Duben</option> <option value="5" '.$optf[5].'>Květen</option> <option value="6" '.$optf[6].'>Červen</option> <option value="7" '.$optf[7].'>Červenec</option> <option value="8" '.$optf[8].'>Srpen</option> <option value="9" '.$optf[9].'>Září</option> <option value="10" '.$optf[10].'>Říjen</option> <option value="11" '.$optf[11].'>Listopad</option> <option value="12" '.$optf[12].'>Prosinec</option> </select> Systém funguje tak, že vám to ukáže výsledky jen týkající se daného měsíce. Bylo mi řečeno, že funkce $optf se používá jen na čísla. Která funkce se použivá, když chci použít názvy (míst)? O té $optf jsem nenašla ani moc informací... |
||
Michal Maršálek Profil |
#2 · Zasláno: 12. 4. 2013, 15:47:45
Adrifinel:
„funkce $optf“ Není to žádná funkce, je to proměnná (pole). V php může být klíčem pole (to co je v hranatých závorkách) jak číslo, tak i textový řetězec. |
||
Adrifinel Profil |
#3 · Zasláno: 12. 4. 2013, 19:04:00
Michal Maršálek:
Tak pole... trochu jsem jaksi tápala, co to vůbec je, vzhledem k tomu, že to neví ani autor :D Takže říkáš, že když vyměním čísla za text, tak to bude fungovat? if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND $_GET["filter"] >= 1 AND $_GET["filter"] <= 12) { Ono se totiž s těmi čísly pojí tohle pak. |
||
Michal Maršálek Profil |
#4 · Zasláno: 12. 4. 2013, 19:37:36
Adrifinel:
Nevím, kde co za co chceš vyměnit a co chceš vlastně udělat. |
||
Tori Profil |
#5 · Zasláno: 12. 4. 2013, 20:52:14
Adrifinel:
Řešíš dvě různé věci naráz. Pokud chceš zjistit, jak to funguje, vypiš si to pole $optf a případně dej najít v kódu všechny výskyty téhle proměnné - někde určitě musíš narazit na to, jak a podle čeho je definovaná.
Pokud se ptáš, jak udělat omezit výpis dat jen na konkrétní měsíc, tak prosím tě doplň info: - v jakém formátu jsou data (asi z DB, že?), která chceš porovnávat s GET[filter] - jakou úpravu proti té původní funkčnosti potřebuješ |
||
Adrifinel Profil |
#6 · Zasláno: 12. 4. 2013, 22:28:30
Tori:
Zkusím to zformulovat jinak. Já nechci udělat výpis dat na měsíce, to mám dávno uděláno a funguje to. Já chci použít stejný systém na výpis zeměpisných názvů. Prostě mám stávající kód a chci ho upravit na jinou část webu. if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND $_GET["filter"] >= 0 AND $_GET["filter"] <= 12) { $optf[$_GET["filter"]] = "selected"; } else { $optf[0] = "selected"; Je ještě tady. Já se tedy ptám na to jak předělat výpis měsíců na výpis lokací s tím, že je tam proměnná o které nevím, co je zač. Jestli je to něco jako vlastní kombinace nebo tak. |
||
Tori Profil |
To pole
$optf je jen k tomu, aby po odeslání formuláře zůstal v <select>u vybraný ten měsíc, který jsi chtěla.
Dá se to udělat i jinak, např.: $mesice = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); $vybranyMesic = 0; if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND isset($mesice[$_GET["filter"]]) { $vybranyMesic = $_GET["filter"]; } echo '<form method="GET" action="?" id="noborder"> Filtrovat měsíc: <select name="filter" class="kolon"> <option value="0"' . ($vybranyMesic == 0 ? ' selected' : '') . '>Zobrazit vše</option>'; foreach ($mesice as $cislo => $nazev) { echo '<option value="'.$cislo.'"' . ($vybranyMesic == $cislo ? ' selected' : '') . '>'.$nazev.'</option>'; } echo '</select>'; „jak předělat výpis měsíců na výpis lokací“ Změní se ta podmínka: if(!empty($_GET["filter"]) - tohle zůstane stejné (pokud to nechceš přejmenovat)
is_numeric($_GET["filter"]) - pokud budeš ve formuláři používat ID těch lokací, tak tohle zůstane stejné. Kdybys používala názvy (tj. stranka.php?filter=Brno ), tak to vynech.
$_GET["filter"] >= 0 AND $_GET["filter"] <= 12 - tahle část ověřuje, jestli to je platné číslo měsíce. Jestli budeš názvy lokací číst z DB, tak to taky dej pryč. Kdyby někdo zadal neexistující název nebo ID, tak se prostě nic nenajde.
|
||
Adrifinel Profil |
#8 · Zasláno: 13. 4. 2013, 11:00:06
Ještě jedna věc by se s tím pojila a to stránkování. Uvědomila jsem si, že těch záznamů bude hodně a lidi neradi jaksi rolují. A není mi jasné, jak do tohoto kódu to stránkování zaimponovat... výpisy se nerozdělí na stránky.
Nějak nevím, jak do jejího stylu napsat... LIMIT $limit <?php if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND $_GET["filter"] >= 1 AND $_GET["filter"] <= 12) { $filter_by_month = htmlspecialchars($_GET["filter"]); // Ochrana proti hackerům $prikaz = MySQL_Query("SELECT * FROM `kalendar` WHERE MONTH(datum) = ".$filter_by_month." ".$sql_order.";") or die (mysql_error()); } else { $prikaz = MySQL_Query("SELECT * FROM `kalendar` ".$sql_order.";") or die (mysql_error()); } if(mysql_num_rows($prikaz) >= 1) { // Když je alespoň jeden záznam echo'<table style="width: 100%"> <tr><td width="10" class="td3">Datum</td><td width="220" class="td3">Událost</td></tr>'; while($data = mysql_fetch_array($prikaz)) { // Vypisuj záznamy if(date("j.n", strtotime($data["datum"])) == date("j.n", time())) { // pokud je datum záznamu stejné jako dnešní: echo '<tr class="tr" id="z'.$data["ID"].'"><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš obarvený řádek } else { // když je datum jiné: echo '<tr><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš normální řádek } } echo '</table>'; } ?> <? include "./zabody.php";?> |
||
Tori Profil |
// stránkovací funkce. Vrací pole, kde klíče jsou čísla stránek a // hodnota je false|true (= jestli tato stránka je aktuální) // parametry: počet záznamů celkem; počet záznamů na 1 stránku; číslo aktuální stránky; číslo první stránky (jestli 0 nebo 1) function strankovani($celkem, $naStranku, $aktualni, $start = 1) { $data = array(); while ($celkem > 0) { $data[$start] = ($start == $aktualni); $celkem -= $naStranku; $start++; } return $data; } // nejdřív nastavíš omezení výpisu (filtr, stránkování) $mesice = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); define('ZAZNAMU_NA_STRANKU', 20); $vybranyMesic = 0; if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND isset($mesice[$_GET["filter"]]) { $vybranyMesic = $_GET["filter"]; } // stránky jsou číslované od jedničky $aktualniStranka = !empty($_GET['stranka']) ? (int)$_GET['stranka']: 1; // Pak poskládáš SQL a zjistíš, kolik záznamů je tam celkem. $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `kalendar`'; if ($vybranyMesic) $sql .= ' WHERE MONTH(`datum`) = '.$vybranyMesic; $sql .= ' '.$sql_order.' LIMIT '.( ($aktualniStranka-1) * ZAZNAMU_NA_STRANKU).', '.ZAZNAMU_NA_STRANKU; // ↑ to $stranka-1 je nutné, pokud číslo první stránky je 1. Pokud čísluješ od nuly, nech tam jen $stranka. $vysledek = mysql_query($sql); if (!$vysledek) { echo 'Chyba dotazu'; // nějaké zpracování chyby... } $zaznamuCelkem = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0); // Stránkování: echo "<p>Nalezeno $zaznamuCelkem událostí v kalendáři. Přejít na stránku č. "; foreach(strankovani($zaznamuCelkem, ZAZNAMU_NA_STRANKU, $aktualniStranka) as $cislo => $jeAktualni) { if (!$jeAktualni) echo " <a href='?filter=".$vybranyMesic."&stranka=".$cislo."'>$cislo</a> |"; else echo " $cislo |"; } echo '</p>'; // Výpis událostí z kalendáře if (mysql_num_rows($vysledek) >= 1) { echo'<table style="width: 100%"> <tr><td width="10" class="td3">Datum</td><td width="220" class="td3">Událost</td></tr>'; // Datum z DB můžeš porovnávat takhle, je zbytečné volat tolikrát date(). // (předpokládám, že v DB je ten sloupec DATE. Pokud je DATETIME, tak by se to muselo trochu upravit) $dnesniDatum = date('Y-m-d'); while($data = mysql_fetch_array($vysledek)) { // Vypisuj záznamy if($data["datum"] == $dnesniDatum) { // pokud je datum záznamu stejné jako dnešní: echo '<tr class="tr" id="z'.$data["ID"].'"><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš obarvený řádek } else { // když je datum jiné: echo '<tr><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš normální řádek } } echo '</table>'; } |
||
Adrifinel Profil |
No ještě předtím je kus kódu, zkusím jak to na sebe bude pasovat :)
Tak si říkám, kde mi tam chybí "}" Jedu celý kód a nikde to nevypadá, že by to nebylo jako ukončeno. <? $title="Kalendář"; include ('./predtitle.php'); ?> <? include "./zatitle.php";?> <h2>Kalendář</h2> <?php // Kontrola filtrování, nastavení formuláře pro filtr: if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND $_GET["filter"] >= 0 AND $_GET["filter"] <= 12) { $optf[$_GET["filter"]] = "selected"; } else { $optf[0] = "selected"; } // Kontrola řazení, nastavení formuláře, nastavení SQL příkazu pro řazení: if(!empty($_GET["order"])) { $opto[$_GET["order"]] = "selected"; if($_GET["order"] == "id_asc") { $sql_order = "ORDER BY ID ASC"; } elseif($_GET["order"] == "id_desc") { $sql_order = "ORDER BY ID DESC"; } elseif($_GET["order"] == "date_asc") { $sql_order = "ORDER BY YEAR(datum) ASC, MONTH(datum) ASC, DAY(datum) ASC"; } elseif($_GET["order"] == "date_desc") { $sql_order = "ORDER BY YEAR(datum) DESC, MONTH(datum) DESC, DAY(datum) DESC"; } else { $sql_order = "ORDER BY ID ASC"; } } else { $sql_order = "ORDER BY ID ASC"; } // Formulář pro filtr a řazení: echo '<form method="GET" action="?" id="noborder"> Filtrovat měsíc: <select name="filter" class="kolon"> <option value="0" '.$optf[0].'>Zobrazit vše</option> <option value="1" '.$optf[1].'>Leden</option> <option value="2" '.$optf[2].'>Únor</option> <option value="3" '.$optf[3].'>Březen</option> <option value="4" '.$optf[4].'>Duben</option> <option value="5" '.$optf[5].'>Květen</option> <option value="6" '.$optf[6].'>Červen</option> <option value="7" '.$optf[7].'>Červenec</option> <option value="8" '.$optf[8].'>Srpen</option> <option value="9" '.$optf[9].'>Září</option> <option value="10" '.$optf[10].'>Říjen</option> <option value="11" '.$optf[11].'>Listopad</option> <option value="12" '.$optf[12].'>Prosinec</option> </select> Řadit podle: <select name="order" class="kolon"> <option value="id_asc" '.$opto[id_asc].'>ID vzestupně</option> <option value="id_desc" '.$opto[id_desc].'>ID sestupně</option> <option value="date_asc" '.$opto[date_asc].'>Data vzestupně</option> <option value="date_desc" '.$opto[date_desc].'>Data sestupně</option> </select> <input class="button" type="submit" value="Zobraz"> </form>'; ?> <? // stránkovací funkce. Vrací pole, kde klíče jsou čísla stránek a // hodnota je false|true (= jestli tato stránka je aktuální) // parametry: počet záznamů celkem; počet záznamů na 1 stránku; číslo aktuální stránky; číslo první stránky (jestli 0 nebo 1) function strankovani($celkem, $naStranku, $aktualni, $start = 1) { $data = array(); while ($celkem > 0) { $data[$start] = ($start == $aktualni); $celkem -= $naStranku; $start++; } return $data; } // nejdřív nastavíš omezení výpisu (filtr, stránkování) $mesice = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); define('ZAZNAMU_NA_STRANKU', 20); $vybranyMesic = 0; if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND isset($mesice[$_GET["filter"]]) { $vybranyMesic = $_GET["filter"]; } // stránky jsou číslované od jedničky $aktualniStranka = !empty($_GET['stranka']) ? (int)$_GET['stranka']: 1; // Pak poskládáš SQL a zjistíš, kolik záznamů je tam celkem. $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `kalendar`'; if ($vybranyMesic) $sql .= ' WHERE MONTH(`datum`) = '.$vybranyMesic; $sql .= ' '.$sql_order.' LIMIT '.( ($aktualniStranka-1) * ZAZNAMU_NA_STRANKU).', '.ZAZNAMU_NA_STRANKU; // ↑ to $stranka-1 je nutné, pokud číslo první stránky je 1. Pokud čísluješ od nuly, nech tam jen $stranka. $vysledek = mysql_query($sql); if (!$vysledek) { echo 'Chyba dotazu'; // nějaké zpracování chyby... } $zaznamuCelkem = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0); // Stránkování: echo "<p>Nalezeno $zaznamuCelkem událostí v kalendáři. Přejít na stránku č. "; foreach(strankovani($zaznamuCelkem, ZAZNAMU_NA_STRANKU, $aktualniStranka) as $cislo => $jeAktualni) { if (!$jeAktualni) echo " <a href='?filter=".$vybranyMesic."&stranka=".$cislo."'>$cislo</a> |"; else echo " $cislo |"; } echo '</p>'; // Výpis událostí z kalendáře if (mysql_num_rows($vysledek) >= 1) { echo'<table style="width: 100%"> <tr><td width="10" class="td3">Datum</td><td width="220" class="td3">Událost</td></tr>'; // Datum z DB můžeš porovnávat takhle, je zbytečné volat tolikrát date(). // (předpokládám, že v DB je ten sloupec DATE. Pokud je DATETIME, tak by se to muselo trochu upravit) $dnesniDatum = date('Y-m-d'); while($data = mysql_fetch_array($vysledek)) { // Vypisuj záznamy if($data["datum"] == $dnesniDatum) { // pokud je datum záznamu stejné jako dnešní: echo '<tr class="tr" id="z'.$data["ID"].'"><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš obarvený řádek } else { // když je datum jiné: echo '<tr><td>'.date("j.n.Y", strtotime($data["datum"])).'</td><td>'.$data["text"].'</td></tr>'; // vypiš normální řádek } } echo '</table>'; } ?> <? include "./zabody.php";?> [/pre] [pre]<? $title="Kalendář"; include ('./predtitle.php'); ?> <? include "./zatitle.php";?> <h2>Kalendář</h2> <?php // Kontrola filtrování, nastavení formuláře pro filtr: if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND $_GET["filter"] >= 0 AND $_GET["filter"] <= 12) { $optf[$_GET["filter"]] = "selected"; } else { $optf[0] = "selected"; } // Kontrola řazení, nastavení formuláře, nastavení SQL příkazu pro řazení: if(!empty($_GET["order"])) { $opto[$_GET["order"]] = "selected"; } if($_GET["order"] == "id_asc") { $sql_order = "ORDER BY ID ASC"; } elseif($_GET["order"] == "id_desc") { $sql_order = "ORDER BY ID DESC"; } elseif($_GET["order"] == "date_asc") { $sql_order = "ORDER BY YEAR(datum) ASC, MONTH(datum) ASC, DAY(datum) ASC"; } elseif($_GET["order"] == "date_desc") { $sql_order = "ORDER BY YEAR(datum) DESC, MONTH(datum) DESC, DAY(datum) DESC"; } else { $sql_order = "ORDER BY ID ASC"; } } else { $sql_order = "ORDER BY ID ASC"; } // Formulář pro filtr a řazení: echo '<form method="GET" action="?" id="noborder"> Filtrovat měsíc: <select name="filter" class="kolon"> <option value="0" '.$optf[0].'>Zobrazit vše</option> <option value="1" '.$optf[1].'>Leden</option> <option value="2" '.$optf[2].'>Únor</option> <option value="3" '.$optf[3].'>Březen</option> <option value="4" '.$optf[4].'>Duben</option> <option value="5" '.$optf[5].'>Květen</option> <option value="6" '.$optf[6].'>Červen</option> <option value="7" '.$optf[7].'>Červenec</option> <option value="8" '.$optf[8].'>Srpen</option> <option value="9" '.$optf[9].'>Září</option> <option value="10" '.$optf[10].'>Říjen</option> <option value="11" '.$optf[11].'>Listopad</option> <option value="12" '.$optf[12].'>Prosinec</option> </select> Řadit podle: <select name="order" class="kolon"> <option value="id_asc" '.$opto[id_asc].'>ID vzestupně</option> <option value="id_desc" '.$opto[id_desc].'>ID sestupně</option> <option value="date_asc" '.$opto[date_asc].'>Data vzestupně</option> <option value="date_desc" '.$opto[date_desc].'>Data sestupně</option> </select> <input class="button" type="submit" value="Zobraz"> </form>'; ?> <? // stránkovací funkce. Vrací pole, kde klíče jsou čísla stránek a // hodnota je false|true (= jestli tato stránka je aktuální) // parametry: počet záznamů celkem; počet záznamů na 1 stránku; číslo aktuální stránky; číslo první stránky (jestli 0 nebo 1) function strankovani($celkem, $naStranku, $aktualni, $start = 1) { $data = array(); while ($celkem > 0) { $data[$start] = ($start == $aktualni); $celkem -= $naStranku; $start++; } return $data; } // nejdřív nastavíš omezení výpisu (filtr, stránkování) $mesice = array(1 => 'Leden', 'Únor', 'Březen', 'Duben', 'Květen', 'Červen', 'Červenec', 'Srpen', 'Září', 'Říjen', 'Listopad', 'Prosinec'); define('ZAZNAMU_NA_STRANKU', 20); $vybranyMesic = 0; if(!empty($_GET["filter"]) AND is_numeric($_GET["filter"]) AND isset($mesice[$_GET["filter"]]) { $vybranyMesic = $_GET["filter"]; } // stránky jsou číslované od jedničky $aktualniStranka = !empty($_GET['stranka']) ? (int)$_GET['stranka']: 1; // Pak poskládáš SQL a zjistíš, kolik záznamů je tam celkem. $sql = 'SELECT SQL_CALC_FOUND_ROWS * FROM `kalendar`'; if ($vybranyMesic) $sql .= ' WHERE MONTH(`datum`) = '.$vybranyMesic; $sql .= ' '.$sql_order.' LIMIT '.( ($aktualniStranka-1) * ZAZNAMU_NA_STRANKU).', '.ZAZNAMU_NA_STRANKU; // ↑ to $stranka-1 je nutné, pokud číslo první stránky je 1. Pokud čísluješ od nuly, nech tam jen $stranka. $vysledek = mysql_query($sql); if (!$vysledek) { echo 'Chyba dotazu'; // nějaké zpracování chyby... } $zaznamuCelkem = mysql_result(mysql_query('SELECT FOUND_ROWS()'), 0); // Stránkování: echo "<p>Nalezeno $zaznamuCelkem událostí v kalendáři. Přejít na stránku č. "; foreach(strankovani($zaznamuCelkem, ZAZNAMU_NA_STRANKU, $aktualniStranka) as $cislo => $jeAktualni) { if (!$jeAktualni) echo " <a href='?filter=".$vybranyMesic."&stranka=".$cislo."'>$cislo</a> |"; else echo " $cislo |"; } echo '</p>'; // Výpis událostí z kalendáře if (mysql_num_rows($vysledek) >= 1) { echo'<table style="width: 100%"> <tr><td width="10" class="td3">Datum</td><td width="220" class="td3">Událost</td></tr>'; // Datum z DB můžeš porovnávat takhle, je zbytečné volat tolikrát date(). // (předpokládám, že v DB je ten sloupec DATE. Pokud je DATETIME, tak by se to muselo trochu upravit) $dnesniDatum = dat |
||
Časová prodleva: 11 let
|
0