Hallo,

Ik ben bezig met een verificatie script, echter krijg ik geen results.
Ik kan de fout niet vinden en ik vroeg me af of ik ergens een fout heb gemaakt of is er een ander probleem waardoor ik geen results krijg.

Ik zal de code even plakken, is een korte code, maar op een of andere manier werkt het niet.

<html>
	<head>
		<title>Sexy Devil</title>
		<link href="inc/div.css" rel="stylesheet" type="text/css"/>
	</head>
	<body>

<?php

	session_start();
	error_reporting(0);
	
	if(isset($_SESSION['over18']))
	{
		header('location: index.php');
	}
	if(isset($_SESSION['under18']))
	{
		header('location: https://www.disneyplus.com/');
	}
	
	if(isset($_SESSION['submit']))
		{
			$day = $_POST['day'];
			$month = $_POST['month'];
			$year = $_POST['year'];
			
			$birthday = mktime(0,0,0,$month,$day,$year);
			$difference = time() - $birthday;
			
			$age = floor($difference / 31556926);
			
			if($age >= 18)
			{
				$_SESSION['over18'] = 1;
				header('location: index.php');
			}else{
				$_SESSION['under18'] = 0;
				header('location: https://www.disneyplus.com/');
			}
		}
	echo $age;
	echo
		"
		<div class='container'>
			<form id='contact' action='confirm.age.php' method='POST'>
				<fieldset>
					<input placeholder='Day' type='number' name='day' value='00' tabindex='1' autofocus>
					<input placeholder='Month' type='number' name='month' value='00' tabindex='1' autofocus>
					<input placeholder='Year' type='number' name='year' value='0000' tabindex='1' autofocus>
				</fielfdset>
				<input type='submit' value='Verify' name='submit'>
			</form>
		</div>
		";
?>
	</body>
</html>
Arno van Zanten op 28/02/2023 09:33:06

start.php bevat een andere pagina.
Dat is de 18plus pagina


Maar die voeg je dan alleen toe wanneer de controle is gedaan, na een refresh kom je daar niet meer. Denk dat de opbouw van je script niet helemaal klopt.

Index -> Check op sessie -> Zo niet -> Stuur door naar formulier -> Formulier juist ingevuld -> Set sessie -> Ga terug naar index.
En for the record, gebruik je ook een pagina-systeem? Zoals index.php?pagina=contact, die vervolgens alle invoer in $_GET['pagina'] wat geldig, gevalideerd is, in de include() plaatst?

In dat geval kan je de controle op 18+ ook daar al uitvoeren (met uitsluiten van je verificatie-pagina). Anders moet je dat op elke pagina doen. Het liefst wil je voor elke site één voordeurtje hebben waardoor iemand naar binnen komt, en dat is dan de index.php.

Met Michael's flow en met deze tip heb je een logische website voor elkaar.
- Ariën - op 28/02/2023 09:38:38

Oke. Hoe wil je eigenlijk die headers op lijn 39 en 42 uitvoeren terwijl je daarvoor al HTML hebt staan?

lijn 39 is een include, geen header
42 dan, de verwijzing naar disney.
- Ariën - op 28/02/2023 10:34:42

42 dan


die zit in een functie
Arno van Zanten op 28/02/2023 10:35:19

[quote="- Ariën - op 28/02/2023 10:34:42"]
42 dan


die zit in een functie
[/quote]
Nee. Of jij moet andere gedachten hebben over een functie in PHP :-P
Of je hebt inmiddels flink staan breken in je code dat je die nu wel gemaakt hebt.


<?php
if(isset($_POST['verify']))
				{
				$day = $_POST['day'];
				$month = $_POST['month'];
				$year = $_POST['year'];
				
				$birthday = mktime(0,0,0,$month,$day,$year);
				$difference = time() - $birthday;
				
				$age = floor($difference / 31556926);
				
				if($age >= 18)
					{
						$_SESSION['over18'] = 1;
						include('inc/start.php');
					}else{
						$_SESSION['under18'] = 0;
						header('location: https://www.disney.com/');
					}
				} else {
*/ some form /*				
				}
?>


alles wat tussen { script / functie } in zit, valt toch in een functie of script?
Maar we hadden al aangegeven dat je beter REQUEST_METHOD kunt gebruiken ipv isset() en een makkelijkere manier voor de leeftijd. Ik zie dat je deze adviezen niet toevoegt.

Daarnaast zou ik ook nog controleren of de ingevoerde datum geldig is en een header gebruiken ipv een include aangezien je anders in de POST blijft hangen (refresh maar eens, dan wil de browser opnieuw posten). Ook heb je 'under18' niet nodig aangezien je 'over18' gewoon als True (1) of False (0) zet. Dan krijg je dus iets als


<?php
// Check of er gepost is
if($_SERVER['REQUEST_METHOD'] === 'POST') {
    
    // Set sessie op False
    $_SESSION['over18'] = False;

    // Check of de variabelen die we willen aanwezig zijn.
    if(isset($_POST['year'], $_POST['month'], $_POST['day'])) {

        // Check of de ingevoerde data een geldige datum is
        if(checkdate($_POST['month'], $_POST['day'], $_POST['year'])) {

            // Bereken leeftijd
            $birthday = new DateTime($_POST['year'] . '-' . $_POST['month'] . '-' . $_POST['day']);
            $today = new DateTime('today');
            $age = $birthday->diff($today)->y;
    
            // Set session
            if($age >= 18) {
                $_SESSION['over18'] = True;
                header('location: inc/start.php');
            } else {
                header('location: https://www.disney.com/');
            }
        } else {
            header('location: ' . $_SERVER['SCRIPT_NAME'] . '?error');
        }
    } else {
        header('location: ' . $_SERVER['SCRIPT_NAME'] . '?error');
    }
}
if(isset($_GET['error'])) {
    echo '<p>Birthday is invalid.</p>';
}
?>
<div class='text-user'>Insert your birthday to verify</div>
    <div class='container'>
        <form id='contact' method='POST'>
            <fieldset>
                <input placeholder='Day' type='number' name='day' tabindex='1' autofocus>
                <input placeholder='Month' type='number' name='month' tabindex='1' autofocus>
                <input placeholder='Year' type='number' name='year' tabindex='1' autofocus>
            </fieldset>
            <button name='verify' type='submit' id='contact-submit' data-submit='...Sending'>Verify</button>
        </form>
    </div>
<div class='text-user'>Under construction, not all working yet</div>
Michael - op 28/02/2023 10:48:29

Maar we hadden al aangegeven dat je beter REQUEST_METHOD kunt gebruiken ipv isset() en een makkelijkere manier voor de leeftijd. Ik zie dat je deze adviezen niet toevoegt.

Daarnaast zou ik ook nog controleren of de ingevoerde datum geldig is en een header gebruiken ipv een include aangezien je anders in de POST blijft hangen (refresh maar eens, dan wil de browser opnieuw posten). Ook heb je 'under18' niet nodig aangezien je 'over18' gewoon als True (1) of False (0) zet. Dan krijg je dus iets als....


Heel erg aardig van je kerel, ik begrijp je heel goed.
Maar ik probeer, dat wat ik heb overgenomen van een user op YT, te begrijpen.
Ja het is een verouderede code en ik ben nog niet zo ver als jullie met de PHP structuur code. Ik ben eigenlijk 8 jaar geleden gestopt met scripten, wegens verandering van baan en leef situatie.
Ik heb het weer pas recentelijk op gepakt en er is veel bij gekomen in de tijd dat ik gestopt was. Veel puzzel werk en veel uitzoeken.
HTML echter blijft grotendeels het zelfde, daar verander eigenlijk weinig of niks in.
PHP veranderd en vernieuwd bijna elke dag wel iets en daar zit het bij mij.
Ik zit nog met oude code te scripten en niet alles werkt meer zoals eerst en dus moet ik uitzoeken wat wel en niet werkt en proberen de nieuwere versie van PHP te begrijpen.

Dus heel erg aardig en ik begrijp jullie goede bedoelingen ook.
Ik probeer eerst altijd mijn code zover te begrijpen en te verbeteren, maar dat vergt voor mij tijd en energie ;)

Reageren