Chceš se vypracovat až k výdělku 160.000 Kč/měsíc? Důležité je začít. Staň se programátorem díky rekvalifikačnímu kurzu! Začni dnes!
Hledáme nové posily do ITnetwork týmu. Podívej se na volné pozice a přidej se do nejagilnější firmy na trhu - Více informací.

Kalendář

Jednoduchý kalendář v PHP s možností ukládání poznámek.

Databáze:

--
-- Struktura tabulky `calendar`
--
CREATE TABLE IF NOT EXISTS `calendar` (
  `event_id` int(11) unsigned NOT NULL AUTO_INCREMENT,
  `name` varchar(255) COLLATE utf8_czech_ci NOT NULL,
  `date` date NOT NULL,
  `description` text COLLATE utf8_czech_ci NOT NULL,
  PRIMARY KEY (`event_id`)
) ENGINE=InnoDB  DEFAULT CHARSET=utf8 COLLATE=utf8_czech_ci AUTO_INCREMENT=1 ;

Zdrojový kód:

České názvy měsíců:

$monthNames = array(1 => 'leden', 'únor', 'březen', 'duben', 'květen', 'červen', 'červenec', 'srpen', 'září', 'říjen', 'listopad', 'prosinec');

Výpis kalendářního měsíce:

// hlavička kalendáře
echo('
    <table id="calendar">
        <tr>
            <th colspan="7">' .
                // měsíc slovně -> první písmeno velké - bere i s diakritikou
                mb_convert_case($this->monthNames[$month], MB_CASE_TITLE, 'UTF-8') . ' ' . $year
        . '</th>
        </tr>
        <tr id="calendar-dayrow">
            <td>Po</td><td>Út</td><td>St</td><td>Čt</td><td>Pá</td><td>So</td><td>Ne</td>
        </tr>
        <tr>');

// počet dnů pro daný měsíc v roce
$daysInMonth = cal_days_in_month(CAL_GREGORIAN, $month, $year);

// zjištění začátku týdne
$weekDay = idate("w", mktime(0, 0, 0, $month, 1, $year));
if ($weekDay == 0) // začíná nedělí, ta je u nás však 7., 0. pozici vynecháme
    $weekDay = 7;

// vynecháme místo
for ($i = $weekDay; $i > 1; $i--)
    echo('<td>&nbsp;</td>');

// vypsání jednotlivých dnů
for ($day = 1; $day <= $daysInMonth; $day++)
{
    echo('<td');
    // pokud je aktuální měsíc a rok, označí se den -> lze pak zvýraznit pomocí css
    if (($day == $today) && ($month == idate('m')) && ($year == idate('Y')))
        echo(' id="calendar-today" ');
    echo('>');

    echo('<a href="?show=' . $year . '-' . $month . '-' . $day . '">' . $day . '</a>');

    // řádkování podle týdnů
    if (($weekDay % 7) == 0)
        echo('</tr><tr>');

    $weekDay++;
    if ($weekDay > 7)
        $weekDay = 1;
}

$previousMonth = ($month - 1) > 0 ? $month - 1 : 12;
$nextMonth = ($month % 12) + 1;

$previousYear = $previousMonth > $month ? $year - 1 : $year;
$nextYear = $nextMonth < $month ? $year + 1 : $year;

// navigace
echo('
        </tr>
        <tr>
            <td colspan="4">
                <a href="?date=' . $previousYear . '-' . $previousMonth . '">
                    ' . $this->monthNames[$previousMonth] . '
                </a>
            </td>
            <td colspan="4" align="right">
                <a href="?date=' . $nextYear . '-' . $nextMonth . '">
                    ' . $this->monthNames[$nextMonth] . '
                </a>
            </td>
        </tr>
    </table>
');

Přídání a výpis událostí k vybranému datu

// kontrola data
if (!checkdate($month, $day, $year))
{
    $year = idate('Y');
    $month = idate('m');
    $day = idate('d');
    echo('Datum není platné. Nastavuji dnešní.');
}

// přeformátování 2012-7-16 -> 2012-07-16
$date = date_create_from_format('Y-n-j', $year . '-' . $month . '-' . $day)->format('Y-m-d');

echo('Datum:' . $day . '. ' . $month . '. ' . $year);

$result = mysql_query('SELECT `event_id`, `name`
                        FROM `calendar`
                        WHERE `date` = "' . mysql_real_escape_string($date) . '"
                    ');
// vypsání existujících událostí k tomuto datu
while ($event = mysql_fetch_assoc($result))
{
    echo('<p>
            <a href="?edit=' . $event['event_id'] . '">' . $event['name'] . '</a>
            <a href="?delete=' . $event['event_id'] . '">( X )</a>
        </p>'
        );
}

echo('
    <form method="post">
        <input type="text" name="event_name" placeholder="Název údálosti" /><br />
        <input type="date" name="event_date" value="' . $date . '" /><br />
        <textarea name="event_description" placeholder="Popis události"></textarea><br />
        <input type="submit" name="add_event" value="Přidat" />
    </form>
');

Editace vybrané události

$result = mysql_query('SELECT * FROM `calendar`
                        WHERE `event_id` = ' . mysql_real_escape_string($eventId));

// vezme pole, které vrátí db -> { ['name'] => "Jméno události", ['date'] => "yyyy-mm-dd", ... }
// a nahraje je do proměnných -> $name = "Jméno události", $date = ...
extract(mysql_fetch_assoc($result));

echo('
    <form method="post">
        <input type="text" name="event_name" placeholder="Název údálosti" value="' . $name . '" /><br />
        <input type="date" name="event_date" value="' . $date . '" /><br />
        <textarea name="event_description" placeholder="Popis události">' . $description . '</textarea><br />
        <input type="hidden" name="event_id" value="' . $eventId . '" />
        <input type="submit" name="edit_event" value="Upravit" />
    </form>
');

Vkládání do db:

// načte z pole 2012-7-16 -> { [0] => 2012, [1] => 7, [2] => 16 } do daných proměnných v daném pořadí
list($year, $month, $day) = explode('-', $eventDate);
if (checkdate($month, $day, $year))
{
    // ošetření injekce
    $eventName = mysql_real_escape_string($eventName);
    $eventDate = mysql_real_escape_string($eventDate);
    $eventDescription = mysql_real_escape_string($eventDescription);

    mysql_query('INSERT INTO calendar(name, date, description)
                    VALUES("' . $eventName . '", "' . $eventDate . '", "' . $eventDescription . '")
                ');
}
else
    echo('Chybné datum!');

Aktualizace záznamu v db:

list($year, $month, $day) = explode('-', $eventDate);
if (checkdate($month, $day, $year))
{
    $eventId = mysql_real_escape_string($eventId);
    $eventName = mysql_real_escape_string($eventName);
    $eventDate = mysql_real_escape_string($eventDate);
    $eventDescription = mysql_real_escape_string($eventDescription);

    mysql_query('UPDATE `calendar`
                    SET `name` = "' . $eventName . '",
                        `date` = "' . $eventDate . '",
                        `description` = "' . $eventDescription . '"
                    WHERE `event_id` = ' . $eventId . '
                ');
    echo('Editováno!');
}
else
    echo('Chybné datum!');

Smazání záznamu z db:

mysql_query('DELETE FROM `calendar`
                WHERE `event_id` = ' . mysql_real_escape_string($eventId));
echo('Smazáno!');

Vyhledání brzkých událostí:

$result = mysql_query('SELECT `event_id`, `name`, DATE_FORMAT(`date`, "%e. %m. %Y") AS `date`
                        FROM `calendar`
                        WHERE `date` BETWEEN CURDATE() AND CURDATE() + INTERVAL 7 DAY
                        ORDER BY `date` ASC
                    ');

echo('Brzké události:');
while ($event = mysql_fetch_assoc($result))
{
    echo('<p>
            <a href="?edit=' . $event['event_id'] . '">
                ' . $event['date'] . ': ' . $event['name']. '
            </a>
        </p>');
}

Galerie


 

Stáhnout

Stažením následujícího souboru souhlasíš s licenčními podmínkami

Staženo 1138x (8.77 kB)
Aplikace je včetně zdrojových kódů v jazyce PHP

 

Všechny články v sekci
Zdrojákoviště pro OOP v PHP
Program pro vás napsal David Jančík
Avatar
Uživatelské hodnocení:
2 hlasů
Autor je vášnivý programátor. Nezná slovo "nelze", nebojí se zkoušet nepoznané a pronikat do nových technologií.
Aktivity