Autor Zpráva
Sheena
Profil *
Dobrý den,
potřebovala bych poradit.

Protože nevím, jak to popsat, uvedu nějaký příklad:

Mám na stránce obrázek (případně odkaz) a vedle toho číslo 10. to číslo se postupně zmenšuje (např. za hodinu už tam bude 7) ale po kliknutí na obrázek se zase vrátí na 10 a tohle pomalé "odpočítávání" začne znova.

Prosím, pokud někdo víte, jak to udělat, můžete mi sem napsat zdrojový kód příp. i s vysvětlením? Označila bych se v js a php za začátečníka. Sice se v tom jakž takž orientuju, ale radši si to nechám vysvětlit.

Předem děkuji za odpověď :)
Louka
Profil
Smím se zeptat, zda ta stránka bude pořád otevřená (stačí JS) nebo chceš i ukládání toho odpočtu, aby se "odpočítávalo" i když na té stránce nebudeš a přijdeš tam dejme tomu za 3 hodiny...?

Pakliže 1):
<script type="text/javascript">

var t = 10;
var tick = 1000*60*20;

function zmenaT() 
{
    t--;
    document.getElementById("cislo").innerHTML = t;
}

window.setInterval("zmenaT();", tick);

</script>

<img src="..." alt="..." onclick="javascript: t = 11; zmenaT();" /> <div id="cislo">10</div>


Nevím, jak moc to bude fungovat, nemám čas to testovat. Zkušenější kolegové poradí :).
Sheena
Profil *
Louka:
No potřebovala bych aby to fungovalo i když jí zavřu a přijdu třeba za hodinku, dvě (aby se to pořád odpočítávalo :) )
Sheena
Profil *
Louka:
Jinak script funguje bez problémů, ale jak říkám, potřebovala bych, aby to mělo 'pamatováka'. :)
Louka
Profil
Já to tušil :D...

PHP Cookie si nastuduj (google)...

Mě nenapadá nic lepšího než

<?php 

if (!$_COOKIE['odpocet_start'])
{
    // není-li cookie, uděláme ho (hned po příchodu na stránku)
    // => když není, musí to být první přístup (nebo někdo smazal cookie, ale tomu se bez DB nevyhneš)
    
    setcookie("odpocet_start", microtime()); // UNIXový čas, kdy byla přesně desítka
    Header("Location: $_SERVER['PHP_SELF']"); // snad refresh
}

else 
{
    $rozdil = microtime() - $_COOKIE['odpocet_start']; // snad rozdíl od desítky a teďka = kolik ms uběhlo od prvího spuštění
    
    $ticknuti = 0;
    while ( ($rozdil2=($rozdil-1000*20*60)) > 0 ) { $ticknuti++; }// kolikrát už se tiklo, a navíc v $rozdil2 by měl být zbývající čas do dalšího ...
    echo "<script type=\"text/javascript\">var tick_force = $rozdil2; var ticknuti_hotovo = $ticknuti;</script>"; // uložím do JS interval k dalšímu ticknutí a počet uběhlých
}

?>

<script type="text/javascript">

var t = 10;
var tick = 1000*60*20;

document.getElementById("cislo").innerHTML = (10-ticknuti_hotovo); // měl by updatovat číslo v divu hned po zahájení vypočteným číslem (odečte se počet uběhlých)

function zmenaT() 
{
    t--;
    tick = 1000*60*20; // tady změním interval zase na normální hodnotu
    document.getElementById("cislo").innerHTML = t;
    window.setTimeout("zmenaT();", tick);
}

window.setTimeout("zmenaT();", tick_force); // tick_force je proměnná vypsana přes PHP kde by mělo být počáteční hodnota do další změny čísla (snad)

</script>

<img src="..." alt="..." onclick="javascript: t = 11; zmenaT();" /> <div id="cislo">10</div>



// EDIT: logicky se ten soubor ted musí jmenovat *.php a musíš ho spouštět na serveru (local či jinde), ale není to klasická stránka co si pustíš doma jen tak v prohlížeči
Sheena
Profil *
Louka:

No teda ... to sem nečekala :D

pokusím se tím nějak prokousat a pochopit to.

Jinak snad nebude problém, že mám tu stránku na free hostingu (www.ic.cz) - php5 to prý podporuje.

A ještě jeden dotaz: dá se na to nějak odkázat, nebo to musí být vypsané na webu?

respektive jestli je to možné uložit zvlášť do souboru, a tam kde to má být na stránce pak dát jenom příslušný "odkaz".

něco jako když je javascript načtený pomocí <script src="neco_nekde_jinde.js"></script> :)
Louka
Profil
Sheena:
Taky jsem to nečekal.

Kousej, chápej, snad tam není moc chyb.

IC.cz problém není.

Odkázat? Dá, adresou :D. Vypsané na webu...
Jde ti o to aby když člověk zobrazí zdrojový kód, tak aby neviděl to <?php ... ?> předpokládám...? To se nezobrazí stejně, jen to co je v <script> a to neskryješ.
To co je ve <script> můžeš tahat <script src="bla.js"></script> ale je to zbytečnost!

Jestli ti jde o to, oddělit od toho PHP, tak ho ulož do externího souboru bla.php a pak napiš <?php include("bla.php"); ?> ale být tebou tak to nedělám (mám pocit že jak jsem to napsal (mám na mysli ten zdroj nahoře), tak by to nemuselo fungovat - tuším problém s $_SERVER['PHP_SELF'])

Závěr:
Zkus to a uvidíš co budeš chtít ještě vylepšovat, ale prozatím to nerozsekávej a nech to takhle, ať máš (doufejme) aspoň 1 stable verzi :D...
Nejsem PHP profík ve smyslu odpočítávadel a pamatovákem, tak neručím za funkčnost/efektivitu ani nic jinýho. Můžeš se modlit aby sem přišel nějakej borec a napsal lepší verzi :P...
Sheena
Profil *
Louka:

Já to "skovávání" dělám spíše z důvodu, že většinu těhle "blbinek navíc" mám na jedná stránce vícekrát, a mám to jako takovou menší kličku, jak se vyhnout chybám (lépe řečeno jak si pomoct s opravou chyb :D )

.. a také proto, že se sama nevyznám ve vlastním zdrojáku :D Přijde mi to rozškatulkované přehlednější :D
Sheena
Profil *
Louka:

A jestli ještě můžu mít takovej hodně hodně stupidní dotaz... ( :D )

Kam mám/můžu/nemůžu do toho tvého php zápisu něco dopsat?


Upřímně to je důvod, proč jsem nikdy nepochopila příklady v knížkách, nikdy nevím, co z toho mám opsat a co ne :D Potřebuju to vysvětlit trošku polopatě :D
Louka
Profil
Aha jo hele tohle te bude zajimat :D: ten kod kde se tvori cookie musi byt uplne nahore ve zdroji - i pred hlavickou a pred <html>...

Tzn kdyz to mas ve strance tak misto echo "..." napis $ret = "..." a pak primo v implenebtaci ve strance napis echo $ret - kapis to :P?

// php s cookie 

<html>
...
<?php echo $ret; ?>

<script> 
// ty funkce
</script>

</html>


Do toho ext scriptu to zkus dat tim include() ale myslim ze by se to muselo kapku poopravit (misto PHP SELF by tam muselo bejt neco jinyho, asi HTTP_HOST ale nejsem si jistej)

// EDIT: zkusil bych $_SERVER['REQUEST_URI']
Louka
Profil
No jde o to, co "neco" tam chces dopisovat :D...
Sheena
Profil *
Louka:

No teoreticky, když teď tenhle kód zkopíruju k sobě na web, odmažu co je ten oranžovej text za // a doplním ten obrázek, tak to má fungovat? :D

Protože mě to nefunguje, ale je dost možné, že to dělám blbě :D
Louka
Profil
Ne je taky dost mozny ze je to blbe napsany :D... hele zejtra to pustim u sebe a mrknu se na to - doufam ze to tolik nespecha...

Jako ani bys ten oranzovej mazat nemusela. Pro info: co ti to pise za chybu (jestli neco)?
Sheena
Profil *
Louka:

Jasně, nespěchá to, mám ve škole tejden prázdniny takže mám čas než to budu mít přinést (je to úkol do školy ... ne celý, většina byla v html a css, v tom se vyznám docela dost, ale v tomhle ne :D )

Tak chybu mi to nepíše, spíš mám bílou stránku (bohužel, s takovou chybou jsem se ještě nesetkala, takže bližší popis nemám :D)
Louka
Profil
Ok. Zitra. Mozna by pichnul link na ty stranky.

OT: Prazdniny ti zavidim, me uz skoncily.
Sheena
Profil *
jo, taky mě to napadlo :D no má to býr tady http://www.celtichorses.ic.cz/chairoi.html (respektive u ostatní 'koní' )

je to moje vlastní stránka, zakládala jsem to už nějak 2007. ve škole nám jenom řekly že během prázdnin máme něco udělat (nějakej rádoby projekt), prý si máme poradit (neřekly nic o tom, že se nesmíme zeptat :D ), no a já jsem se rozhodla obnovit svou stranou stránku. takže jsem si udělala layout (to je v podstatě jediný co umím :D ) a něco jsem sesmolila i v obsahu, ale moc ne no. A tohle by se mi docela hodilo - protože to nechci jenom do školy, když už to dělám tak bych to chtěla trošku funkčně a nechám si to, jestli mi rozumíš. už kvůly tomu lay-i to nebudu pak zase mazat. :D
Sheena
Profil *
jej - být, ostatních ... :D

u těch obrázků co tak úplně nefungujou dole :D
Louka
Profil
Zdarec, tohle by MĚLO fungovat...

<?php 
error_reporting(0);
if ( $_GET['restart'] == 1 ) 
{
	setcookie("odpocet_start", "", time()-3600);
	Header("Location: /");
}

if (!$_COOKIE['odpocet_start'])
{
    // není-li cookie, uděláme ho (hned po příchodu na stránku)
    // => když není, musí to být první přístup (nebo někdo smazal cookie, ale tomu se bez DB nevyhneš)
    
    setcookie("odpocet_start", microtime(true)); // UNIXový čas, kdy byla přesně desítka
    Header("Location: /"); // snad refresh
}

else 
{
    $rozdil = microtime(true) - $_COOKIE['odpocet_start']; // snad rozdíl od desítky a teďka = kolik ms uběhlo od prvího spuštění
    
    $ticknuti = 0;
    while ( ($rozdil2=($rozdil-=20*60)) > 0 ) { $ticknuti++; }// kolikrát už se tiklo, a navíc v $rozdil2 by měl být zbývající čas do dalšího ...
    $ret = (-1)*$rozdil2. ", $ticknuti"; // uložím do JS interval k dalšímu ticknutí a počet uběhlých
}

?>
		                  
<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN"> 
<HTML> 
 
  <HEAD> 
    <meta http-equiv="Content-Language" content="cs"> 
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8"> 
    <link href="favicon.png" rel="icon" type="image/png" /> 
    <link rel="stylesheet" href="csstab.css" type="text/css"> 
    <title>Celtic Horses</title> 
  </HEAD> 
 
<BODY BGCOLOR="#1A1A1A" > 

<script type="text/javascript">

var t = 10;
var tick = 1000*60*20;

function init(tick_force, hotovo) 
{                                      
		var x = document.getElementById('x'); alert(x);
		x.innerHTML = "<p>" + (t-hotovo) + "</p>";
		window.setTimeout("zmenaT();", tick_force*100);
}

function zmenaT() 
{
    t--;
    tick = 1000*60*20;
    document.getElementById('x').innerHTML = "<p>" + t + "</p>";
    
}

init(<?php echo $ret; ?>);
window.setInterval("zmenaT();", tick);

</script>

<CENTER> 
 
<br> 
 
<font face="Verdana" color="#B99400" size="2"><b>Chairoi Yuki</b></font> 
 
<br><br> 
 
<table style="float: center; width: 400; background: #2A2A2A; background-image: none; image-align: center; border: none; " > 
 
<tr> 
<td> 
<a href="#" onclick="javascript: window.location='index.php?restart=1';"><img src="chairoi.jpg" onmouseover="this.src = 'chairoi2.jpg';" onmouseout="this.src = 'chairoi.jpg';"  height="250" border="0" /></a> 
 
<td> 
<table style="float: center; text-align: center; image-align: center; border: none;"> 
                  <tr> 
                    <td> 
                    <p align="center"><font size="2">Plemeno</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2">Appaloosa<font></p> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                    <p align="center"><font size="2">Ročnik</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2">2008</font></p> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                    <p align="center"><font size="2">Otec</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2">Poker Dream<font></p> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                    <p align="center"><font size="2">Matka</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2">Fanny</font></p> 
                    </td> 
                </tr> 
                <tr> 
                    <td> 
                    <p align="center"><font size="2">Potomci</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2"></font></p> 
                    </td> 
                </tr> 
                <tr> 
                   <td> 
                    <p align="center"><font size="2">Celkem</font></p> 
                    </td> 
                    <td> 
                    <p align="center"><font color="#4B8700" size="2"><span id="x">10</span>.000kk</font></p> 
                    </td> 
                </tr> 
            </tbody> 
        </table> 
		</td> 
	</table> 
 
<br> 
 
<img border="0" onClick="alert('Hotovo')" src="kartac.png" width="25" hight="25" title="Čistit koně" > 
<img border="0" onClick="alert('Nakrmeno')" src="krmeni.png" width="25" hight="25" title="Nakrmit koně" > 
<img border="0" onClick="alert('Moc chutnalo')" src="pamlsek.png" width="25" hight="25" title="Pamlsek" > 
 
<BR><BR> 
Zaměřen na Reining
 
<BR><BR><BR><BR> 
 
<script type="text/javascript"> 
/* <![CDATA[ */
function showHidePage(pageName)
	{
	objekt=pageName.getElementsByTagName("DIV")[0];
	if (objekt.style.display=="block") {objekt.style.display="none";}
	else {objekt.style.display="block";}
	}
document.writeln("<style type=\"text/css\">.vnitrni{display:none;}</style>");
/* ]]> */ 
 
</script> 
 
<div onclick="showHidePage(this);"> 
<font face="Verdana" color="#B99400">Reining</font> 
<div class="vnitrni"> 
1. misto - Fast Western - Reining - On mi Own
</div></div> 
 
<br> 
 
<div onclick="showHidePage(this);"> 
<font face="Verdana" color="#B99400">Ostatni ... Oceněni</font> 
<div class="vnitrni"> 
4. misto - Venku i v zimě - Rainbow
</div> 
 
</CENTER> 
 
</BODY> 
</HTML>


Ale:
nechápu proč, selhává funkce getElementById() - jinak by to mělo jet v pohodě, ale prostě tam jak je alert(x) by to mělo vyhodit nějakou definici a on vyhodí null, takže pak nepřenastaví obsah toho pole.... nechápu to!

Závěr:
Přijdeš-li na to jak rozchodit getElementById() nebo půjde-li ti to rovnou, ten skript by měl jet v pohodě.

Když ho chceš pustit znova, klikni na obrázek :P.

// EDIT: Nahraď Header("Location: /"); => místo / tam bude název stránky co to pouští (chairoi.php,...)
Sheena
Profil *
Louka:

Jé, dík moc!!!

Hned to odzkouším, co to udělá. Ale v každém případě děkuju moc že si se s tim chtěl vůbec babrat :D

Určitě dám vědět, jak to jde :)
Sheena
Profil *
Tak nevím, co dělám blbě.

<?php
error_reporting(0);
if ( $_GET['restart'] == 1 )
{
setcookie("odpocet_start", "", time()-3600);
Header("Location: chairoi.php");
}

if (!$_COOKIE['odpocet_start'])
{

setcookie("odpocet_start", microtime(true));
Header("Location: chairoi.php");
}

else
{
$rozdil = microtime(true) - $_COOKIE['odpocet_start'];

$ticknuti = 0;
while ( ($rozdil2=($rozdil-=1*60)) > 0 ) { $ticknuti++; }
$ret = (-1)*$rozdil2. ", $ticknuti";
}

?>

<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01 Transitional//EN">
<HTML>

<HEAD>
<meta http-equiv="Content-Language" content="cs">
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<link href="favicon.png" rel="icon" type="image/png" />
<link rel="stylesheet" href="css.css" type="text/css">
<title>Celtic Horses</title>
</HEAD>

<BODY BGCOLOR="#1A1A1A" >

<script type="text/javascript">

var t = 100;
var tick = 1000*60*1;

function init(tick_force, hotovo)
{
var x = document.getElementById('cislo'); alert(x);
x.innerHTML = "<p>" + (t-hotovo) + "</p>";
window.setTimeout("zmenaT();", tick_force*100);
}

function zmenaT()
{
t--;
tick = 1000*60*1;
document.getElementById('cislo').innerHTML = "<p>" + t + "</p>";

}

init(<?php echo $ret; ?>);
window.setInterval("zmenaT();", tick);

</script>

<CENTER>

<br>

<font face="Verdana" color="#B99400" size="2"><b>Chairoi Yuki</b></font>

<br><br>

<table style="float: center; width: 400; background: #2A2A2A; background-image: none; image-align: center; border: none; " >

<tr>
<td>
<a href="http://9653122237r.rajce.idnes.cz/Chairoi_Yuki/" ><img src="chairoi.jpg" onmouseover="this.src = 'chairoi2.jpg';" onmouseout="this.src = 'chairoi.jpg';" height="250" border="0" /></a>

<td>
<table style="float: center; text-align: center; image-align: center; border: none;">
<tr>
<td>
<p align="center"><font size="2">Plemeno</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2">Appaloosa<font></p>
</td>
</tr>
<tr>
<td>
<p align="center"><font size="2">Ročnik</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2">2008</font></p>
</td>
</tr>
<tr>
<td>
<p align="center"><font size="2">Otec</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2">Poker Dream<font></p>
</td>
</tr>
<tr>
<td>
<p align="center"><font size="2">Matka</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2">Fanny</font></p>
</td>
</tr>
<tr>
<td>
<p align="center"><font size="2">Potomci</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2"></font></p>
</td>
</tr>
<tr>
<td>
<p align="center"><font size="2">Celkem</font></p>
</td>
<td>
<p align="center"><font color="#4B8700" size="2">10.000kk</font></p>
</td>
</tr>
</tbody>
</table>
</td>
</table>

<br>

<table style="float: center; background-image: none; image-align: center; border: none; width: 25%;" >
<tr>
<td>
<font size="2" color="white" ><span id="cislo" >100</span></font>
</td>
<td>
%
</td>
<td>
<img src="http://celtichorses.ic.cz/sklad/krmeni.png" border="0" width="25" title="Nakrmit koně" onclick="javascript: window.location='index.php?restart=1';" />
</td>
</tr>
</table>

<BR><BR><BR><BR>

<script type="text/javascript">
/* <![CDATA[ */
function showHidePage(pageName)
{
objekt=pageName.getElementsByTagName("DIV")[0];
if (objekt.style.display=="block") {objekt.style.display="none";}
else {objekt.style.display="block";}
}
document.writeln("<style type=\"text/css\">.vnitrni{display:none;}</style>");
/* ]]> */

</script>

<div onclick="showHidePage(this);">
<font face="Verdana" color="#B99400">Reining</font>
<div class="vnitrni">
1. misto - Fast Western - Reining - On mi Own
</div></div>

<br>

<div onclick="showHidePage(this);">
<font face="Verdana" color="#B99400">Ostatni ... Oceněni</font>
<div class="vnitrni">
4. misto - Venku i v zimě - Rainbow
</div></div>

</CENTER>

</BODY>
</HTML>

zkusila jsem to a prostě mi to nějak nejde. ta stránka je uložená jako chairoi.php (celtichorses.ic.cz/chairoi.php) - takže 'formát' by měl být v pohodě.

prošku jsem pozměnila hodnoty a "místa", neudělala jsem tam něco blbě?

Ještě se v tom zkusím povrtat, nenapadá tě, proč to nejde? Není toho na té stránce třeba i moc?
Sheena
Profil *
Když jsem to alert smazala úplně, tak to (logicky) nevyhazovalo vůbec nic :D

Vaše odpověď


Prosím používejte diakritiku a interpunkci.

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