NOVINKA! E-learningové kurzy umělé inteligence. Nyní AI za nejlepší ceny. Zjisti více:
NOVINKA – Víkendový online kurz Software tester, který tě posune dál. Zjisti, jak na to!

Diskuze: Časově omezený formulář

V předchozím kvízu, Online test znalostí PHP, jsme si ověřili nabyté zkušenosti z kurzu.

Aktivity
Avatar
Zdenek
Člen
Avatar
Zdenek:15.1.2017 7:16

Ahojte,
prosím o radu jak na časově omezený formulář ? Potřeboval bych nastínit nějakou kostru zdrojového kódu jak nato.

Děkuji

 
Odpovědět
15.1.2017 7:16
Avatar
Jakub Žák
Člen
Avatar
Odpovídá na Zdenek
Jakub Žák:15.1.2017 10:25

Trošku to upřesni. Čeho chceš docílit, jak to aktuálně vypadá, pokud už máš formulář a jen ho chceš časově omezit apod.

Nahoru Odpovědět
15.1.2017 10:25
Kuba je ajťák. Buď jako Kuba.
Avatar
Jakub Žák
Člen
Avatar
Odpovídá na Zdenek
Jakub Žák:15.1.2017 10:28

Pokud ti jde jen jednoduše o to, aby formulář šel uložit jen v určitém časovém intervalu, tak nejjednodušší řešení je dát si do formuláře skryté políčko se zašifrovaným časem a po odeslání formuláře kontrolovat, jestli je čas po rozšifrování v povoleném časovém intervalu.

Nahoru Odpovědět
15.1.2017 10:28
Kuba je ajťák. Buď jako Kuba.
Avatar
Zdenek
Člen
Avatar
Zdenek:15.1.2017 12:00

Dělám si kvíz pro děti a chtěl bych, aby formulář byl po 40 min automaticky ukončen a vyhodnocen, pokud již nebude vyhodnocen dříve (pod 40 min) uživatelem pomocí tlačítka "vyhodnotit".

Děkuji za případnou radu

 
Nahoru Odpovědět
15.1.2017 12:00
Avatar

Člen
Avatar
:15.1.2017 12:13

Potřebuješ skryté políčko s ID, které si uložíš na serveru. To bude identifikovat konkrétní otevření formuláře a nést si informaci o tom, kdy byl formulář spuštěn. Po odeslání kontroluješ, zda byl čas přesáhnut a pokud bude delší, než 40 minut, tak formulář zahodíš (s rezervou několika vteřin, kvůli prodlevě v odeslání)
Dále by se hodilo přidat políčko s časem spuštění i do formuláře, aby jsi ho mohl vytáhnout javascriptem a podle toho uživateli zobrazit odpočet času.

 
Nahoru Odpovědět
15.1.2017 12:13
Avatar
Zdenek
Člen
Avatar
Odpovídá na
Zdenek:15.1.2017 13:19

Diky za nasmerovani. ID mam v databazi. Akorad si lamu hlavu jak to zapsat v PHP a Java Scriptu. Mam chabe zkusenosti :-( .

Editováno 15.1.2017 13:20
 
Nahoru Odpovědět
15.1.2017 13:19
Avatar
Jakub Žák
Člen
Avatar
Odpovídá na Zdenek
Jakub Žák:15.1.2017 16:41

Tak sem hoď, co už máš. :)

Nahoru Odpovědět
15.1.2017 16:41
Kuba je ajťák. Buď jako Kuba.
Avatar
Zdenek
Člen
Avatar
Zdenek:18.1.2017 16:16

Zdravím,
zkouším rozjet na localu tento odpočet, ale nějak se mi to nedaří. Odpočet se skládá ze dvou souborů odpocet.php a odpocet.js . Nějaká rada prosím, kde dělám chybu?

odpocet.php

<html>
    <BODY>
        <head>
            <title>neco</title>
            <link rel="stylesheet" type="text/css" href="pokus.css">
        </head>

        <form action="neco.php" method="post">

             <p id="odpocet" data-konec="12/24/2063 15:18:40" data-hlaska="Čas vypršel!" data-zbyva="Do odpočtu zbývá:"></p>
             <script>
                odpocet(document.getElementById('odpocet'));
            </script>

            <?php
                        ?>

            <!-- Tlačítko pro výpočet IQ -->
                        <input type="image" name="imageButton" id="imageButton" alt="..." src="images/ikona_spocitej Iq.jpg">
        </form>
    </BODY>
</html>

odpocet.js

var vterina = 1000;
var minuta = vterina * 60;
var hodina = minuta * 60;
var den = hodina * 24;
var rok = den * 365.24219;

var slova = {
    roku: ["rok", "roky", "let"],
    dnu: ["den", "dny", "dnů"],
    hodin: ["hodina", "hodiny", "hodin"],
    minut: ["minuta", "minuty", "minut"],
    vterin: ["vteřina", "vteřiny", "vteřin"]
};

function sklonovani(pocet, co) {
    if (pocet == 1) return slova[co][0];
    if (pocet < 5 && pocet > 0) return slova[co][1];
    return slova[co][2];
}

function odpocet(el) {
    var konec = new Date(el.getAttribute("data-konec"));
    var ted = new Date();
    var rozdil = konec - ted;
    if (rozdil < vterina) {
        el.innerHTML = el.getAttribute("data-hlaska");
        return;
    }
    var zbyva = {
        roku: Math.floor(rozdil / rok),
        dnu: Math.floor(rozdil % rok / den),
        hodin: Math.floor((rozdil % den) / hodina),
        minut: Math.floor((rozdil % hodina) / minuta),
        vterin: Math.floor((rozdil % minuta) / vterina)
    }

    var vypis = el.getAttribute("data-zbyva");
    for (co in zbyva) {
        var pocet = zbyva[co];
        if (pocet > 0) vypis += " " + pocet + " " + sklonovani(pocet, co);

    }

    el.innerHTML = vypis;
    setTimeout(function() {
      odpocet(el);
    }, vterina);
}
 
Nahoru Odpovědět
18.1.2017 16:16
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 8 zpráv z 8.