| 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: 14 let
|
|||
0