Ik heb een form gemaakt waarin een login en password worden gecheckt via een validatie functie. Als er een foutief wachtwoord wordt ingevoerd krijg in een melding dat de login foutief is, werkt super!
Na een goede login wil ik nu dat er een nieuw form gestart wordt, die in een andere php-file staat. Hoe bouw ik dit nu in? In de oude situatie werd dit aangeroepen vanuit het action-gedeelde, maar als ik dit doe bij het aanmaken van het Form-object dan werkt de validatie niet meer.
Hierbij een stukje code. Bij foutieve invoer krijg ik een melding, maar bij juiste invoer kom ik steeds terug op dezelfde pagina, terwijl hij zou moeten doorstarten naar newpage.php. Wat doe ik fout?
Helaas, ook met deze aanpassing werkt het nog niet. Als ik bij goede login en wachtwoord op "Login" klik, krijg ik weer hetzelfde formulier in beeld, met daarbij de ingevulde loginnaam in beeld en het veld wachtwoord weer leeggemaakt.
Ah, ik zie het al. Het probleem is je controle functie. Als je een nieuwe controle functie maakt moet je formhandler laten weten of het resultaat goed is of niet. Dat doe jij niet.
// controleer of er correct is ingelogd...
function LoginOk($password) {
// is het wachtwoord wel goed?
if( ! Validator::IsPassword( $password ) ) {
return false;
} else {
global $form;
// check de database...
$query=
"SELECT COUNT(1) FROM members ".
"WHERE Loginnaam = '".trim($form->Value("login"))."' ".
"AND Wachtwoord = '".trim($password)."' ";
$result = mysql_query( $query ) or die( mysql_error() );
// zijn er records gevonden?
if( mysql_result( $result, 0 ) == 0 ) {
return "Login incorrect";
} else {
return true;
}
}
}
// wat moet er gebeuren als de login correct was?
function doRun($data) {
$url = "newPage.php";
echo
"<script language='javascript'>\n".
"document.location.href='".$url."';\n".
"</script>\n";
}
?>
Ik heb de check voor het wachtwoord en je login check bij elkaar gevoegd. Dit omdat een hidden field geen error message weer kan geven. (althans, niet zonder echo).