password vergelijken met confirm
Krist Ensing op 22/08/2013 11:02:38:
Maar moet ik deze code (het stukje hierboven) overnemen in de constructor van password of confirm of ergens anders?
In code waar je iets wilt doen/nalaten met een geldig/ongeldig ingevoerd wachtwoord.
Dat kan van alles zijn, bijvoorbeeld iets voor het openen van een account of iets voor het wijzigen van een bestaand wachtwoord. Maar zoals Kris zegt, moet je niet iets bouwen als je nog niet weet waarvoor.
Dus nogmaals de vraag:moet ik deze code (het stukje hierboven) overnemen in de constructor van password of confirm of ergens anders?
Toevoeging op 22/08/2013 11:39:22:
Ik heb nu onderstaand gedaan, maar dat werkt niet:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
2
3
4
5
6
7
8
9
10
11
12
13
$confirm = new PasswordElement(array(
'name' => 'confirm',
'label' => 'bevestigen wachtwoord: ',
'value' => isset($_GET['confirm']) ? $_GET['confirm'] : '',
'validators' => array(
$obj = new PasswordValidator(),
$passwordIsValid = $obj->isValid($_GET, array('password', 'confirm')),
),
'filters' => array(
new FilterStripTags(),
new FilterTrim())
'name' => 'confirm',
'label' => 'bevestigen wachtwoord: ',
'value' => isset($_GET['confirm']) ? $_GET['confirm'] : '',
'validators' => array(
$obj = new PasswordValidator(),
$passwordIsValid = $obj->isValid($_GET, array('password', 'confirm')),
),
'filters' => array(
new FilterStripTags(),
new FilterTrim())
Geen idee hoe het wel werkt.
formulier --> validatie --> 'iets'
Dat 'iets' kan (pijltje voor 'retour afzender') bijvoorbeeld hetzelfde formulier met een foutmelding zijn als de validatie false oplevert.
De kunst van OOP bouwen is dat dit validatie-object juist niet per se altijd dezelfde plek inneemt. Je moet het object kunnen hergebruiken zodra je het in een andere context opnieuw nodig hebt.
Hoe kan ik ervoor zorgen dat beide wachtwoordelementen de ingevulde waarde in een array wordt opgenomen.
werkt wel, maar de uitkomt is:
'deze methode vereist een array'
Je krijgt straks, bijvoorbeeld voor inloggen, de situatie dat er maar één wachtwoord wordt ingevoerd. De validatie "geldig wachtwoord" wordt dan een andere dan "twee geldige wachtwoorden". Uiteraard is er een overlapping, maar die wil je in code wel scheiden. Je zou bijvoorbeeld een klasse kunnen gebruiken voor een wachtwoord en een tweede klasse voor een wachtwoordgroep.
treffende mailadres hoort, dus dan heb ik deze validatie niet nodig.
Dus nogmaals mijn vraag omtrent de situatie die ik nu wil oplossen:
Hoe kan ik ervoor zorgen dat beide wachtwoordelementen de ingevulde waarde in een array wordt opgenomen.
Ik zou er erg mee geholpen zijn, als me daar code voor geeft en waar ik deze moet plaatsen....
Gewijzigd op 22/08/2013 12:44:12 door Krist Ensing
Het is niet logisch daarbinnen dezelfde validatie voor beide objecten samen op te nemen. Bovendien wordt de validatie dan dubbel uitgevoerd.
Logischer is bijvoorbeeld dit:
Code (php)
1
2
3
4
5
2
3
4
5
$optgroup = new PasswordCombo
(
$password = new PasswordElement(...)
$confirm = new PasswordElement(...)
)
(
$password = new PasswordElement(...)
$confirm = new PasswordElement(...)
)
De validatie "zijn beide wachtwoorden identiek" geldt dan uitsluitend voor de klasse PasswordCombo. Alle validatieregels voor één enkel wachtwoord horen vervolgens thuis in PasswordElement.
In de toekomst kun je dan code makkelijk hergebruiken:
Code (php)
1
2
3
4
5
6
2
3
4
5
6
$optgroup = new InlogWidget
(
$email = new EmailElement(...)
$password = new PasswordElement(...)
)
(
$email = new EmailElement(...)
$password = new PasswordElement(...)
)
Je zegt nu wel dat je losse wachtwoorden niet wilt valideren, maar er komt misschien een moment waarop dat wél moet. En de regel "zijn beide wachtwoorden wel gelijk" onderbrengen in een klasse die uit maar één wachtwoord bestaat, is gewoon niet logisch.
Ik zou het fantastisch vinden als je de codes voor me uit zou willen schrijven, dan hoop ik door er naar te kijken er de volgende keer vat op te krijgen, zodat ik het volgende keer hopelijk zelf kan.
Anders blijf ik de hele middag maar wat aanklooien zonder enig resultaat.
Als je het niet wilt, begrijp ik dat ook, maar laat het dan even weten.
Alvast heel erg bedankt en excuses voor alle moeite.
Krist Ensing op 22/08/2013 13:42:11:
... maar ik kan er concreet nog niks mee. Ik moet nu een eindopdracht maken, waar ik dit alles in wil gebruiken,...
Je moet beginnen met het begin.
Je moet niet proberen iets te realiseren; je moet oefenen. Nutteloze oefeningen maken.
Dat begint met
Hier staat een mooie tutorial. Sla niets over
http://www.phptuts.nl/view/39/
Eens je php een beetje onder de knie hebt, kan je beginnen dingen te realiseren.
Gewijzigd op 22/08/2013 14:55:09 door Kris Peeters
Denk wel abstracter: één object voor één taak. De taak "zijn deze objecten gelijk" moet je delegeren naar een ander object. Bijvoorbeeld een 'wachtwoordgroep' zoals in mijn voorbeeld, ook om praktische redenen: dat ligt het dichtst bij de code die je nu al hebt.
Wat verder uitgewerkt.
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
<?php
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// dit wordt uitgevoerd wanneer het formulier wordt verwerkt
$password = new PasswordValidator();
$valid = $password->isValid($_POST, array('password', 'confirm'));
if($valid) {
echo 'Yippiiii! gelukt';
}
else {
// error messages echo'en
echo $password->getMessages();
}
}
else {
// hier tonen we het formulier
echo '
<form method="post" action="">
<input name="username" placeholder="Username"><br>
<input name="password" type="password" placeholder="Password"><br>
<input name="confirm" type="password" placeholder="Confirm Password"><br>
<input type="submit" value="GO!">
</form>';
}
//
class PasswordValidator
{
private $_messages;
// de constructor. Deze methode bouwt het object.
public function __construct() {
$this->_messages = array();
}
// geeft de error messages terug
public function getMessages() {
$result = "";
foreach ($this->_messages as $message) {
$result .= '<div class="errormessage">' . $message . '</div>';
}
return $result;
}
// Geeft true terug als alles in orde is; anders false. Bij false worden error messages opgeslagen
public function isValid(array $value, array $keys) {
if (!is_array($value)) {
$this->_messages[] = 'Deze methode vereist een array';
return false;
}
if (!isset($value[$keys[0]]) || !isset($value[$keys[1]])) {
$this->_messages[] = 'Een van beide wachtwoorden ontbreekt';
return false;
}
$value[$keys[0]] = trim($value[$keys[0]]);
$value[$keys[1]] = trim($value[$keys[1]]);
if (empty($value[$keys[0]]) || empty($value[$keys[1]])) {
$this->_messages[] = 'Een van beide wachtwoorden is leeg';
return false;
}
if ($value[$keys[0]] === $value[$keys[1]]) {
return true;
}
else {
$this->_messages[] = 'De wachtwoorden zijn niet gelijk aan elkaar';
return false;
}
}
}
?>
if ($_SERVER['REQUEST_METHOD'] === 'POST') {
// dit wordt uitgevoerd wanneer het formulier wordt verwerkt
$password = new PasswordValidator();
$valid = $password->isValid($_POST, array('password', 'confirm'));
if($valid) {
echo 'Yippiiii! gelukt';
}
else {
// error messages echo'en
echo $password->getMessages();
}
}
else {
// hier tonen we het formulier
echo '
<form method="post" action="">
<input name="username" placeholder="Username"><br>
<input name="password" type="password" placeholder="Password"><br>
<input name="confirm" type="password" placeholder="Confirm Password"><br>
<input type="submit" value="GO!">
</form>';
}
//
class PasswordValidator
{
private $_messages;
// de constructor. Deze methode bouwt het object.
public function __construct() {
$this->_messages = array();
}
// geeft de error messages terug
public function getMessages() {
$result = "";
foreach ($this->_messages as $message) {
$result .= '<div class="errormessage">' . $message . '</div>';
}
return $result;
}
// Geeft true terug als alles in orde is; anders false. Bij false worden error messages opgeslagen
public function isValid(array $value, array $keys) {
if (!is_array($value)) {
$this->_messages[] = 'Deze methode vereist een array';
return false;
}
if (!isset($value[$keys[0]]) || !isset($value[$keys[1]])) {
$this->_messages[] = 'Een van beide wachtwoorden ontbreekt';
return false;
}
$value[$keys[0]] = trim($value[$keys[0]]);
$value[$keys[1]] = trim($value[$keys[1]]);
if (empty($value[$keys[0]]) || empty($value[$keys[1]])) {
$this->_messages[] = 'Een van beide wachtwoorden is leeg';
return false;
}
if ($value[$keys[0]] === $value[$keys[1]]) {
return true;
}
else {
$this->_messages[] = 'De wachtwoorden zijn niet gelijk aan elkaar';
return false;
}
}
}
?>
Gewijzigd op 22/08/2013 14:22:55 door Kris Peeters
Mijn vraag is daarom eenvoudig. Hoe kan ik in:
en in:
De gegevens plaatsen die uit deze twee velden komen:
Code (php)
1
2
2
<input name="password" type="password" placeholder="Password"><br>
<input name="confirm" type="password" placeholder="Confirm Password"><br>
<input name="confirm" type="password" placeholder="Confirm Password"><br>
Gewijzigd op 22/08/2013 16:35:57 door Krist Ensing