Autor | Zpráva | ||
---|---|---|---|
Luky759 Profil * |
#1 · Zasláno: 25. 11. 2014, 11:52:19
Dobrý den,
narazil jsem na zajímavý problém. V DB mám uložené údaje o jednotlivých věcech (viz obrázek). Potřeboval bych, aby když se v DB nachází řádek, např. Kočka, Brno, Červená, tak aby se v tabulce obarvilo pozadí dané buňky, která ji odpovídá. Ostatní zůstanou bílé. Tabulka má pevné záhlaví (tzn. zvířat je pevně daný počet, ale každé má buď 3 nebo 2 vlastnosti - barvy) Města jsou vypisovány s DB a mohou se přidávat. Můžete mě nějak popostrčit, poradit jak na to? Děkuji. Odkaz na obrázek |
||
Joker Profil |
#2 · Zasláno: 25. 11. 2014, 12:21:03
Luky759:
Databáze a prezentace jsou dvě rozdílné věci. Jinak při výpisu dat z databáze dokážete zjistit, jestli jste na té konkrétní buňce, a případně rovnou nastavit styl. Řešit to čistě na úrovni prezentace, tj. že dostanu čistě jen tabulku a údaje v ní a nemůžu si dogenerovat další informace, by bylo mnohem horší. |
||
tiso Profil |
#3 · Zasláno: 25. 11. 2014, 13:38:44
Luky759: záhlavie je pevné pre oba stĺpce záhlavia? Alebo máš len pevne dané len poradie zvierat? Čo presne tá tabuľka predstavuje, o čo sa snažíš?
|
||
Luky759 Profil * |
#4 · Zasláno: 25. 11. 2014, 14:48:56 · Upravil/a: Luky759
tiso:
záhlaví je pevné pro oba řádky, tj. zvířata i jejich vlastnosti jsou daná. Jediný rozdíl je v tom, že některá zvířata mají pouze 2 vlastnosti a né 3. Joker: Vůbec nechápu co tím chcete říct. Potřebuji to udělat tak, jak jsem to popsal v úvodním příspěvku (doufám, že pochopitelně). Nechci po nikom hotové řešení, jen poradit, nakopnout jak na to. Abych přispěl krapet do mlýna. Vzhledem k tomu, že znám záhlaví tabulky, napadlo mě společně s údaji o zvířatech, vlastnostech a městech ukládat do DB číslo sloupce ve kterém bude vybarvená buňka. Tabulku pak procházet for cyklem s počítadlem buněk. Jenom se ještě musí nějak odkontrolovat jestli jsem ve správném řádku. Napadá někoho něco lepšího? |
||
Joker Profil |
#5 · Zasláno: 25. 11. 2014, 15:16:03
Luky759:
Jak píšu: Při generování té buňky z databáze přece víte, na které buňce zrovna jste. Takže by stačilo něco ve stylu (samozřejmě zjednodušeně): if (($zvire == "kočka") && ($mesto == "Brno") && ($barva == "červená")) echo 'class="zvyraznena"'; Jestli to potřebujete na už hotové vygenerované tabulce v HTML (a nejsou v ní žádné pomocné údaje kromě obsahu), tak to bude problém. Maximálně, jestli má pevnou strukturu, zvýraznit třeba buňku ve čtvrtém sloupci a třetím řádku. |
||
Luky759 Profil * |
#6 · Zasláno: 25. 11. 2014, 15:30:51
Joker:
Jenže jak zjistím na které buňce zrovna jsem? Ta buňka přece žádný identifikátor nemá. Jako kdyby existovalo něco jako třeba <td id="<?php brno,kočka,červená?>"> a já jen kontroloval jestli se údaj s DB rovná s tím pro co je ta daná buňka určená tak není co řešit.
|
||
Joker Profil |
#7 · Zasláno: 25. 11. 2014, 16:14:13
Luky759:
„Jenže jak zjistím na které buňce zrovna jsem?“ To snad při vypisování tabulky dokážete zjistit, jak jinak dostanete správné údaje do správných buněk? |
||
_es Profil |
Luky759:
No a z tej „DB“ tú tabuľku do HTML generuješ ako? |
||
tiso Profil |
#9 · Zasláno: 25. 11. 2014, 16:49:50
Luky759: technická: nemyslíš „pouze 2 vlastnosti a né 3“, ale 2 alebo 3 hodnoty vlastnosti
Identifikátor riadku máš - je to mesto. Už ide len o to spraviť si identifikátor stĺpca. Napríklad takto: <?php ... $cols = array('Kočka-M..', 'Kočka-Ž...', 'Kočka-Červená, ...); a následne vypíšeš riadky tabuľky |
||
Luky759 Profil * |
#10 · Zasláno: 25. 11. 2014, 17:36:57
tiso:
identifikátor sloupce jsem si spravil, tak že ho ukládám jako číslo do DB. Takže vím řádek, vím i sloupec. Existuje nějaký způsob jak to pěkně rychle vypsat do té tabulky, než procházet for cyklus iteraci po iteraci a vyhodnocovat jestli se má nebo nemá buňka vybarvit. Těch sloupců je přes 20. |
||
tiso Profil |
#11 · Zasláno: 25. 11. 2014, 17:47:53
Luky759: dajú sa robiť rôzne šialenosti, ako to vypísať rýchlejšie. Ale zmysel to veľmi nemá, ak je tvojim problémom rýchlosť, tak máš niečo zle spravené. Ukáž čo si dal dokopy.
|
||
_es Profil |
#12 · Zasláno: 25. 11. 2014, 18:27:35
Luky759:
„jak to pěkně rychle vypsat do té tabulky“ A teraz to „vypisuješ“ ako? |
||
Luky759 Profil * |
#13 · Zasláno: 25. 11. 2014, 18:29:28 · Upravil/a: Luky759
tiso:
nejde o rychlost skriptu, ale o rychlost napsání skriptu :-) v plánu to mám tak - for cyklus prochází řádek buňku po buňce a já budu otrocky kontrolovat jestli buňka na které jsem není ta kterou potřebuji. V jednom řádku může být klidně všech 26 políček vybarvených nebo taky jenom jedno nebo žádné. _es: záhlaví tabulky je pevné - to je v html města vypisuju z DB a jednotlivé buňky "vykresluje" for cyklus. Já teď jen nějak musím projít všema buňkama a zjistit, která bude vybarvená. |
||
tiso Profil |
#14 · Zasláno: 25. 11. 2014, 18:33:15
Luky759: dá sa to kontrolovať dobrým spôsobom a zlým spôsobom.
„Ukáž čo si dal dokopy.“ |
||
_es Profil |
#15 · Zasláno: 25. 11. 2014, 19:00:29
|
||
Luky759 Profil * |
#16 · Zasláno: 25. 11. 2014, 20:43:26
tiso:
$vysledek = mysqli_query($mysqli, "select nazev from mesto"); if(mysqli_num_rows($vysledek) == 0) die ("Žádné město"); while($radek = mysqli_fetch_array($vysledek)){ $mesto = $radek["nazev"]; echo "<tr><td>".$mesto."</td>"; $vysledek_spojeni = mysqli_query($mysqli, "select cislo_sloupce from zaznamy where mesto = '".mysqli_real_escape_string($mysqli, $mesto)."' order by cislo_sloupce"); if(mysqli_num_rows($vysledek_spojeni) == 0){ for($i=1; $i<=26; $i++){ echo "<td></td>"; } } else{ while($row = mysqli_fetch_array($vysledek_spojeni)){ $sloupec = $row["cislo_sloupce"]; for($i=1; $i<=26; $i++){ } } } echo "</tr>"; } první for cyklus vypíše prázdné buňky pokud se v daném městě (řádku) nic nenachází. s druhým for cyklem tápu. |
||
tiso Profil |
#17 · Zasláno: 25. 11. 2014, 21:42:12
<?php ... else{ $last = 1; while($row = mysqli_fetch_array($vysledek_spojeni)){ $sloupec = $row["cislo_sloupce"]; if($last < $sloupec -1) { echo str_repeat('<td></td>', $sloupec - 1 - $last); } echo '<td class="zvyraznena"></td>'; $last = $sloupec; } } |
||
Joker Profil |
#18 · Zasláno: 25. 11. 2014, 22:16:00
Luky759:
„identifikátor sloupce jsem si spravil, tak že ho ukládám jako číslo do DB“ To je přece nesmysl, sloupec se musí dát identifikovat z jiných existujících údajů. Nicméně pořadí sloupce, pokud je možné je mezi sebou prohazovat, smysl dává. „nejde o rychlost skriptu, ale o rychlost napsání skriptu :-)“ To je dost krátkozraký přístup. To s dalším vývojem celkem nevyhnutelně vede k bodu, kdy bude lepší celou aplikaci zahodit a začít znovu. |
||
Luky759 Profil * |
#19 · Zasláno: 25. 11. 2014, 23:02:19
tiso:
díky za snahu - teď jsem to jen tak ze srandy zkusil a nefičí to (nevadí), nakonec jsem to vyřešil úplně triviálně else{ $i = 1; while($row = mysqli_fetch_array($vysledek_spojeni)){ $sloupec = $row["cislo_sloupce"]; for($i; $i<=26; $i++){ if($i == $sloupec){ echo "<td>$sloupec</td>"; $i++; break;} else{ echo "<td></td>";} } } if($i <= 26){ for($i; $i<=26; $i++){ echo "<td></td>"; } } } Joker: myslím, že toto řešení mi aplikaci nezboří :-) |
||
Časová prodleva: 9 let
|
0