Zoekend naar twee functienamen
Dit is wat ik momenteel heb:
if($username == "admin"){
echo "Gebruikersnaam ongeldig".$form;
exit;
}
Ik wil graag dat hij ook dit, bijvoorbeeld, automatisch controleert en blokt:
siteadmin [komt admin in voor, dus blokken]
adminman [admin dus blokken]
ADMIN [hoofdletters, maar wel admin, blokken]
AdMiN [Admin, dus blokken]
Is daar een functie voor?
- Mark - op 20/04/2012 16:45:57:
Dit is voor de eerste functie?
Beide, strpos is case-insensitive
Bedankt Mark :). Ik ga er naar kijken!
Precies iets waar ik ook naar op zoek ben. Helaas snap ik van die strpos niet veel?
echo "Gebruikersnaam ongeldig".$form;
exit;
}
Controleer altijd juist. In dit geval wil je controleren of strpos iets anders dan false terug geeft, is dat zo dan komt er admin in voor:
Tevens zie je dat ik hier === (of in dit geval !==) gebruik en geen ==, dat moet omdat je anders alsnog met falsy waardes te maken hebt (== en != zou eigenlijk verboden moeten worden).
Tevens komt je nooit een exit zomaar gebruiken. Handel je fouten mooi af, laat niet opeens het script stoppen.
Ook kun je veel beter gebruik maken van stripos in dit geval, omdat je case-insensitive wilt. Gaan werken met toupper functies (waarom niet tolower?) is dus echt niet handig.
Als laatst is grootveld opzoek naar een uitleg, niet naar een voorbeeld waar hij niks aan heeft.
En oh ja, we hebben hier code tags op het forum...
@M Grootveld, wat begrijp je er niet precies aan dan? Met 'ik snap er niks van' kunnen we niet veel, leg uit wat je wel begrijpt en bij welke stap je het niet meer begrijpt. Dan kunnen we je beter uitleggen.
Kijk anders even bij de PHP documentatie (strpos). Alles staat daar goed uitgelegd, begrijp je de documentatie niet? Lees dan eens: http://www.phphulp.nl/php/tutorial/overig/phpnet/757/
@Mark, strpos is niet case-insensitive, daarvoor hebben we stripos. (de i van case-insensitive)
Jij hebt het over die === & !== kan ik dat nou beeter altijd gebruiken in de plaats van == & != !? Want als ik het goed begrijpt controleerd === ook de type bijvoorbeeld of het beiden een string is tog?
== waarde is gelijk aan > 1 == '1' == true;
=== waarde én type gelijk > 1 != '1' != true;
Toevoeging op 20/05/2012 20:25:26:
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
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
<?php
function check_forbidden_usernames($string)
{
// list of forbidden words
$forbidden = array('admin', 'user', 'anoniem', 'useradmin'); // of meer
// search all this words in given string
foreach($forbidden as $forbid)
{
// if $string contains a forbidden word
if(substr_count(strtolower($forbid), strtolower($string)) != 0)
{
// return true (because it is forbidden)
return true;
}
}
// no forbidden words found, so false.
return false;
}
if(check_forbidden_usernames('administator'))
{
// trow error, name is not allowed;
}
?>
function check_forbidden_usernames($string)
{
// list of forbidden words
$forbidden = array('admin', 'user', 'anoniem', 'useradmin'); // of meer
// search all this words in given string
foreach($forbidden as $forbid)
{
// if $string contains a forbidden word
if(substr_count(strtolower($forbid), strtolower($string)) != 0)
{
// return true (because it is forbidden)
return true;
}
}
// no forbidden words found, so false.
return false;
}
if(check_forbidden_usernames('administator'))
{
// trow error, name is not allowed;
}
?>
Wel in het engels, maar ach, dat moet te doen zijn toch?
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
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
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
<?php
/* Deze functie zal kijken of er geen verboden woorden inzitten,
* return false wanneer dit wel zo is:
*/
function checkForbiddenWords($string) {
/* We gaan eerst een lijst met verboden woorden maken, dit kun
* je ook doen doormiddel van een database:
*/
$forbiddenWords =
array(
'admin',
'webmaster',
'beheer',
'mod',
'autist',
'autismens',
'kut',
'kk',
'kanker',
'klote',
'strator',
'stoned',
'drugs',
'',
'banga',
'pedo',
'penis',
'pik',
'lul',
'aut',
'kloot',
'aftrekken',
'klaarkomen',
'aalskakker',
'aambeienbeffer',
'aambeienlikker',
'aambeienschoffelaar',
'aambeihaarwasser',
'aangekleed nageboorte',
'aansteller',
'aap',
'aardappelhoer',
'aardappelluis',
'aardbanaan',
'aardgeest',
'aardpeer',
'aardpiraat',
'aardvarken',
'aardworm',
'aardworst',
'aars',
'aasgier',
'abortuskind',
'absjaar',
'achterbaksestoephoer',
'achterlader',
'achterlijke',
'achterlijke zoetwatermossel',
'achterlijk gebakkie',
'achterpoter',
'achterbuurtfossiel',
'afbak hoer',
'afgebakken frikandelhoofd',
'afgebefte del',
'afgebefde legoman',
'afgebeft',
'afgedankte kuthoer',
'afgedankte pornofotograaf',
'afgedankte wcbril',
'afgebrokkelde teenheks',
'afgekakte muizenstront',
'afgekakte bosaap',
'afgekeurd komkommertijd',
'afgekeurd-kutje',
'afgekeurde kuttige flubberkont',
'afgekeurde straathoer',
'afgekloofde discohippie',
'afgekloven afwasborstel',
'afgekloven',
'afgelebberd brood',
'afgelekte-koeiekak',
'afgelikteboterhammenlikker',
'neuken',
'seksen',
'sexen',
'sexn',
'anaal',
'hoer',
'slet',
'bitch',
'stoomkloot',
'gebruikersnaam',
'username',
'password',
'wachtwoord',
'voornaam',
'naam',
'firstname',
'first',
'name',
'achternaam',
'surename',
'email',
'webadres',
'web',
'youtube',
'bio',
'registreren',
'registreer',
'register',
'verplicht',
'neger'
);
/* Nu gaan we kijken of er een match is met de lijst
* hierboven:
*/
foreach($forbiddenWords as $forbiddenWord) {
/* Als het woord in $word voorkomt return dan het woord:
*/
if(preg_match('/'.str_replace('/', '\/', $forbiddenWord).'/usi', $string)) {
return $forbiddenWord;
}
}
}
/* Je moet dus checkForbiddenWords aanroepen met het woord dat gecontroleerd
* moet worden (bv. $username):
*/
if(checkForbiddenWords($username)) {
echo '<div id="foutmelding">Het woord <strong>\''.checkForbiddenWords($username).'\'</strong> is niet toegestaan.</div>'.$form;
exit;
}
?>
/* Deze functie zal kijken of er geen verboden woorden inzitten,
* return false wanneer dit wel zo is:
*/
function checkForbiddenWords($string) {
/* We gaan eerst een lijst met verboden woorden maken, dit kun
* je ook doen doormiddel van een database:
*/
$forbiddenWords =
array(
'admin',
'webmaster',
'beheer',
'mod',
'autist',
'autismens',
'kut',
'kk',
'kanker',
'klote',
'strator',
'stoned',
'drugs',
'',
'banga',
'pedo',
'penis',
'pik',
'lul',
'aut',
'kloot',
'aftrekken',
'klaarkomen',
'aalskakker',
'aambeienbeffer',
'aambeienlikker',
'aambeienschoffelaar',
'aambeihaarwasser',
'aangekleed nageboorte',
'aansteller',
'aap',
'aardappelhoer',
'aardappelluis',
'aardbanaan',
'aardgeest',
'aardpeer',
'aardpiraat',
'aardvarken',
'aardworm',
'aardworst',
'aars',
'aasgier',
'abortuskind',
'absjaar',
'achterbaksestoephoer',
'achterlader',
'achterlijke',
'achterlijke zoetwatermossel',
'achterlijk gebakkie',
'achterpoter',
'achterbuurtfossiel',
'afbak hoer',
'afgebakken frikandelhoofd',
'afgebefte del',
'afgebefde legoman',
'afgebeft',
'afgedankte kuthoer',
'afgedankte pornofotograaf',
'afgedankte wcbril',
'afgebrokkelde teenheks',
'afgekakte muizenstront',
'afgekakte bosaap',
'afgekeurd komkommertijd',
'afgekeurd-kutje',
'afgekeurde kuttige flubberkont',
'afgekeurde straathoer',
'afgekloofde discohippie',
'afgekloven afwasborstel',
'afgekloven',
'afgelebberd brood',
'afgelekte-koeiekak',
'afgelikteboterhammenlikker',
'neuken',
'seksen',
'sexen',
'sexn',
'anaal',
'hoer',
'slet',
'bitch',
'stoomkloot',
'gebruikersnaam',
'username',
'password',
'wachtwoord',
'voornaam',
'naam',
'firstname',
'first',
'name',
'achternaam',
'surename',
'email',
'webadres',
'web',
'youtube',
'bio',
'registreren',
'registreer',
'register',
'verplicht',
'neger'
);
/* Nu gaan we kijken of er een match is met de lijst
* hierboven:
*/
foreach($forbiddenWords as $forbiddenWord) {
/* Als het woord in $word voorkomt return dan het woord:
*/
if(preg_match('/'.str_replace('/', '\/', $forbiddenWord).'/usi', $string)) {
return $forbiddenWord;
}
}
}
/* Je moet dus checkForbiddenWords aanroepen met het woord dat gecontroleerd
* moet worden (bv. $username):
*/
if(checkForbiddenWords($username)) {
echo '<div id="foutmelding">Het woord <strong>\''.checkForbiddenWords($username).'\'</strong> is niet toegestaan.</div>'.$form;
exit;
}
?>
Dus als het goed is, krijg je niets terug??? Beetje raar. Ik zou nog onderaan de fucntie even een return false; toevoegen.
Tja, die woordenlijst is nogal lang.... afgekeurde staat er vaker in.
if(checkForbiddenWords($username)) {
echo '<div id="foutmelding">Het woord <strong>\''.checkForbiddenWords($username).'\'</strong> is niet toegestaan.</div>'.$form;
exit;
---
En wordt zo aangeroepen:
if($firstname && $lastname && $username && $password && $repassword){
if($username == require("forbidden.php")){
}
Vooral dit:
En daarbij: nu echoed je functie al HTML.
Meestal wil je dat niet. Wat als ik mijn fouten gewoon even in een array zet?
Kortom: functie gebruiken, maar wel aanpassen.
Gewijzigd op 20/05/2012 21:07:50 door Eddy E
Ja alles werkt zoals het werken moet :)
En die rare if, ja helaas werkt het. Echt overzichtelijk vind ik het zelf niet, maar hieronder maak ik er zelf ook gebruik van... :S
@Cailin, ik heb je functie even wat verbeterd. Het werkt nu sneller (omdat ik geen preg functie gebruik), als er 1 of meerdere woorden in voorkomen krijg je een array met al die woorden terug en zoniet krijg je false:
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
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
<?php
function checkForbiddenWords($txt)
{
$words = array(
'admin',
'webmaster',
'beheerder',
'mod',
'...'
);
$existingWords = array_filter($words, function ($item) use ($txt) {
if (strpos($txt, $item) !== false) {
return true;
}
return false;
});
if (count($existingWords) > 0) {
return $existingWords;
}
return false;
}
// voorbeeld
if ($forbiddenWords = checkForbiddenWords('Hello admin, I am a mod!') !== false) {
echo 'Er komen verboden woorden in voor: '.implode(', ', $forbiddenWords);
}
?>
function checkForbiddenWords($txt)
{
$words = array(
'admin',
'webmaster',
'beheerder',
'mod',
'...'
);
$existingWords = array_filter($words, function ($item) use ($txt) {
if (strpos($txt, $item) !== false) {
return true;
}
return false;
});
if (count($existingWords) > 0) {
return $existingWords;
}
return false;
}
// voorbeeld
if ($forbiddenWords = checkForbiddenWords('Hello admin, I am a mod!') !== false) {
echo 'Er komen verboden woorden in voor: '.implode(', ', $forbiddenWords);
}
?>