Autor Zpráva
Jan Žák
Profil
Dobrý den všem,

rád bych vás požádal o pomoc. Snažím se vytvořit menší aplikaci pro sledování času, kde mám dvě tlačítka pro Příchod a Odchod zaměstnance. Potřeboval bych docílit, aby když kliknu na tlačítko Příchod, zaznamenal se údaj do db (to mi funguje) a tlačítko se stalo neaktivním. To samé bych rád i u tlačítka Odchod. Potřeboval bych docílit toho, aby po stisku tlačítka a záznamu do db se tlačítko pro daný den stalo neaktivní.
Tabulka:
CREATE TABLE `attendance` (
  `id` int(11) NOT NULL,
  `employye_id` int(11) UNSIGNED DEFAULT NULL,
  `date` date DEFAULT NULL,
  `clock_in` time DEFAULT NULL,
  `clock_out` time DEFAULT NULL,
  `note` varchar(255) COLLATE utf8_unicode_ci DEFAULT NULL
) ENGINE=InnoDB DEFAULT CHARSET=utf8 COLLATE=utf8_unicode_ci;

Skript kterým zatím zobrazuji tlačítka:
    <div class="semi-widget row-fluid">
        <?php
        $result = mysqli_query($con, "SELECT e.id, a.clock_in, a.clock_out FROM employees AS e, attendance AS a WHERE e.id = '".$_SESSION['id']."'") or die ("Unable to select data because: ".mysqli_error());
    $row = mysqli_fetch_array($result);

    if ($row['clock_out'] == null && $row['clock_in'] !==  null) {
    ?>
      <div class="span6">
        <form action="../attendance/attendance-widget-process.php" method="post">
          <input type="hidden" name="action" value="clockIn">
          <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
          <input type="submit" class="btn btn-large btn-danger btn-block" value="Příchod">
        </form>
      </div>
    <?php
    } else { 
    ?>
      <div class="span6">
        <form action="../attendance/attendance-widget-process.php" method="post">
          <input type="hidden" name="action" value="clockOut">
          <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
          <input type="submit" class="btn btn-large btn-success btn-block" value="Odchod">
        </form>
      </div>
        <?php
    }
    ?>
    </div>

Děkuji za pomoc :)
Kajman
Profil
V dotaze přidejte podmínku pro spojení tabulek employees a attendance. Přidejte i
order by a.id desc limit 1
abyste načetl poslední záznam daného uživatele.

Popřemýšlejte, zda nebude lepší v clock_in a clock_out ukládat datetime, aby to fungovalo dobře i přes půlnoc. Když tam budete ukládat časy v gtm (nebo timestamp), tak to bude navíc fungovat dobře i přes chvíle, kdy se měnil čas na letní a zpět.

Osobně bych tam dal podmínku, že navíc hledám jen řádky, kde není nastavený odchod a příchod je ten samý den (nebo mladší 12 či 24 hodin, pokud to upravíte).

Ošetřete stav, kdy to nevrátí žádný řádek.
Jan Žák
Profil
Kajman:
Děkuji moc za odpověď, pokusil jsem se udělat pár změn, ale stále se mi nedaří, asi jak do toho delší dobu koukám :) mohl by jste mi poradit, jak přesně vytvořit podmínku s řádkem kde není odchod? Děkuji moc za Váš čas.

    <div class="semi-widget row-fluid">
        <?php
        $result = mysqli_query($con, "SELECT e.id, a.clock_in, a.clock_out 
                                  FROM employees AS e, attendance AS a 
                                  WHERE e.id = '".$_SESSION['id']."' AND e.id = a.employye_id 
                                  ORDER BY a.id DESC LIMIT 1") or die ("Unable to select data because: ".mysqli_error($con));
    $row = mysqli_fetch_array($result);

    if ($row['clock_out'] == '00:00:00' && $row['clock_in'] !==  '00:00:00') {
    ?>
      <div class="span6">
        <form action="../attendance/attendance-widget-process.php" method="post">
          <input type="hidden" name="action" value="clockIn">
          <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
          <input type="submit" class="btn btn-large btn-danger btn-block" value="Příchod">
        </form>
      </div>
    <?php
    } else { 
    ?>
      <div class="span6">
        <form action="../attendance/attendance-widget-process.php" method="post">
          <input type="hidden" name="action" value="clockOut">
          <input type="hidden" name="id" value="<?php echo $row['id']; ?>">
          <input type="submit" class="btn btn-large btn-success btn-block" value="Odchod">
        </form>
      </div>
        <?php
    }
    ?>
    </div>
Keeehi
Profil
Myslím, že nějak takto by to mohlo vypadat.
    <div class="semi-widget row-fluid">
    <?php
    $result = mysqli_query($con, "SELECT `clock_in`, `clock_out` 
    FROM `attendance`
    WHERE `employye_id` = '".$_SESSION['id']."'
    ORDER BY `id` DESC
    LIMIT 1")
    or die ("Unable to select data because: ".mysqli_error($con));

    $row = mysqli_fetch_array($result);
    ?>
      <div class="span6">
        <form action="../attendance/attendance-widget-process.php" method="post">
          <input type="hidden" name="action" value="<?php echo (!$row || $row['clock_out']) ? 'clockIn' : 'clockOut'; ?>">
          <input type="hidden" name="id" value="<?php echo $_SESSION['id']; ?>">
          <input type="submit" class="btn btn-large btn-danger btn-block" value="<?php echo (!$row || $row['clock_out']) ? 'Příchod' : 'Odchod'; ?>">
        </form>
      </div>
    </div>

Zaměstnanec se píše employee.
Jan Žák
Profil
Zdravím, vyzkoušel jsem Váš kód, tlačítko zobrazuje Příchod, když tedy příchod provedu, data se uloží, ale tlačítko na odchod se nezmění. Jo a díky moc za upozornění na chybu, už jsem to opravil.
Keeehi
Profil
Jan Žák:
Jak vypadá řádek v databázi poté, co se uloží záznam o příchodu?
Jan Žák
Profil
Zde je aktuální výpis z tabulky:
INSERT INTO `attendance` (`id`, `employee_id`, `date`, `clock_in`, `clock_out`, `note`) VALUES
(1, 4, '2017-06-16', '05:40:00', '14:34:42', NULL),
(2, 4, '2017-06-17', '05:33:12', '14:37:00', NULL),
(3, 4, '2017-06-18', '05:43:00', '14:13:00', NULL),
(4, 4, '2017-06-19', '06:00:00', '14:08:00', NULL),
(5, 4, '2017-06-20', '05:16:40', '14:17:13', NULL),
(6, 4, '2017-06-22', '08:55:21', '00:00:00', NULL);
COMMIT;
Kajman
Profil
Na řádku 14 a 16 zkuste ošetřit ty nuly.
(!$row || ($row['clock_out'] && $row['clock_out']!='00:00:00'))

Nebo při insertu vkládejte do clock_out null hodnotu a ne prázdný řetězec.
Jan Žák
Profil
Kajman, Keeehi:
Děkuji Vám všem za pomoc, nakonec jsem zvolil pro sloupec clock_out null hodnotu. Vše nyní funguje jak má, ještě asi ošetřím tlačítko příchod, když je v aktuální den, již příchod zaznamenán. Hezký den.

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