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:


<?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
Clientside JavaScript kan je niet combineren met server-side PHP. JavaScript heeft geen weet van PHP.
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:

<script type="text/javascript">
	if (!sessionStorage.alreadyClicked) { 
	<?php mijn-functie(); ?>
	sessionStorage.alreadyClicked = 1;
	}
</script>
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.
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
Maar een session start vóór mijn-functie() dus hoe kan ik mijn-functie() toch eenmalig uitvoeren hiermee?

Guido
Kijk eerst of er een sessie bestaat. Bestaat die niet dan maak je die aan.
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.
<?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.
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.

Reageren