Hallo!

Hoe kan ik zorgen dat een error verdwijnt als je de pagina reload, zonder AJAX te gebruiken. Want nu blijft de error als je ctrl+r gebruikt omdat die dan de POST opnieuw doet, maar ik wil juist dat dit niet kan. Atm heb ik nog geen code, maar hier had ik eerder een probleem mee. Ik zal code toevoegen als ik 't heb. ;)
Zou nice zijn, met wat uitleg ;)

[size=xsmall]Toevoeging op 03/01/2017 13:08:40:[/size]

Elmar vH op 03/01/2017 13:03:57

... dat is toch ook precies wat je nu uitvoert...

Elke keer zodra er een "submit" gedaan word, dan controleert login.php de velden.
Een refresh, is tevens een submit en dus een ctrl+r ook.

Wat wil je precies bereiken?
--> Zodra men een post doet, moet er een melding komen.
--> Zodra men refresht --> Logischerwijs voer je dan je controles opnieuw uit.

Wanneer komt dan het moment dat er GEEN melding getoond moet worden dan?


als je reload, dan moet die geen post meer doen
dan moet je de structuur veranderen naar:

<form method="post" action="login.php">

en de include er bovenin weghalen.

Dan krijg je de volgende route:
--> men komt binnen op index.php
--> drukt op submit
--> form stuurt je naar login.php
--> in login.php kun je desnoods een sessie aanmaken met error.
--> header location gebruiken naar index.php
--> Indien sessie bestaat --> error tonen en unset gelijk de sessie
men kan dan refreshen totdat ze een ons wegen... er wordt geen post gedaan.. en de sessie is direct leeg gemaakt.
Hoe maak ik een sessie aan met een error? en hoe doe ik dit?
Indien sessie bestaat --> error tonen en unset gelijk de sessie

<?php
if($_SERVER['REQUEST_METHOD'] == "POST") { // er is ge-POST

	$errors = array(); // maak array aan.

	// validatie controleren
	if(trim($_POST['naam']='')) { // naam is niet ingevuld
		$errors[] = "Naam is niet ingevuld";
	}
	if(trim($_POST['plaats']='')) { // plaats is niet ingevuld
		$errors[] = "Plaats is niet ingevuld";
	}
	if(trim($_POST['emailadres']='')) { // emailadres is niet ingevuld
		$errors[] = "E-mailadres is niet ingevuld";
	}

if(count($errors)==0) { // er zijn geen errors in de error-array $errors geplaatst
	// Je eigen vrijheid: Doe hier je afhandeling. Schrijf het naar de database, stuur het per mail of wat dan ook.
} else {
	echo 'Je formulier is niet goed ingevuld:';
	echo '<ul>'; // lijstje in HTML maken
	foreach($errors as $error) { // loop de array af, en laat alle foutmeldingen zien die er zijn.
		echo '<li>'.$error.'</li>'; // elke error is een list-element
	}
	echo '</ul>'; // lijstje afsluiten
		
} 
?>

Het is handig voor een uitgebreid formulier. Voor een inlogsysteem zou ik het niet zo snel doen, omdat je toch maar één validatie error wilt tonen, en dat is dat 'de gegevens fout zijn' of 'dat het niet gelukt is om technische redenen'.
je begint met:

session_start();


vervolgens kun je een sessie aanmaken net zoals variabelen:
 $_SESSION['error'] = 'ik ben een error'; 



en dan ophalen:
 echo $_SESSION['error']; 


meer info: http://www.w3schools.com/php/php_sessions.asp
Allebij hartstikke bedankt!
Je gebruikt al een sessie (index.php, regel 2) maar snapt niet hoe je deze gebruikt? Je lijkt ook niets aan gegevens te onthouden in login.php. Waar werk je dan precies naartoe? :/

Hoe onthoud je dat iemand succesvol is ingelogd? Dit zou moeten gebeuren in het if-blok in regel 27-30.

Reageren