Autor Zpráva
xciza
Profil
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 *
Ž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
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
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
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
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
xciza:
2) máš chybu v MySQL dotazu, vypiš si mysql_error().
xciza
Profil
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
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
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 *
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
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
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
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"];

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm:

0