PHP Session en Progress Tracker

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Samet Atar

Samet Atar

31/03/2018 03:19:05
Quote Anchor link
Beste lezer,

Ik wil graag PHP Session leren. Hierbij ben ik op een Wordpress website met een plugin bezig genaamd "Bookly"
Dit is een afspraak software systeem met een aantal stappen. Plugin is voorzien met een uitgebreid backend.

Stappen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
<?php
namespace Bookly\Frontend\Modules\Booking\Lib;

class Steps
{
    const SERVICE = 1;
    const EXTRAS  = 2;
    const TIME    = 3;
    const REPEAT  = 4;
    const CART    = 5;
    const DETAILS = 6;
    const PAYMENT = 7;
    const DONE    = 8;
}


// Progress gaat als volgt:

[code]<?php if ( ! defined( 'ABSPATH' ) ) exit; // Exit if accessed directly
    $i = 1;
?>

<div class="bookly-progress-tracker bookly-table">
    <?php if ( $skip_service_step == false ) : ?>
    <div <?php if ( $step >= 1 ) : ?>class="active"<?php endif ?>>
        <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_service' ) ?>
        <div class=step></div>
    </div>
    <?php endif ?>
    <?php if ( \Bookly\Lib\Config::serviceExtrasEnabled() ) : ?>
        <div <?php if ( $step >= 2 ) : ?>class="active"<?php endif ?>>
            <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_extras' ) ?>
            <div class=step></div>
        </div>
    <?php endif ?>
    <div <?php if ( $step >= 3 ) : ?>class="active"<?php endif ?>>
        <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_time' ) ?>
        <div class=step></div>
    </div>
    <?php if ( \Bookly\Lib\Config::recurringAppointmentsEnabled() ) : ?>
        <div <?php if ( $step >= 4 ) : ?>class="active"<?php endif ?>>
            <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_repeat' ) ?>
            <div class=step></div>
        </div>
    <?php endif ?>
    <?php if ( $show_cart ) : ?>
        <div <?php if ( $step >= 5 ) : ?>class="active"<?php endif ?>>
            <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_cart' ) ?>
            <div class=step></div>
        </div>
    <?php endif ?>
    <div <?php if ( $step >= 6 ) : ?>class="active"<?php endif ?>>
        <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_details' ) ?>
        <div class=step></div>
    </div>
    <?php if ( $payment_disabled == false ) : ?>
        <div <?php if ( $step >= 7 ) : ?>class="active"<?php endif ?>>
            <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_payment' ) ?>
            <div class=step></div>
        </div>
    <?php endif ?>
    <div <?php if ( $step >= 8 ) : ?>class="active"<?php endif ?>>
        <?php echo $i ++ . '. ' . \Bookly\Lib\Utils\Common::getTranslatedOption( 'bookly_l10n_step_done' ) ?>
        <div class=step></div>
    </div>
</div>
?>



Ik wil graag weten hoe STAP 3 overgeslagen kan worden. Dus dat vanaf stap 2 direct stap 4 komt. Ik wil het graag zelf doen en zo dus leren hoe session precies werkt. Kan iemand mij uitleggen hoe dit precies werkt?

Hier kun je kijken over welk plugin ik het heb: https://www.booking-wp-plugin.com/demo/1/
Gewijzigd op 31/03/2018 03:26:09 door Samet Atar
 
PHP hulp

PHP hulp

22/12/2024 18:54:43
 
- Ariën  -
Beheerder

- Ariën -

31/03/2018 08:23:46
Quote Anchor link
Dan zou ik even met de maker babbelen. Je kan een add-on wel vrolijk aanpassen, maar als deze een upgrade krijgt, ben je terug bij af.

Als je dit toch wilt doen kan je die stap uit je je HTML-code halen en opnieuw de nummering toepassen. Of het werkt is een tweede afhankelijk van de afhandeling.
Gewijzigd op 31/03/2018 08:33:37 door - Ariën -
 
Frank Nietbelangrijk

Frank Nietbelangrijk

31/03/2018 08:41:53
Quote Anchor link
PHP sessions bieden een mogelijkheid om voor elke 'gebruiker' apart variabelen te behouden voor een middellange periode.

Bovenstaande regel legt het heel erg kort uit en is bovendien niet helemaal juist, daarom nog wat aanvullingen:

Als eerste is het belangrijk om te weten in welke volgorde dingen gebeuren als iemand op de wereld een php webpagina opvraagt door een bepaalde url in te typen in zijn browser. Het komt ongeveer op het volgende neer:

1. een mens typt een URL in een browser en drukt op enter
2. browser verstuurt een verzoek (request) naar een webserver ergens op onze planeet
3. de webserver ziet dat het om een php pagina gaat en start het php script
4. de webserver wacht af tot het php script beëindigd wordt.
5, de output van het php script (bijv een HTML pagina) wordt teruggestuurd naar de browser (response)
6. de browser detecteert wat voor inhoud de webserver teruggestuurd heeft (bijv een html pagina of een afbeelding of een pdf bestand etc etc) en toont de inhoud in het browservenster aan de gebruiker.

Als je bovenstaande goed tot je neemt dan begrijp je dat een php script slechts enkele milliseconden tot hooguit enkele seconden actief is, dat dit script op de server wordt uitgevoerd en dat een browser er helemaal niets van merkt. Alle variabelen van een php script zijn al gewist als we bij stap 5 aankomen!

Het woord 'gebruiker' in mijn eerste zin is eigenlijk niet helemaal juist. Computers en webservers kunnen niet zien welke gebruiker er achter een computer zit. Webservers weten zelfs niet eens van welke pc/laptop/smartphone (device) een verzoek af komt. De enige informatie die een webserver krijgt is een ip adres en misschien welke browser er gebruikt wordt en misschien welke talen de browser als voorkeur heeft. Maar achter 1 ip kunnen honderden pc's zitten dus weet een webserver nog niets en is iedereen min of meer anoniem.

Sessies
Stel nu dat je een formulier wilt maken die je wilt opsplitsen in meerdere pagina's. Je hebt dan twee problemen:

a) hoe houdt ik mijn clients uit elkaar
b) hoe bewaar ik mijn variabelen tussen de pagina's onderling en per gebruiker apart

Hiervoor heeft men dus sessies bedacht. Probleem a wordt opgelost met een cookie. Een cookie wordt op de client opgeslagen en de inhoud van een cookie wordt bij ieder request mee teruggestuurd naar de webserver maar enkel zolang de datum/tijd van de cookie nog niet verlopen is. In de cookie wordt een SESSION ID opgeslagen. Een unieke hash die voor iedere client anders is en waarmee de webserver de clients uit elkaar kan houden.

Probleem b wordt opgelost door session variabelen tijdelijk op te slaan op de webserver in een bestand. Dit is voor iedere client een apart bestand. Wanneer de webserver gedurende een bepaalde tijd (afhankelijk van de configuratie van de server) geen nieuw request ontvangt van de client zal het bestandje gewist worden en is de sessie voor die client verlopen.

sessies gebruiken in php

Sessies gebruiken in php is niet zo heel erg moeilijk. Als eerste moet je binnen php aangeven dat je met sessies wilt werken door eenmaal voorin in je script de functie session_start() te gebruiken.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
<?php session_start(); ?>


Daarna kun je variabelen wegschrijven naar de sessie.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
<?php
$_SESSION
= array(
    'name' => 'Frank',
    'website' => 'phphulp.nl'
);

om variabelen uit de sessie te lezen moet je eerst checken of deze wel bestaan
[code]<?php
$name
= 'Onbekend';

if(isset($_SESSION['name'])) {
    $name = $_SESSION['name'];
}

?>


(vergeet session_start() niet)
 
Thomas van den Heuvel

Thomas van den Heuvel

31/03/2018 13:39:34
Quote Anchor link
Als ik af zou moeten gaan op bovenstaande snippet zijn de stappen hardcoded, dus die sloop je er niet zomaar uit. Daarnaast kun je niet overzien wat de impact daarvan is. In de documentatie wordt de suggestie gedaan om de "booking form shortcode" aan te passen, oftewel, op het moment dat je het formulier invoegt wordt daar een plak tekst geplakt. Hierin kun je dingen aanpassen zonder de onderliggende code te veranderen. Ik denk dat dat de beste oplossing is.

Dit (deze plugin) heeft verder weinig (direct) te maken met sessies.

Als je een specifiek onderdeel van PHP onder de knie wilt krijgen lijkt het mij handiger om deze -in ieder geval in eerste instantie- in afzondering te bestuderen.
 
- Ariën  -
Beheerder

- Ariën -

02/04/2018 16:31:19
Quote Anchor link
De werking van sessies in een simpele notendop:
https://www.w3schools.com/php/php_sessions.asp
 



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.