password vergelijken met confirm

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: « vorige 1 2

Ward van der Put
Moderator

Ward van der Put

22/08/2013 11:12:28
Quote Anchor link
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.
 
PHP hulp

PHP hulp

21/01/2025 21:10:48
 
Krist Ensing

Krist Ensing

22/08/2013 11:27:09
Quote Anchor link
Ik wil in ieder geval eerst zorgen dat het formulier goed gevalideerd is, daarna ga ik de gegevens in de database opslaan. Dus eerst wil ik dit voor elkaar hebben.

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)
PHP script in nieuw venster Selecteer het PHP script
1
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())

Geen idee hoe het wel werkt.
 
Ward van der Put
Moderator

Ward van der Put

22/08/2013 11:44:17
Quote Anchor link
Denk in termen van een flowchart of, meer OOP-achtig, een route door je applicatie. Deze validatie wordt een schakel ergens tussen het formulier dat de output aanlevert en iets anders dat de ingevoerde wachtwoorden nodig heeft.

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.
 
Krist Ensing

Krist Ensing

22/08/2013 11:54:18
Quote Anchor link
Ik wil dus inderdaad met de PasswordValidator een foutmelding teruggeven, als niet wordt voldaan aan de voorwaarden, maar omdat ik twee wachtwoordelementen heb gemaakt, confirm en password, weet ik niet hoe ik deze moet doorgeven aan de array($value), zoals deze wordt gecontroleerd. Dus mijn vraag is eigenlijk:

Hoe kan ik ervoor zorgen dat beide wachtwoordelementen de ingevulde waarde in een array wordt opgenomen.
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
'validators' => array(
              new PasswordValidator(array('password', 'confirm'))

werkt wel, maar de uitkomt is:

'deze methode vereist een array'
 
Ward van der Put
Moderator

Ward van der Put

22/08/2013 12:25:30
Quote Anchor link
Ik zou éérst nog aan het objectmodel sleutelen.

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.
 
Krist Ensing

Krist Ensing

22/08/2013 12:32:59
Quote Anchor link
Bij het inloggen wil ik gewoon valideren of ingevoerd wachtwoord bij het be
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
 
Ward van der Put
Moderator

Ward van der Put

22/08/2013 13:13:00
Quote Anchor link
Je hebt nu dit twee objecten van dezelfde klasse. In pseudo-code:

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
$password = new PasswordElement(...)
$confirm  = new PasswordElement(...)


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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
$optgroup = new PasswordCombo
(
    $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)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
$optgroup = new InlogWidget
(
    $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.
 
Krist Ensing

Krist Ensing

22/08/2013 13:42:11
Quote Anchor link
Het spijt me werkelijk. Ik begrijp alles wat hierboven wordt gezegd, maar ik kan er totaal niks mee, als ik zelf moet coderen. Ik heb een cursus PHP profesional en daar kort achteraan PHP masterclass gedaan (als 'ontslagvergoeding' van mijn voormalige werkgever), maar ik kan er concreet nog niks mee. Ik moet nu een eindopdracht maken, waar ik dit alles in wil gebruiken, maar ik weet gewoon niet wat ik met de code aan moet.

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.
 
Kris Peeters

Kris Peeters

22/08/2013 13:53:04
Quote Anchor link
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
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
<?php
echo 'Hello world!';
?>

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
 
Ward van der Put
Moderator

Ward van der Put

22/08/2013 13:57:57
Quote Anchor link
Helaas ontbreekt het me aan tijd om het compleet uit te werken. Misschien hebben andere forumleden vanmiddag of vanavond meer tijd.

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.
 
Kris Peeters

Kris Peeters

22/08/2013 14:14:05
Quote Anchor link
Wat code samengeraapt, vooral van Ward.
Wat verder uitgewerkt.

Code (php)
PHP script in nieuw venster Selecteer het PHP script
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
<?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;
        }
    }
}

?>
Gewijzigd op 22/08/2013 14:22:55 door Kris Peeters
 
Krist Ensing

Krist Ensing

22/08/2013 16:32:41
Quote Anchor link
Erg bedankt voor bovenstaande code. Helaas kan ik niet mijn hele code ombouwen.

Mijn vraag is daarom eenvoudig. Hoe kan ik in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
public function isValid(array $value, array $keys)

en in:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
if (!isset($value[$keys[0]]) || !isset($value[$keys[1]]))


De gegevens plaatsen die uit deze twee velden komen:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
<input name="password" type="password" placeholder="Password"><br>
  <input name="confirm" type="password" placeholder="Confirm Password"><br>
Gewijzigd op 22/08/2013 16:35:57 door Krist Ensing
 

Pagina: « vorige 1 2



Overzicht Reageren

 
 

Om de gebruiksvriendelijkheid van onze website en diensten te optimaliseren maken wij gebruik van cookies. Deze cookies gebruiken wij voor functionaliteiten, analytische gegevens en marketing doeleinden. U vindt meer informatie in onze privacy statement.