Autor Zpráva
Folly
Profil
Zdravím, chtěl bych vás poprosit o radu. Nejprve vám sdělím, co je mým cílem: chtěl bych mít kalendář (viz obrázek odkaz). Tento kalendář jsem si také za použití MySQL udělal. Jak můžete vidět z obrázku tabulka s celým měsícem únorem se jmenuje m2 a obsahuje sloupce pro jednotlive dny: pro pondeli: m2_pondeli, pro utery: m2_utery atd... Kalendář jsem si vytvořil, ale nejdou mi bohužel vypsat jednotlivé dny (viz obrázek odkaz). V čem je můj problém? Místo jednotlivých čísel dnů se mi vypisuje název sloupce, ve které je číslo právě schováno. Já bych potřeboval tento název sloupce nastavit jako název proměnné, která by mi už číslo dne vrátila, jenže bohužel nevím jak mám nastavit název proměnné, který by se skládal z více proměnných, které obsahují textové řetězce a když by se všechny spojili vznikl by název proměnné.
Přikládám kód:
<table class="kalendar" cellpadding="0" cellspacing="2">
    <tr>
      <td class="zahlavi" colspan="3">« 
      <?php
        echo cesky_mesic(date("n")) . "\n";
      ?>
      2011 <a href="rezervace.php?page=cal&month=<?php echo $_GET['month']+1; ?>">»</a></td>
      <td class="zahlavi" colspan="4">
        <?php
            SetLocale(LC_ALL, "Czech");
            $den_v_tydnu = StrFTime("%A", Time());
            date_default_timezone_set('Europe/Prague');
            echo 'Dnes je ' . $den_v_tydnu . ' ' .date('j. n. Y');
        ?>
      </td>
    </tr>
    <tr>
      <td class="header">Po</td>
      <td class="header">Út</td>
      <td class="header">St</td>
      <td class="header">Et</td>
      <td class="header">Pá</td>
      <td class="header">So</td>
      <td class="header">Ne</td>
    </tr>
    <?php
      // Nactu informace
      $nazev_tabulky = 'm'.$_GET['month'];
      $dotaz = 'SELECT * FROM '.$nazev_tabulky;
      $vysledky = mysql_query($dotaz, $db) or die(mysql_error($db));
      
      // Vypis zvolenych sloupcu z databaze
      $po = "pondeli";
      $podtrzitko = "_";
            
      while ($row = mysql_fetch_assoc($vysledky))
      {
        extract($row);
        echo '<tr>';
        if ($nazev_tabulky.$pod.$po != NULL)
        {
          echo "<td class=\"day\">".$nazev_tabulky.$podtrzitko.$po."</td>";
        }
        else
        {
          echo '<td class=\'empty\'></td>';
        }
Tori
Profil
// Když vynecháte volání extract(), můžete si poskládat index pole:
echo $row["$nazev_tabulky$podtrzitko$po"];
// Anebo i s extract:
echo ${"$nazev_tabulky$podtrzitko$po"};
Funkci extract() bych asi sama nepoužila, protože by se mi nechtělo míchat dohromady globální proměnné a data z DB, ale budiž.
Mimo dotaz:
Odkud se bere proměnná $pod (ř.40)? Opravdu názvy sloupců obsahují i název tabulky?

edit:
Koukněte taky na tohle vlákno. Není potřeba číst kalendář z DB.
petr 6
Profil
Folly:
Je nějaký zásadní důvod, proč vůbec údaje o dnech v týdnu ukládáš do databáze (navíc takovýmto způsobem)?
PHP ví, jaký den v týdnu připadá na které datum (od roku 1970 do 2038), viz funkci date.
Folly
Profil
petr 6:
Žádný zásadní důvod, proč jsem používal databázi kalendář, ve které bych musel mít tabulky jednotlivých měsíců nemám. Důvod byl jedinný a to, že se v PHP a MySQL pohybuju od středy, tím pádem ještě nejsem tak zběhlý a netroufl jsem si za pomoci funkce date, o které jsem věděl, že existuje tento kalendář vytvořit, protože jsem přesně nevěděl jak bych to jen za pomoci PHPka a fuknce date zapsal.
Tori:
Moc děkuju za tvou odpověď, velmi mi pomohla. Kalendář už frčí jen za pomoci PHP, bez zbytečné databáze - vytvořil jsem ho podle stránky v odkazu s menšími uprávami. Jinak i ten kousek kódu, který si poslala mi pomohl, nevěděl jsem pořádně, jak se funkce extract() zbavit - teď už vím. A i název proměnné z hodnot jiných proměnných se mi třeba někdy do budoucna bude hodit a už budu vědět jak na to.
Každopádně velké díky Vám oběma.
petr 6
Profil
Folly:
Když nejsi tak zběhlý v PHP ani MySQL, tak jsi tím spíš měl zvolit tu jednodušší možnost, ve které použiješ jen PHP ;-)

Vaše odpověď

Mohlo by se hodit

Odkud se sem odkazuje


Prosím používejte diakritiku a interpunkci.

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