Klok maken in PHP

Pagina: 1
Acties:

Vraag


Acties:
  • 0 Henk 'm!

  • sopzpivo
  • Registratie: Juli 2011
  • Laatst online: 19-04-2021
Beste medetweakers,

Om mijn PHP-skils te verbeteren heb ik vanmiddag geprobeert een klok te maken in PHP. Hierbij is het de bedoeling dat je bij de begin-pagina een bepaalde tijd kan kiezen. Als je op een knop drukt wordt je doorgeleid naar de daadwerkelijke klok.

Dit heb ik inmiddels werkend gekregen. Ik zit nu alleen al een tijdje te kijken waar ik de code kwijtkan.
session_destroy();
session_unset();
Dit heb ik werkend gekregen door dit onderaan de "klok" pagina te zetten. Echter moet deze pagina iedere seconde refreshen is de session na een seconde natuurlijk weg.

Ter info hieronder mijn huidige code.

begin-pagina:
<html>
<head>
<title>Het is een fucking klok</title>
</head>
<body>
<?php
session_start();
if (isset($_GET['pauzetijd'])) {
if (empty($_SESSION['pauzetijd'])){
$_SESSION['pauzetijd'] = $_GET["pauzetijd"];
}
Header( "Location: klok.php" );
}
if (isset($_GET['submit'])) {
}

?>
<div class="tijd_instellen">
<form action="" method="get">
<table>
<tr>
<th>Pauzetijd</th>
<td><input type="time" name="pauzetijd"></td>
</tr>
<tr>
<td>
<input type="submit" value="Ga naar de klok" name="submit">
</td>
</tr>
</table>
</form>
</div>

</body>
</html>
Klok-pagina:
<html>
<head>
<title>Nu dan echt de fucking klok</title>
<meta http-equiv="refresh" content="1">
<link rel="stylesheet" type="text/css" href="mijnfuckingstijl.css">
</head>
<body>
<div class="tijd">

<?php
date_default_timezone_set('Europe/Amsterdam');
echo date('Y-m-d');
echo "<br><h1>";
echo date("H:i:s");
echo "</h1>"
?>
</div>
<div class="ingestelde_tijd">
<?php
session_start();
echo $_SESSION['pauzetijd'];
session_destroy();
session_unset();
?>
</div>
</body>
</html>
Alvast bedankt voor jullie hulp.

Alle reacties


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Aan je voorbeeldcode te zien heb je die session helemaal niet nodig en kun je gewoon het formulier posten en de waarden uitlezen uit je super globals.

Verder: session_start() en header() hoor je niet uit te voeren als je al output hebt op je pagina.

Acties:
  • +1 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11-10 19:53

Ventieldopje

I'm not your pal, mate!

Begin is met te stoppen met telkens PHP code tussen de body tags te schrijven. Op de begin pagina heb je niks geen HTML output en hoef je dus ook geen HTML te schrijven, de pagina is puur PHP.

Bovendien zoals Cartman zegt mag je _nooit_ output geven en daarna een session_start() of header() aanroepen omdat de headers dan al verzonden zijn naar je browser.

code:
1
date_default_timezone_set('Europe/Amsterdam');

Dit hoor je in te stellen in je php.ini en niet in de code.

code:
1
2
session_destroy();
session_unset();

Waarom vernietig je je sessie weer? Je kan gewoon de sessie variabelen aanpassen, daarvoor hoef je niet opnieuw een sessie te starten.

Het lijkt mij niet onverstandig om nog eens terug naar de basis te gaan (werken met variabelen en functies etc.). Veel basis dingetjes heb je nog niet onder de knie.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ventieldopje schreef op woensdag 01 juni 2016 @ 22:10:
code:
1
date_default_timezone_set('Europe/Amsterdam');

Dit hoor je in te stellen in je php.ini en niet in de code.
Mwa, soms heb je geen controle over je php.ini en is t juist goed die instelling zelf te doen zodat je niet afhankelijk bent van je hostingpartij.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
Ventieldopje schreef op woensdag 01 juni 2016 @ 22:10:
code:
1
date_default_timezone_set('Europe/Amsterdam');

Dit hoor je in te stellen in je php.ini en niet in de code.
En wat als je een andere timezone wilt hebben?

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11-10 19:53

Ventieldopje

I'm not your pal, mate!

DJMaze schreef op donderdag 02 juni 2016 @ 00:58:
[...]

En wat als je een andere timezone wilt hebben?
Cartman! schreef op woensdag 01 juni 2016 @ 22:24:
[...]

Mwa, soms heb je geen controle over je php.ini en is t juist goed die instelling zelf te doen zodat je niet afhankelijk bent van je hostingpartij.
De functie overschrijft de default timezone, iets wat niet nodig is aangezien je de timezone alleen wil gebruiken voor je weer te geven datum. Bij het maken van de datum kun je ook de timezone aangeven, die geldt dan alleen voor die instantie.

Zie ook date_create in de PHP documentatie. Het gaat daarbij om het 2e argument.

offtopic:
Als je iets verder bent met de basis van PHP is het mogelijk eens de moeite waard om te kijken naar andere date/time libraries als Carbon welke het werken met datum en tijd een stuk makkelijker maken. Vooral met meer complexe situaties is dit een uitkomst.

[ Voor 15% gewijzigd door Ventieldopje op 02-06-2016 01:10 ]

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • sopzpivo
  • Registratie: Juli 2011
  • Laatst online: 19-04-2021
DJMaze schreef op donderdag 02 juni 2016 @ 00:58:
[...]

En wat als je een andere timezone wilt hebben?
Had ik inderdaad ook al gemerkt. Maar anders kreeg ik een error dat ik niet mijn tijdzone aangegeven heb.

Acties:
  • 0 Henk 'm!

  • sopzpivo
  • Registratie: Juli 2011
  • Laatst online: 19-04-2021
Ventieldopje schreef op woensdag 01 juni 2016 @ 22:10:
Begin is met te stoppen met telkens PHP code tussen de body tags te schrijven. Op de begin pagina heb je niks geen HTML output en hoef je dus ook geen HTML te schrijven, de pagina is puur PHP.

Bovendien zoals Cartman zegt mag je _nooit_ output geven en daarna een session_start() of header() aanroepen omdat de headers dan al verzonden zijn naar je browser.

code:
1
date_default_timezone_set('Europe/Amsterdam');

Dit hoor je in te stellen in je php.ini en niet in de code.

code:
1
2
session_destroy();
session_unset();

Waarom vernietig je je sessie weer? Je kan gewoon de sessie variabelen aanpassen, daarvoor hoef je niet opnieuw een sessie te starten.

Het lijkt mij niet onverstandig om nog eens terug naar de basis te gaan (werken met variabelen en functies etc.). Veel basis dingetjes heb je nog niet onder de knie.
Ik wilde mijn sessie vernietigen omdat anders steeds de als eerst ingestelde tijd terugkwam als je later een andere tijd instelde. Dit is zeg maar een beetje het probleem waar ik mee zit.

Acties:
  • 0 Henk 'm!

  • DJMaze
  • Registratie: Juni 2002
  • Niet online
sopzpivo schreef op donderdag 02 juni 2016 @ 10:28:
Had ik inderdaad ook al gemerkt. Maar anders kreeg ik een error dat ik niet mijn tijdzone aangegeven heb.
Dan moet je dus precies doen wat ventieldopje zei over php.ini, of anders je hosting partij inlichten dat de server een php upgrade foutje heeft.

Maak je niet druk, dat doet de compressor maar


Acties:
  • 0 Henk 'm!

  • sopzpivo
  • Registratie: Juli 2011
  • Laatst online: 19-04-2021
DJMaze schreef op donderdag 02 juni 2016 @ 11:20:
[...]

Dan moet je dus precies doen wat ventieldopje zei over php.ini, of anders je hosting partij inlichten dat de server een php upgrade foutje heeft.
Ik had hem op mijn localhost staan.

Acties:
  • 0 Henk 'm!

  • Castor385
  • Registratie: Mei 2005
  • Laatst online: 11-10 20:54
Ik begrijp niet zo goed waar je die pauzetijd in je formulier voor wil gebruiken.

misschien dat je de meta tag wil aanpassen:

PHP:
1
<meta http-equiv="refresh" content="<?php echo $_GET['pauzetijd']; ?>">



Hoewel ik het zelf verschrikkelijk vind om die php tags tussen de html te gebruiken, maar goed dat doet er in principe niet toe.


Je kan ook direct het formulier naar je klok script laten linken

HTML:
1
<form action="klok.php" method="GET">

[ Voor 16% gewijzigd door Castor385 op 02-06-2016 13:30 ]

Study everything, You'll find something you can use


Acties:
  • 0 Henk 'm!

Verwijderd

[b]Ventieldopje schreef op donderdag 02 juni 2016 @ 01:09:
De functie overschrijft de default timezone, iets wat niet nodig is aangezien je de timezone alleen wil gebruiken voor je weer te geven datum. Bij het maken van de datum kun je ook de timezone aangeven, die geldt dan alleen voor die instantie.
Hoe je het oplost is afhankelijk van de situatie, dus er is geen 'beste' oplossing.
sopzpivo schreef op donderdag 02 juni 2016 @ 10:30:
Ik wilde mijn sessie vernietigen omdat anders steeds de als eerst ingestelde tijd terugkwam als je later een andere tijd instelde. Dit is zeg maar een beetje het probleem waar ik mee zit.
Dat komt omdat je op je beginpagina pauzetijd alleen maar een waarde geeft als 'ie die nog niet heeft. Als je dus de regel met "if (empty($_SESSION['pauzetijd']))" weghaalt zou het wel moeten werken.

Acties:
  • +1 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Ventieldopje schreef op donderdag 02 juni 2016 @ 01:09:
De functie overschrijft de default timezone, iets wat niet nodig is aangezien je de timezone alleen wil gebruiken voor je weer te geven datum. Bij het maken van de datum kun je ook de timezone aangeven, die geldt dan alleen voor die instantie.

Zie ook date_create in de PHP documentatie. Het gaat daarbij om het 2e argument.
Ik ben bekend met wat het doet, daarom zou ik juist globaal voor je app de timezone instellen wat meestal voldoende is ipv bij elke keer dat je n datetime object gaat maken je timezone gaat opgeven.

Acties:
  • 0 Henk 'm!

  • Ventieldopje
  • Registratie: December 2005
  • Laatst online: 11-10 19:53

Ventieldopje

I'm not your pal, mate!

Cartman! schreef op donderdag 02 juni 2016 @ 20:05:
[...]

Ik ben bekend met wat het doet, daarom zou ik juist globaal voor je app de timezone instellen wat meestal voldoende is ipv bij elke keer dat je n datetime object gaat maken je timezone gaat opgeven.
Dat kan, maar dat gaat imho al verder dan de basis en ga je meer richting OOP omdat die begin pagina altijd geladen moet worden. In dit geval gebeurt dat niet en zou je in beide bestanden de timezone in moeten stellen.

Makkelijk: vergeet de tijdzone, stel deze gewoon in via php.ini
Iets moeiljiker: gebruik de 2e parameter voor de tijdzone
Nog iets moeilijker: gebruik een library als Carbon
Moeilijk: ga object oriented werken en maak gebruik van een applicatie bootstrap die dit soort dingen eenmalig voor de hele applicatie instelt.

Maar goed, dan gaan we wel erg offtopic. Welke keuze er gemaakt wordt maakt mij niet uit maar het is belangrijk om te weten wat je opties zijn.

www.maartendeboer.net
1D X | 5Ds | Zeiss Milvus 25, 50, 85 f/1.4 | Zeiss Otus 55 f/1.4 | Canon 200 f/1.8 | Canon 200 f/2 | Canon 300 f/2.8


Acties:
  • 0 Henk 'm!

  • Cartman!
  • Registratie: April 2000
  • Niet online
Bij date_create moet je ook al met een DateTimeZone object werken als je een timezone wil gebruiken dus imo is het simpeler om een enkele file bootstrap.php oid te hebben die je in elke pagina include met daarin je date_default_timezone_set() en je session_start(). Ik zou dat als optie "Super makkelijk" zien want het is portable en je instelling in php.ini boeit niet.

offtopic:
Zelf zou ik overigens gewoon Carbon gebruiken maar dat is nog niet binnen het niveau van de TS.
Pagina: 1