Simpel woordenfilter
Ik heb zelf een simpel soort woordenfilter gemaakt, wat in mijn membersysteem moet komen. Nu wil ik dus verschillende gebruikersnamen verbieden. Ik dacht dat het zo zou moeten werken:
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
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<?php
if($_POST[form]) {
$string = "een, twee, drie, vier, vijf, zes, zeven, acht";
$explode = explode(",",$string);
for($i = 0; $i <= strlen($string); $i++){
if(isset($explode[$i])){
$check = $_POST[woord];
if(eregi($explode[$i], $check)){
$mag = false;
} else {
$mag = true;;
}
}
}
if ($mag == false) {
echo "deze gebruikersnaam mag niet";
} else {
echo "deze gebruikersnaam mag wel";
}
} else {
?>
if($_POST[form]) {
$string = "een, twee, drie, vier, vijf, zes, zeven, acht";
$explode = explode(",",$string);
for($i = 0; $i <= strlen($string); $i++){
if(isset($explode[$i])){
$check = $_POST[woord];
if(eregi($explode[$i], $check)){
$mag = false;
} else {
$mag = true;;
}
}
}
if ($mag == false) {
echo "deze gebruikersnaam mag niet";
} else {
echo "deze gebruikersnaam mag wel";
}
} else {
?>
<form name="form" method="post" action="test4.php">
<input name="woord" type="text" id="woord">
<input type="submit" name="form" value="Check">
</form>
Maar dit werkt dus niet, overal wordt bij gezegt dat de gebruikersnaam mag :S..weet iemand wat ik fout doe?
Bedankt, Sam
je hebt een spatie tussen de , en het volgende woord staan, aangezien het == is, denk ik dat hij door die spatie alles gewoon doorlaat, haal alle spaties eens weg, en probeer het nog eens.
Nee :( dit werkt niet...dan laat hij alsnog alles door...:s
Zet eens error_reporting(E_ALL); bovenaan je script en werk de notices die je krijgt eens weg :-)
Dit heb ik er nu van gemaakt:
Code (php)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
<?php
error_reporting(E_ALL);
$string = "een,twee,drie,vier,vijf,zes,zeven,acht";
$explode = explode(",",$string);
for($i = 0; $i <= strlen($string); $i++){
if(isset($explode[$i])){
$check = "twee";
if(eregi($explode[$i], $check)){
$mag = false;
} else {
$mag = true;;
}
}
}
if ($mag == false) {
echo "deze gebruikersnaam mag niet";
} else {
echo "deze gebruikersnaam mag wel";
}
?>
error_reporting(E_ALL);
$string = "een,twee,drie,vier,vijf,zes,zeven,acht";
$explode = explode(",",$string);
for($i = 0; $i <= strlen($string); $i++){
if(isset($explode[$i])){
$check = "twee";
if(eregi($explode[$i], $check)){
$mag = false;
} else {
$mag = true;;
}
}
}
if ($mag == false) {
echo "deze gebruikersnaam mag niet";
} else {
echo "deze gebruikersnaam mag wel";
}
?>
Iemand een idee waarom hij het niet zou doen???:S
ff logisch wat je scipt doet:
je hebt een string met 8 woorden die je controleerd aan de hand van een post. maar het loopt je controle altijd acht keer door (strlen). dus krijg je altijd true aan het einde terug als je 'twee' ingeeft. snapje?
dus ff logisich als je acht invoert zou je controle false moeten geven. als hij inderdaad doet dan moet je een manier te vinden om je uit je for loop te stappen.
dus is volg mij je script is niet fout maar je gedachte....
:D je heb gelijk ;) Ik moet dus uit die for ontsnappen zodra hij een fout vindt. Is dit te doen met een while? Ik ben daar niet zo handig in, maar dat moet toch kunnen?
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
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
<?php
error_reporting(E_ALL ^ E_NOTICE);
if(isset($_POST['btnOK']))
{
$string = "een, twee, drie, vier, vijf, zes, zeven, acht";
$explode = explode(",", $string);
$check = $_POST['woord'];
foreach($explode as $example)
{
if(eregi($check, $example))
{
$mag = false;
break;
}
else
{
$mag = true;
break;
}
}
if ($mag == false)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
error_reporting(E_ALL ^ E_NOTICE);
if(isset($_POST['btnOK']))
{
$string = "een, twee, drie, vier, vijf, zes, zeven, acht";
$explode = explode(",", $string);
$check = $_POST['woord'];
foreach($explode as $example)
{
if(eregi($check, $example))
{
$mag = false;
break;
}
else
{
$mag = true;
break;
}
}
if ($mag == false)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
<form name="form" method="post" action="#">
<input type="text" name="woord" value="een">
<input type="submit" name="btnOK" value="Check">
</form>
Gewijzigd op 04/02/2006 20:55:00 door Burdy
Hij werkt wel, maar alleen als je 'een' invoer, de bij de andere zegt hij dat hij wel goed is..., ook als ik de spaties na de comma weghaal..
Dit zou ik hebben gedaan:
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
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
<?php
error_reporting(E_ALL);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$fouteNamen = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht');
$gekozenNaam = strtolower($_POST['woord']);
/* methode 1, met in_array kijken of gekozenNaam in de array met fouteNamen zit. */
if(in_array($gekozenNaam, $fouteNamen))
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
/* methode 2, met strstr kijken we of een string in een grotere string voorkomt */
$found = false;
for($i = 0; $i < count($fouteNamen); $i++)
{
if(strstr($fouteNamen[$i], $gekozenNaam))
{
$found = true;
}
}
if($found)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
error_reporting(E_ALL);
if($_SERVER['REQUEST_METHOD'] == 'POST')
{
$fouteNamen = array('een', 'twee', 'drie', 'vier', 'vijf', 'zes', 'zeven', 'acht');
$gekozenNaam = strtolower($_POST['woord']);
/* methode 1, met in_array kijken of gekozenNaam in de array met fouteNamen zit. */
if(in_array($gekozenNaam, $fouteNamen))
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
/* methode 2, met strstr kijken we of een string in een grotere string voorkomt */
$found = false;
for($i = 0; $i < count($fouteNamen); $i++)
{
if(strstr($fouteNamen[$i], $gekozenNaam))
{
$found = true;
}
}
if($found)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
Ik hoop dat je er iets aan hebt.
Sam:
Hij werkt wel, maar alleen als je 'een' invoer, de bij de andere zegt hij dat hij wel goed is..., ook als ik de spaties na de comma weghaal..
Haha, je hebt gelijk, werkt voor geen meter.
Ik heb een nieuwe code voor je.
eregi heb ik nu vervangen door een eenvoudige vergelijking tussen strings.
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
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
<?php
error_reporting(E_ALL ^ E_NOTICE);
if(isset($_POST['btnOK']))
{
$string = "een,twee,drie,vier,vijf,zes,zeven,acht";
$explode = explode(",", $string);
$check = trim($_POST['woord']);
foreach($explode as $example)
{
$mag = true;
if($check == $example)
{
$mag = false;
break;
}
}
if ($mag == false)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
error_reporting(E_ALL ^ E_NOTICE);
if(isset($_POST['btnOK']))
{
$string = "een,twee,drie,vier,vijf,zes,zeven,acht";
$explode = explode(",", $string);
$check = trim($_POST['woord']);
foreach($explode as $example)
{
$mag = true;
if($check == $example)
{
$mag = false;
break;
}
}
if ($mag == false)
{
echo "deze gebruikersnaam mag niet";
}
else
{
echo "deze gebruikersnaam mag wel";
}
}
?>
<form name="form" method="post" action="#">
<input type="text" name="woord">
<input type="submit" name="btnOK" value="Check">
</form>
Geinig dat er ook fouten komen en dat deze dan weer worden opgelost!!
Ben reuze benieuwd weer naar het antwoord :-0
nog ff een vraagje moet het perse met php en dan array. is het niet veel simpeler om dit met sql te doen.
iets in de geest van:
Code (php)
de code is zo ff uit mijn hooft dus je moet er wel ff goed naar kijjken. (meestal doe ik dit met boek ernaast) maar het is veel makkelijker vergelijken met een database dan met een array. toch?
Code (php)
Met een database wordt het zo:
Code (php)
1
2
3
4
5
6
7
8
9
10
2
3
4
5
6
7
8
9
10
<?
if(isset($_POST['naam'])) {
$query="SELECT naam FROM tabel WHERE naam='".$_post['naam']."'";
$sql=mysql_query($query);
if(mysql_num_rows($sql)>=1) {
echo'naam niet toegestaan';
}else{
echo'naam toegestaan';
}}
?>
if(isset($_POST['naam'])) {
$query="SELECT naam FROM tabel WHERE naam='".$_post['naam']."'";
$sql=mysql_query($query);
if(mysql_num_rows($sql)>=1) {
echo'naam niet toegestaan';
}else{
echo'naam toegestaan';
}}
?>
Gewijzigd op 05/02/2006 12:56:00 door Robert Deiman