PHP functie eenmalig aanroepen via Javascript

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 3 volgende »

Guido  -

Guido -

26/08/2020 19:09:16
Quote Anchor link
Hallo,

Ik wil binnen mijn website een PHP-functie aanroepen, maar alleen bij de eerste pageload. Dus niet als pagina ververst wordt of opnieuw geladen wordt. De functie is voor een bezoekersteller, vandaar.

Vond dit antwoord:
https://stackoverflow.com/a/25070971

Ben hier mee aan de slag gegaan en dit in mijn PHP paginatemplate gezet:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
echo '<script type="text/javascript">';
echo 'if (!sessionStorage.alreadyClicked) { '.mijn-functie().' sessionStorage.alreadyClicked = 1; }';
echo '</script>';
?>


Maar de functie blijft elke keer uitgevoerd worden, als ik pagina ververs.

Als ik een alert ipv mijn-functie() toe voeg werkt het wél (alert wordt niet getoond als ik pagina ververs).

Doe ik iets verkeerd?

Guido
Gewijzigd op 26/08/2020 19:09:31 door Guido -
 
PHP hulp

PHP hulp

30/10/2020 08:07:33
 
- Ariën -
Beheerder

- Ariën -

26/08/2020 19:20:50
Quote Anchor link
Clientside JavaScript kan je niet combineren met server-side PHP. JavaScript heeft geen weet van PHP.
Gewijzigd op 26/08/2020 19:21:45 door - Ariën -
 
Guido  -

Guido -

26/08/2020 20:34:34
Quote Anchor link
Dank voor je reactie.
Maar het is toch eigenlijk gewoon een IF statement? Dus waarom wordt de (PHP) functie dan steeds opnieuw aangeroepen wanneer ik pagina ververs? De statement zou verdere uitvoer moeten tegenhouden.

Met dit trouwens hetzelfde resultaat:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
<script type="text/javascript">
    if (!sessionStorage.alreadyClicked) {
    <?php mijn-functie(); ?>
    sessionStorage.alreadyClicked = 1;
    }
</script>
 
- Ariën -
Beheerder

- Ariën -

26/08/2020 20:38:05
Quote Anchor link
JavaScript en PHP zijn beiden verschillend, en werken beiden op verschillende lagen. Dit gaat daarom nooit werken.

PHP wordt eerst door de server uitgevoerd, en javascript als laatste door de browser. JavaScript heeft geen weet van PHP, dus is het vrij logisch dat het PHP-script altijd wordt uitgevoerd.
Gewijzigd op 26/08/2020 20:40:43 door - Ariën -
 
Guido  -

Guido -

26/08/2020 20:43:47
Quote Anchor link
Heb je dan een oplossing hiervoor? De functie mijn-functie() kan in mijn geval alleen PHP zijn (er zitten bepaalde functionaliteiten van WordPress in).

Guido
 
- Ariën -
Beheerder

- Ariën -

26/08/2020 20:45:50
Quote Anchor link
Dan moet je het via AJAX oplossen, of het geheel in PHP oplossen. Dat laatste lijkt mij beter en kan je prima via sessions in PHP.

Interessant leesvoer:
https://www.ironistic.com/using-php-sessions-in-wordpress
Gewijzigd op 26/08/2020 20:49:58 door - Ariën -
 
Guido  -

Guido -

26/08/2020 20:53:54
Quote Anchor link
Maar een session start vóór mijn-functie() dus hoe kan ik mijn-functie() toch eenmalig uitvoeren hiermee?

Guido
 
- Ariën -
Beheerder

- Ariën -

26/08/2020 21:13:12
Quote Anchor link
Kijk eerst of er een sessie bestaat. Bestaat die niet dan maak je die aan.
 
Guido  -

Guido -

26/08/2020 23:30:57
Quote Anchor link
Ja, en dan? De session start toch altijd eerder dan de uitvoer van mijn function? Dus wat moet ik dan doen om de function éénmalig per browser sessie uit te voeren? Ik snap em niet.
 
- Ariën -
Beheerder

- Ariën -

27/08/2020 01:11:09
Quote Anchor link
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
session_start();

if(!isset($_SESSION['hasPassedFirstVisit'])) {
     // Doe je ding!
    
     // Sessie aanmaken.

     $_SESSION['hasPassedFirstVisit'] = true;
?>


Maar het lijkt mij abstracter als je jouw functie aanpast.
 
Thomas van den Heuvel

Thomas van den Heuvel

27/08/2020 01:39:46
Quote Anchor link
Maar dit werkt alleen zolang deze sessie bestaat? Wellicht wil @Guido ook dat bij toekomstige bezoeken aan de site dat de functie maximaal één keer wordt/is uitgevoerd?

Ook hier kan simpelweg een cookie volstaan.
 
Ozzie PHP

Ozzie PHP

27/08/2020 03:17:10
Quote Anchor link
>> Wellicht wil @Guido ook dat bij toekomstige bezoeken aan de site dat de functie maximaal één keer wordt/is uitgevoerd?

Maar misschien ook niet? Het gaat om een bezoekerteller. Die tel je in de regel per browsersessie en dan volstaat de oplossing van Ariën prima.

Vraag van de TS is ook "Dus wat moet ik dan doen om de function éénmalig per browser sessie uit te voeren? Ik snap em niet."
 
Guido  -

Guido -

27/08/2020 09:48:03
Quote Anchor link
Goedemorgen,

Heren, hartelijk dank.

Arien: ik snap nu ook wat je bedoelt met:
Kijk eerst of er een sessie bestaat. Bestaat die niet dan maak je die aan.
Kijk eerst of een specifieke sessie bestaat.. zo niet, doe je ding en zet sessie alsnog.

Maar ik loop nu wel tegen iets anders aan, waar ik niet aan gedacht had. Ik gebruik de teller per afzonderlijke pagina, maar dat werkt zo niet natuurlijk. Is dan een sessie wel bruikbaar?

Guido
Gewijzigd op 27/08/2020 09:49:10 door Guido -
 
- Ariën -
Beheerder

- Ariën -

27/08/2020 09:56:01
Quote Anchor link
Wat doet je functie precies?
Die kan toch ook per pagina tellen?
 
Guido  -

Guido -

27/08/2020 10:58:40
Quote Anchor link
Klopt inderdaad, ik kan de ID van de pagina meegeven aan de sessie-naam. Gaat dit werken?

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
$naam = 600;
if(!isset($_SESSION[ $naam ])) {
    // Doe je ding!

    // Sessie aanmaken.
    $_SESSION[ $naam ] = true;
}



Uitvoer wordt na laden van de pagina:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
array(1) { [600]=> bool(true) }


Guido
Gewijzigd op 27/08/2020 11:00:36 door Guido -
 
Thomas van den Heuvel

Thomas van den Heuvel

27/08/2020 11:13:05
Quote Anchor link
Je zegt dat je deze functionaliteit gebruikt voor een bezoekersteller. Beschrijf eens in woorden wat dit functioneel zou moeten doen. Hoe zou er geteld moeten worden? En waar wordt dit vervolgens opgeslagen?

Een PHP-sessie ($_SESSION) heeft een beperkte levensduur. Deze heeft een timeout en raakt ook "ontkoppeld" wanneer iemand het bijbehorende cookie weggooit.

En wat als iemand cookies uit heeft staan?

Wat omvat volgens jou precies een "unieke bezoeker"?
 
Guido  -

Guido -

27/08/2020 11:30:15
Quote Anchor link
Gewoon een eenvoudige teller, om de bezoekers een idee te geven hoeveel bezoekers een pagina hebben bezocht. Ik doe er verder niets mee. Het is niets meer dan een gadget.

Maar op zich is het ook wel wenselijk dat de sessie niet direct afsluit als ik browser scherm sluit. Maar ik wou eerst de sessie ansich werkend krijgen.

Het is voor een WordPress website. Ik sla de waarde per pagina op in de database via de WordPress functie update_post_meta(). Na // Doe je ding! roep ik een functie aan die 1 optelt bij de waarde die in de database staat.

Als sessies uitgeschakeld zijn op de server, dan zullen er vast meer problemen met een WordPres website zijn, aangezien sessies daar meer worden gebruikt.

Guido
 
- Ariën -
Beheerder

- Ariën -

27/08/2020 11:40:35
Quote Anchor link
Guido - op 27/08/2020 11:30:15:

Als sessies uitgeschakeld zijn op de server, dan zullen er vast meer problemen met een WordPres website zijn, aangezien sessies daar meer worden gebruikt.

Guido

Huh?
Cookies zijn geen sessies.
Een cookie is bij de bezoeker opgeslagen, en een sessie staat op de server. Wel gebruiken sessies een cookie om de gebruiker te identificeren.
 
Guido  -

Guido -

27/08/2020 11:57:41
Quote Anchor link
Ik dacht dat een hosting provider het gebruik van PHP-sessies kan blokkeren? En dan zal de cookie dus ook niet aangemaakt kunnen worden. Of begrijp ik het verkeerd?
 
- Ariën -
Beheerder

- Ariën -

27/08/2020 12:05:55
Quote Anchor link
Ze kunnen het blokkeren, maar daar zou geen reden voor zijn omdat het een veel-gebruikt onderdeel van PHP is. Of er moet een onwetende hostingboer achter de serverknoppen zitten.
 
Ozzie PHP

Ozzie PHP

27/08/2020 12:25:06
Quote Anchor link
@Thomas

>> Een PHP-sessie ($_SESSION) heeft een beperkte levensduur. Deze heeft een timeout en raakt ook "ontkoppeld" wanneer iemand het bijbehorende cookie weggooit.

>> En wat als iemand cookies uit heeft staan?

Dit geldt toch voor alles? Als iemand javascript en/of cookies uit heeft staan dan werkt bepaalde functionaliteit niet. Dit soort "wat als" situaties daar kun je in mijn optiek niet zoveel mee. Als je met sessies werkt dan zijn dit gevallen die kunnen voorkomen, maar je kunt nu eenmaal niet alles 'indekken'.

@Guido

>> $naam = 600;

Zorg dat je overal duidelijke naamgeving gebruikt. Een getal als naam/id van een pagina is super onduidelijk. Gebruik dan bijv. een prefix erbij $naam = 'page_600' of maak het gewoon compleet duidelijk $naam = 'page_contact'. Daarnaast wordt vrijwel altijd gebruikgemaakt van Engels. Dus ik zou dan zelf de voorkeur geven aan $page_id in plaats van $naam, maar goed ... dat is geen vereiste en jouw persoonlijke keuze.

>> Ik dacht dat een hosting provider het gebruik van PHP-sessies kan blokkeren? En dan zal de cookie dus ook niet aangemaakt kunnen worden. Of begrijp ik het verkeerd?

Ja je begrijpt het verkeerd. Een hoster zal PHP-sessies niet blokkeren.
 

Pagina: 1 2 3 volgende »



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.