Autor | Zpráva | ||
---|---|---|---|
xciza Profil |
#1 · Zasláno: 5. 6. 2011, 17:15:37
Hoj, udělal jsem si databázi jídelního lístku kde mám nějaké kategorie a v nich příslušná jídla. Mám následující kód pro vypsání těchto dat:
<?php if(!$dbc) {echo "Chyba připojení k databázi!"; exit; } else{ $spredkrmy = mysql_query("SELECT * FROM polozka WHERE ID_kategorie = '1'", $dbc )or die("Chyba v dotaze: " . mysql_error()); if (!empty($spredkrmy)){ $table = '<table id="jidelak" rules="all">'; $table .= '<thead><tr>'; echo "<h2>Studené předkrmy</h2>"; $table .= '</tr></thead>'; $table .= '<tbody>'; while ($sloupec = mysql_fetch_array($spredkrmy)) { $table .='<tr>'; $table .= '<td>'.$sloupec['objem'].'</td>'; $table .= '<td class="volna_bunka"></td>'; $table .= '<td>'.$sloupec['nazev'].'</td>'; $table .= '<td class="volna_bunka"></td>'; $table .= '<td>'.$sloupec['cena'].'</td>'; $table .= '</tr>'; } $table .= '</tbody>'; $table .= '</table>'; echo $table; ;} $tpredkrmy = mysql_query("SELECT * FROM polozka WHERE ID_kategorie = '2'", $dbc )or die("Chyba v dotaze: " . mysql_error()); if (!empty($tpredkrmy)){ $table = '<table id="jidelak" rules="all">'; $table .= '<thead><tr>'; echo "<h2>Teplé předkrmy</h2>"; $table .= '</tr></thead>'; $table .= '<tbody>'; while ($sloupec = mysql_fetch_array($tpredkrmy)) { $table .='<tr>'; $table .= '<td>'.$sloupec['objem'].'</td>'; $table .= '<td class="volna_bunka"></td>'; $table .= '<td>'.$sloupec['nazev'].'</td>'; $table .= '<td class="volna_bunka"></td>'; $table .= '<td>'.$sloupec['cena'].'</td>'; $table .= '</tr>'; } $table .= '</tbody>'; $table .= '</table>'; echo $table; }} ?> Problém je v tom, že jednotlivé kategorie mám takhle vypsané každou do vlastní tabulky, potřeboval bych to ale nějak sepsat do jedné tabulky (ty dva if a while cykly). Zkoušel jsem vypsat všechna data z databáze, ale potom se mi nepodařilo mezi ně vložit název kategorie. Pro žádám o pomoc docílit požadovaného kódu. Kdyby to nebylo k pochopení tak napište a zkusím to popsat trochu jinak ;) |
||
okolojdouci Profil * |
#2 · Zasláno: 5. 6. 2011, 17:28:34
Že musíš z toho dotazu zrušit podmínku s ID_kategorie a místo toho ten výpis seřadit (SORT BY ID_kategorie), to asi víš.
No a pak zbývá jenom při vypsání každého řádku zjistit, jestli ID_kategorie je stejné jako o řádek dřív. takže si udělej nějakou pomocnou proměnnou, do které na konci té smyčky dáš aktuální ID_kategorie a na jejím začátku ty dvě hodnoty porovnáš. Když se bude hodnota lišit, vypíšeš nadpis pro novou kategorii. |
||
DarkMeni Profil |
#3 · Zasláno: 5. 6. 2011, 17:33:47
Jestli je chceš mít v jedné tabulce tak nějaký způsob by tu byl ale počítej s tím že se ti ta tabulky rozroste o pár sloupců navíc.
1) Uložit tabulku jako: //Jestli je prázdná tak to nebude problém: mysql_query("DROP TABLE tabulka1"); mysql_query("DROP TABLE tabulka2"); mysql_query("CREATE TABLE tabulka (id INT NOT NULL AUTO_INCREMENT, type VARCHAR(10) NOT NULL DEFAULT 'tpredkrmy', objem VARCHAR(100), nazev VARCHAR(100), cena INT DEFAULT 0, PRIMARY KEY(id))"); //když ne tak to už problém bude, asi nějakej ten skript který to všechno uloží do buffering paměti, vymaže tabulky, vytvoří novou tabilku a tam to nahraje Buď to a nebo jsem tě blbě pochopyl. |
||
xciza Profil |
#4 · Zasláno: 5. 6. 2011, 19:07:36
okolojdouci:
> Že musíš z toho dotazu zrušit podmínku s ID_kategorie a místo toho ten výpis seřadit (SORT BY ID_kategorie), to asi víš. > No a pak zbývá jenom při vypsání každého řádku zjistit, jestli ID_kategorie je stejné jako o řádek dřív. takže si udělej nějakou pomocnou proměnnou, do které na konci té smyčky dáš aktuální ID_kategorie a na jejím začátku ty dvě hodnoty porovnáš. > Když se bude hodnota lišit, vypíšeš nadpis pro novou kategorii. Jelikož jsem v tomto začátečník, tak si s tím ještě moc nerozumím tak bych chtěl poprosit alespoň o kousek kódu, abych se měl čeho chytnout ;) |
||
DarkMeni Profil |
#5 · Zasláno: 5. 6. 2011, 20:08:08 · Upravil/a: DarkMeni
xciza:
„jednotlivé kategorie mám takhle vypsané každou do vlastní tabulky“ Aha, tak tyhle tabulky :D //Připojení k databázi... $predkrmy = mysql_query("SELECT * FROM polozka ORDER BY ID_polozky DESC"); echo "<table>"; //"Ta pomocná proměnná": $ID = 0; //Pole s názvy položek: $NAZEV_polozky = Array( 1 => "Studené předkrmy"; 2 => "Teplé předkrmy"; ); //Cyklus: while($predkrm = mysql_fetch_array($predkrmy)){ //Kontrola: if($predkrm["ID_polozky"]!=$ID){ echo "<tr><td colspan='3' class='thead'>".$NAZEV_polozky[($ID+1)]."</td></tr>"; echo "<tr><td>Objem</td><td>Název</td><td>Cena</td></tr>"; } //Vepsání řádku: echo "<tr><td>".$predkrm["objem"]."</td><td>".$predkrm["nazev"]."</td><td>".$predkrm["cena"]."</td></tr>"; //Aktualizace pomocné proměnné: /* Která po přičtení 1 v případě neshody snad nebude potřeba ale stejně ji sem dám */ $ID = $predkrm["ID_polozky"]; } echo "</table>"; Jestli jsi chtěl mít jen jednu tabulku tak ti snad toto pomůže. |
||
xciza Profil |
#6 · Zasláno: 5. 6. 2011, 20:47:39
DarkMeni:
Tak jsem to tam vložil, ale: 1) u toho pole s položkami se tomu nelíbili ty středníky - podle manuálu jsem tam dal čárky -OK 2) teď mi to hází chybu: "Warning: mysql_fetch_array() expects parameter 1 to be resource, boolean given in C:\Program Files\EasyPHP\www\!! Marilyn !!\jidelni_listek.php on line 107" což odpovídá začátku cyklu ( while($predkrm = mysql_fetch_array($predkrmy)) ) |
||
panther Profil |
#7 · Zasláno: 5. 6. 2011, 20:49:56
xciza:
2) máš chybu v MySQL dotazu, vypiš si mysql_error(). |
||
xciza Profil |
#8 · Zasláno: 5. 6. 2011, 21:29:55
už to jde, ale mám ještě jeden dotaz: šlo by do toho pole kategorií vložit nějaký FOR cyklus, kde by se vybírali kategorie z databáze abych je tam nemusel všechny vypisovat ručně??
|
||
DarkMeni Profil |
#9 · Zasláno: 5. 6. 2011, 23:49:55
Když si do databáze přidáš sloupec s názvem tak pak to budeš jednoduše volat tím názvem ($predkrm["NAZEV_kategorie"]) a to už by jsi ani to pole s kategoriema nepotřeboval.
Jinak jestli tušíš že počet kategorií poroste a nebudeš to chtít měnit ručně v souboru tak ten cyklus by nějak udělat šel ale nejspíš to bude chtít další tabulku v databázi jestli mi rozumíš. |
||
xciza Profil |
#10 · Zasláno: 6. 6. 2011, 09:16:23
DarkMeni:
Tabulku v databázi mám-mám tabulku kategorie (ID, nazev) a pak mám tabulku položka (ID, cena nazev, objem, a ID_kategorie). Přes to ID_Kategorie mám položky přiřazený tak jak potřenbuju... |
||
okolojdouci Profil * |
#11 · Zasláno: 6. 6. 2011, 13:18:01
xciza:
SELECT polozka.nazev, kategorie.nazev AS knazev FROM polozka LEFT JOIN kategorie ON kategorie.ID = polozka.ID_Kategorie ORDER BY polozka.ID_polozky DESC |
||
xciza Profil |
#12 · Zasláno: 6. 6. 2011, 14:44:57
Tak jsem to nechal nakonec přes to pole.
Zjistil jsem, že v tabulce mezi jídlem a cenou je velké mezera-proto se ještě naposledy zeptám: Jak udělat cyklus, který by mě zajistil obarvení pozadí řádku ob jedno jídlo? |
||
panther Profil |
#13 · Zasláno: 6. 6. 2011, 15:12:48
xciza:
lze to pomocí CSS3 (nepodporováno všude), nth-child nebo PHPkem přiřadit každému druhému řádku třídu, třeba odd .
<style> td {background: red;} .odd td {background: green} </style> <?php $i = 0; while (...) { echo "<tr" . ($i % 2 == 0) ? ' class=odd' : '' . ">"; $i++; } ?> |
||
xciza Profil |
#14 · Zasláno: 6. 6. 2011, 16:18:07
panther:
Takže v mém případě, když bych to chtěl udělat PHPkem tak to bude vypadat nějak takhle: $i = 0; //Vepsání řádku: echo "<tr" . ($i % 2 == 0) ? 'class=odd' : '' ."><td id='objem'>".$jidlo["objem"]."</td><td>".$jidlo["nazev"]."</td><td id='cena'>".$jidlo["cena"]."</td></tr>"; $i++; //Aktualizace pomocné proměnné: /* Která po přičtení 1 v případě neshody snad nebude potřeba ale stejně ji sem dám */ $ID = $jidlo["ID_kategorie"]; |
||
Časová prodleva: 13 let
|
0