static variabele in form validatie script met filters

Overzicht Reageren

Sponsored by: Vacatures door Monsterboard

Pagina: 1 2 volgende »

Arne

Arne

04/02/2010 10:45:00
Quote Anchor link
hey

ik probeer een registreer script te schrijven
dat aan de hand van filters en functies gaat controleren of de input wel correct is

alles werkt, bv controleren of de usernaam langer is als 3 tekens,
en of het email adres een @ en . bevat

nu probeer ik het tweede email veld, ook met een functie, te laten controleren of het hetzelfde email adres is als in het eerste email veldje

maar in de functie checkEmail2()
wil ik dus $sEmail vergelijken met $sEmail2
maar dan krijg ik de error dan $sEmail is not specified

nu is mijn vraag
hoe krijg ik die variabele ook in die tweede functie op lijn 45?

dit is mijn script

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
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
<?php
ini_set('display_errors', 1);
error_reporting(E_ALL);
session_start();

if($_SERVER['REQUEST_METHOD'] == 'POST')
{

    // Declareren van errors en input arrays
    $_SESSION['errors'] = array();
    $_SESSION['input'] = $_POST;
    
    // Verplichte velden
    $aVerplicht = array('gebruikersnaam', 'voornaam', 'achternaam', 'postcode', 'email', 'email2');
    
    /**
     * Controle gebruikersnaam
     *
     * @param string $sGebruikersnaam: de te controleren gebruikersnaam
     * @return: NULL als gebruikersnaam korter is dan 4 tekens, anders $sGebruikersnaam
     */

    function checkUsername($sGebruikersnaam)
    {

        return strlen($sGebruikersnaam) > 3 ? $sGebruikersnaam : NULL;
    }

    

    
    

function
checkEmail($sEmail)
    {

    
if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $sEmail)) {

  return $sEmail;  
  
          }}
        


function
checkEmail2($sEmail2, $sEmail) {

    
if ($sEmail2 != $sEmail) {

    NULL;
  }
  }
  
      /**
     * Postcode controle op geldig formaat
     *
     * @param string $sPostcode: de te controleren postcode
     * @return: NULL als postcode geen geldig formaat heeft, anders $sPostcode
     */

    
  function checkPostcode($sPostcode)
    {

        return preg_match('/^[1-9]{1}[0-9]{3}$/i', $sPostcode) ? $sPostcode : NULL;
    }

    
    // Definieren van filters voor verschillende inputvelden.
    $aFilters = array (
        'gebruikersnaam'     => array (
                                'filter' => FILTER_CALLBACK,
                                'options' => 'checkUsername' ),
        'voornaam'             => NULL,
        'achternaam'         => NULL,
        'email'                => array (
                                'filter' => FILTER_CALLBACK,
                                'options' => 'checkEmail' ),
        'email2'                => array (
                                'filter' => FILTER_CALLBACK,
                                'options' => 'checkEmail2' ),
        'postcode'             => array (
                                'filter' => FILTER_CALLBACK,
                                'options' => 'checkPostcode' ),
        'woonplaats'         => NULL,
        'geboortejaar'         => FILTER_VALIDATE_INT
    );
    
    // Uitvoeren van de filters en doorlopen van het resultaat
    $aResultaat = filter_input_array(INPUT_POST, $aFilters);
    foreach($aResultaat as $sKey => $sValue)
    {

       $sValue = trim($sValue);
        
        if(empty($sValue) && in_array($sKey, $aVerplicht))
        {

            $_SESSION['errors'][$sKey] = true;
            $aErrors[] = 'Je hebt geen geldige '.$sKey.' ingevuld.';
        }
    }

    
    // Verwerk het formulier als er geen fouten opgetreden zijn.
    if(empty($_SESSION['errors']))
    {

        // Verwerk het formulier:
        // vb. Schrijf gegevens naar een database
        // vb. Stuur een email met de gegevens
        // Stuur gebruiker door naar een volgende pagina.

        $aContent[] = '<p><b>Het resultaat, de input:</b></p>';
        $aContent[] = '<ul>';
        foreach($_SESSION['input'] as $sKey => $sValue)
        {

            $aContent[] = '<li>'.$sKey.': '.$sValue.'</li>';
        }

        $aContent[] = '</ul>';
        
        unset($_SESSION['input']);
    }
}

?>


<!DOCTYPE HTML PUBLIC "-//W3C//DTD HTML 4.01//EN" "http://www.w3.org/TR/html4/strict.dtd">
<html>
<head>
    <meta http-equiv="Content-Type" content="text/html; charset=iso-8859-1">
    <title>Jorendewit.nl - PHP Scripts - Formuliercontrole met behulp van PHP filters</title>

    <link rel="stylesheet" href="../styles/default.css" type="text/css" media="screen" />
    <style type="text/css">        
        input.error {
            border: 2px solid #FF0000;
        }
    </style>
</head>
<body>
    <div id="wrap">
        <p class="none small align-right"><a href="/view/40/">&lt;-- Terug naar Scripts</a></p>
        <h1>Formuliercontrole met behulp van PHP filters</h1>
        
        <div id="info">
            <p>PHP versie: &gt;= 5.2.0</p>
        </div>
        
        <p>De input in onderstaand formulier wordt gecontroleerd met behulp van PHP filters. Alle velden met een * zijn verplicht.</p>        
        <form action="#" method="post" name="example">
        <p>
            <label class="field" for="gebruiker" class="naast">Gebruikersnaam:</label>
            <input type="text"
                id="gebruiker"
                name="gebruikersnaam"
                value="<?php echo isset($_SESSION['input']['gebruikersnaam']) ? $_SESSION['input']['gebruikersnaam'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['gebruikersnaam']) && $_SESSION['errors']['gebruikersnaam'] == 'true') ? 'error' : ''; ?>"
            /> * (meer dan 3 tekens)
        </p>
        <p>
            <label class="field" for="voor" class="naast">Voornaam:</label>
            <input type="text"
                id="voor"
                name="voornaam"
                value="<?php echo isset($_SESSION['input']['voornaam']) ? $_SESSION['input']['voornaam'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['voornaam']) && $_SESSION['errors']['voornaam'] == 'true') ? 'error' : ''; ?>"
            /> *
        </p>
        <p>
            <label class="field" for="achter" class="naast">Achternaam:</label>
            <input type="text"
                id="achter"
                name="achternaam"
                value="<?php echo isset($_SESSION['input']['achternaam']) ? $_SESSION['input']['achternaam'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['achternaam']) && $_SESSION['errors']['achternaam'] == 'true') ? 'error' : ''; ?>"
            /> *
        </p>
        
        <p>
            <label class="field" for="mail" class="naast">Email:</label>
            <input type="text"
                id="mail"
                name="email"
                value="<?php echo isset($_SESSION['input']['email']) ? $_SESSION['input']['email'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['email']) && $_SESSION['errors']['email'] == 'true') ? 'error' : ''; ?>"
            /> *
        </p>
        
        
                <p>
            <label class="field" for="mail2" class="naast">Hertyp Email:</label>
            <input type="text"
                id="mail2"
                name="email2"
                value="<?php echo isset($_SESSION['input']['email2']) ? $_SESSION['input']['email2'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['email2']) && $_SESSION['errors']['email2'] == 'true') ? 'error' : ''; ?>"
            /> *
        </p>
        
        
        <p>
            <label class="field" for="postcode" class="naast">Postcode:</label>
            <input type="text"
                id="postcode"
                name="postcode"
                value="<?php echo isset($_SESSION['input']['postcode']) ? $_SESSION['input']['postcode'] : ''; ?>"
                class="<?php echo (isset($_SESSION['errors']['postcode']) && $_SESSION['errors']['postcode'] == 'true') ? 'error' : ''; ?>"
            /> * (1234)
        </p>
        <p>
            <label class="field" for="woon" class="naast">Woonplaats:</label>
            <input type="text"
                id="woon"
                name="woonplaats"
                value="<?php echo isset($_SESSION['input']['woonplaats']) ? $_SESSION['input']['woonplaats'] : ''; ?>"
            />
        </p>
        <p>
            <label class="field" for="geboortejaar" class="naast">Geboortejaar:</label>
            <select id="geboortejaar" name="geboortejaar">
                <?php
                for($i = date('Y'); $i >= 1900; $i--)
                {

                    if(isset($_SESSION['input']['geboortejaar']) && $_SESSION['input']['geboortejaar'] == $i)
                    {

                        echo '<option value="'.$i.'" selected="selected">'.$i.'</option>';
                    }

                    else
                    {
                        echo '<option value="'.$i.'">'.$i.'</option>';
                    }
                }

                ?>

            </select>
        <p>
            <input type="submit" value="Verzenden" class="lijnuit" />
        </p>
        </form>        
        
        <?php
        // Weergeven van meldingen uit het phpscript.
        if(isset($aErrors))
        {

            echo '<ul>';
            foreach($aErrors as $sError)
            {

                echo '<li>'.$sError.'</li>';
            }

            echo '</ul>';
        }

        elseif(isset($aContent))
        {

            foreach($aContent as $sLine)
            {

                echo $sLine;
            }
        }

        ?>

    </div>
</body>
</html>
Gewijzigd op 01/01/1970 01:00:00 door Arne
 
PHP hulp

PHP hulp

05/12/2020 08:53:50
 
- Jim  -

- Jim -

04/02/2010 10:50:00
Quote Anchor link
Je geeft in de functie CheckEmail2 maar 1 parameter op, daar moet je dan ook beide email adressen opgeven :
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
function checkEmail2($sEmail2, $sEmail){
    
if (!$sEmail2 == $sEmail) {
 echo "Ongelijk";
} else {
 echo "Gelijk";
}  

}
 
Arne

Arne

04/02/2010 10:54:00
Quote Anchor link
dit had ik al geprobeerd, maar dan herkend ie nog steeds de var niet

Warning: Missing argument 2 for checkEmail2() in C:\xampp\htdocs\PHP\Project\registreer.php on line 42

Notice: Undefined variable: sEmail in C:\xampp\htdocs\PHP\Project\registreer.php on line 45

heeft dit te maken met het feit dat sEmail geen static variabele is?
 
Johan Dam

Johan Dam

04/02/2010 10:56:00
Quote Anchor link
je mist de 2e parameter, die geef je dus niet mee wanneer je de functie aanroept. daar ligt het probleem
 
- Jim  -

- Jim -

04/02/2010 10:58:00
Quote Anchor link
Je moet daarbij ook de functie met 2 parameters aanspreken:
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
checkEmail2($_POST['email1'], $_POST['email2']);
 
Arne

Arne

04/02/2010 10:59:00
Quote Anchor link
ja dat zei Jim ook al, maar dit had ik al geprobeerd, en werkt dus niet

hoe krijg ik die twee var dan wel in die functie?

thx
 
Johan Dam

Johan Dam

04/02/2010 11:02:00
Quote Anchor link
dan heb je het niet goed gedaan, de manier van Jim is toch echt hoe het moet
 
- Jim  -

- Jim -

04/02/2010 11:04:00
Quote Anchor link
nosferatu schreef op 04.02.2010 11:02:
dan heb je het niet goed gedaan, de manier van Jim is toch echt hoe het moet

:D
 
Arne

Arne

04/02/2010 11:06:00
Quote Anchor link
function checkEmail($sEmail)
{

if(preg_match("/^[_a-z0-9-]+(\.[_a-z0-9-]+)*@[a-z0-9-]+(\.[a-z0-9-]+)*(\.[a-z]{2,3})$/i", $sEmail)) {

return $sEmail;

}}



function checkEmail2($sEmail2, $sEmail){


if (!$sEmail2 == $sEmail) {

NULL;
}
}

geeft
Warning: Missing argument 2 for checkEmail2() in C:\xampp\htdocs\PHP\Project\registreer.php on line 42

Notice: Undefined variable: sEmail in C:\xampp\htdocs\PHP\Project\registreer.php on line 45
 
Thijs Damen

Thijs Damen

04/02/2010 11:10:00
Quote Anchor link
Arne:

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
<?
function checkEmail2($sEmail2, $sEmail) {
  if ($sEmail2 != $sEmail) {
    return false;
  }

  return true
}

$email1 = "1@2.nl";
$email2 = "1@2.nl";

if (checkEmail2($email2, $email1)) {
  //Mail is gelijk
} else {
 //Mail is niet gelijk
}
?>


Ten eerste: Je check klopt niet.
Ten tweede: Als je 2 arguments verwacht, moet er ook 2 geven (zie eerste error)
Gewijzigd op 01/01/1970 01:00:00 door Thijs Damen
 
Johan Dam

Johan Dam

04/02/2010 11:12:00
Quote Anchor link
een foutmelding is meestal meer dan een teken dat IETS fout gaat, soms zegt het zelfs WAT er fout gaat :O
 
Arne

Arne

04/02/2010 11:16:00
Quote Anchor link
ok, eerst en vooral, thx al voor de moeite kerels

maar het probleem is eigenlijk

mijn checkmail2 functie word aangesproken door de filters

'email2' => array (
'filter' => FILTER_CALLBACK,
'options' => 'checkEmail2' ),

en ik denk dat ik daar al die tweede parameter moet gaan meegeven?
maar hoe dan?
 
Thijs Damen

Thijs Damen

04/02/2010 11:25:00
Quote Anchor link
niet 100% zeker, maar daar is die functie niet voor bedoeld.
Je geeft aan 1 variable een filter op. niet aan 2.

Gewoon mijn code gebruiken,
ipv. returnen dit teruggeven. (bij failure)
Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
<?php
            $_SESSION
['errors']['email1'] = true;
            $_SESSION['errors']['email2'] = true;
            $aErrors[] = 'De emailadressen zijn niet gelijk';
?>


Gaat je eigen foutafhandeling door. Worden je velden netjes rood gemaakt, krijg je een nette foutmelding en word je formulier niet gesubmit.
 
Johan Dam

Johan Dam

04/02/2010 11:26:00
Quote Anchor link
als je het toch echt niet via een 2e parameter wilt, kan je ook global gebruiken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function checkEmail2($sEmail2) {
    global $sEmail;
    if ($sEmail2 != $sEmail) {
        return false;
    }

    return true
}
?>


de $sEmail die je wilt controleren moet dan elders in het script staan met dezelfde naam en de gewenste waarde
 
Arne

Arne

04/02/2010 11:37:00
Quote Anchor link
@ nosferatu
dat is bijna wat ik aan het zoeken ben
de errors zijn weg
enkel is de global var nu leeg

function checkEmail2($sEmail2) {

global $sEmail;
if ($sEmail2 != $sEmail) {

echo $sEmail.'1-';
echo $sEmail2.'2-';
}
}

geeft 1-arne88@cbe.be2-
dus $sEmail = leeg als ik hem oproep via global


@Thijs
sorry, maar blijkbaar ken ik nog minder van php dan ik dacht
ik begrijp niet goed waar ik dat stukje code van jou dan moet zetten :(
Gewijzigd op 01/01/1970 01:00:00 door Arne
 
- Jim  -

- Jim -

04/02/2010 11:40:00
Quote Anchor link
nosferatu schreef op 04.02.2010 11:26:
als je het toch echt niet via een 2e parameter wilt, kan je ook global gebruiken

Code (php)
PHP script in nieuw venster Selecteer het PHP script
1
2
3
4
5
6
7
8
9
<?php
function checkEmail2($sEmail2) {
    global $sEmail;
    if ($sEmail2 != $sEmail) {
        return false;
    }

    return true
}
?>


de $sEmail die je wilt controleren moet dan elders in het script staan met dezelfde naam en de gewenste waarde


auw....
Het kan wel, toch lijkthet me beter om de parameters rechtstreeks aan aan de functie door te geven. Het maakt de functie ook nuttiger en beter herbruikbaar!!
 
Johan Dam

Johan Dam

04/02/2010 11:43:00
Quote Anchor link
de variabele die je normaal gesproken mee zou geven aan de functie checkEmail2 (maar wat nu moeilijker word gezien ht filter gedoe) dat moet $sEmail worden, dus of je hernoemt hem of je doet $sEmail = $email (of hoe de oorspronkelijke email ook heet)

edit @jim

dit is een mogelijkheid, ik ben het met je eens dat het als een last resort moet worden gebruikt, andere alternatieven zijn zeer wss beter
Gewijzigd op 01/01/1970 01:00:00 door Johan Dam
 
Arne

Arne

04/02/2010 11:58:00
Quote Anchor link
ok, nogmaals thanks

ik probeer nu gewoon de waarde die in email2 is ingevuld
in een variabele te steken
hoe krijg ik die waarde uit de ingeputte gegevens in die var

$sEmail = ?
 
Thijs Damen

Thijs Damen

04/02/2010 12:06:00
Quote Anchor link
arne, waarom blijf je haken bij dat script. Ik heb je 100% code gegeven waarmee je het op een nette manier doet.

Wat je nu doet is vies, ranzig en gaat je nog veel meer gezeur opleveren.

Even een variabel globaal maken omdat die niet in je scope zit. Onzin.

De filter functie die jij gebruikt werkt gewoon niet met 2 variabelen. en ipv een normale oplossing verneuk je de rest van je code.
 
Arne

Arne

04/02/2010 12:23:00
Quote Anchor link
ok, bedankt thijs

heb uiteindelijk gekregen wat ik wou, maar ik begrijp dat het totaal fout is ...
ik ga mij maar eens gemakkelijker tutorialetje doen, waar ik op een normale manier een registreer formulier maak, valideer en naar database stuur ...

enige tips van zo een tutorial?
 
Thijs Damen

Thijs Damen

04/02/2010 12:29:00
Quote Anchor link
Nee helaas niet.
Als je gaat zoeken raad ik je wel aan om een beetje recente tutorials te lezen. Tutorials van 3-4 jaar oud zijn echt zwaar outdated tegenwoordig. of ga een boek lezen :)
 

Pagina: 1 2 volgende »



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.