PHP-Script.hu
Kiemelt hirdetés:
2026. október 17. 12:27 szombat, ma Hedvig névnap van


grafika


Videóbázis


Listázás:  Idő szerint:
Webprogramozás arr PHP info Reg Tiltott nevek
(#8) Gabor válasza erre: (#7) RimElek 2012.09.13. 21:03

Gabor
Gabor
Szerkesztő

Nem mondtam hogy nem lehetne. (padminandor) sőt pont ezért írtam hogy:
" Persze ha csak úgy értetted hogy ez is használható ha az ember bizonyos neveket akar letiltani akkor valóban lehet ez egy egyszerűbb megoldás. "
Ezzel azt akartam mondani, hogy ha én értettem félre valamit és nem te gondolod rosszul hogy az én kis függvényem ugyanaz mint az in_array akkor még jobb megoldás mint amit én küldtem.
A minta illesztő függvényeket azért nem akartam használni mert gondoltam bárki könnyebben megérti a kódot ha én írom le a függvényt. De azért remélem nem haragszol kepnem vitatkozni akartam veledkep

(#7) RimElek válasza erre: (#5) Gabor 2012.09.13. 18:55

RimElek
RimElek
VIP

Én a te válaszodtól függetlenül válaszoltam onlyteszt -nek. És mivel semmivel nem utalt arra, hogy nem pontos egyezést vizsgálna, így arra mutattam példát.

Például miért ne lehetne olyan felhasználó, hogy: PadmiNandor, ha a becsületes neve Padmi Nándor. És nem emlékeztet az adminra.

De akárhogy is nézzük, van függvény a megoldásra.

1
2
3
4
5
6
$tiltottak = array('tiltott1', 'tiltott2', 'tiltott3');
$nev = "tiltott1Itiltott2";
 
if(preg_match('~'.implode('|', $tiltottak).'~i', $nev, $m) ) {
    echo 'A(z) '.$m[0].' tiltott szó!';    
}


vagy
1
2
3
4
 
if(preg_match_all('~'.implode('|', $tiltottak).'~i', $nev, $m) ) {
    echo 'A következő szavak tiltottak: '.implode(', ',$m[0]).'!';    
}

És akkor az összes előforduló hibás szót kiírja a névből.

onlyteszt, te pedig, ha kihagytad az "in_array" szócskát ( függvényt ), akkor pont, hogy teljesen másképp oldottad meg :)

(#6) onlyteszt 2012.09.13. 17:00

onlyteszt
onlyteszt
Kezdő

Köszöntem a segítségetkep
Hasonlóan csináltam, csak kihagytam azt az in_array szócskát:)

(#5) Gabor válasza erre: (#4) RimElek 2012.09.13. 15:58

Gabor
Gabor
Szerkesztő

Hát tény hogy van egy ilyen függvény csak nem "erre". Mármint ha ez alatt azt értetted, hogy az ervenyes_e függvény helyett, mert a két függvény nem ugyanúgy viselkedik. Az in_array akkor jelez egyezést ha az adott karakterlánc tiltott úgy ahogy van. Viszont én úgy gondoltam hogy ő bizonyos szavakat akar letiltani. Például:
Tiltott szó: admin
Megadott név: admin
=> mindkét függvény letiltja
Tiltott szó: admin
Megadott név: siteadmin vagy Super admin vagy Pityu [admin]
=> az in_array nem talál egyezést de az ervenyes_e függvény ekkor is letiltja a nevet
Persze ha csak úgy értetted hogy ez is használható ha az ember bizonyos neveket akar letiltani akkor valóban lehet ez egy egyszerűbb megoldás.

(#4) RimElek válasza erre: (#1) onlyteszt 2012.09.12. 22:56

RimElek
RimElek
VIP

Van már erre függvény: in_array

1
2
3
4
5
6
 
if (in_array($nev, array('tiltott1','tiltott2','tiltottx'))) {
    echo "tiltott"; 
} else {
   echo "OK";
}


Persze itt még lehet bonyolítani, hogy kis és nagybetűk usernévnél megegyeznek általában. De ahhoz csak a beírt nevet kell kisbetűsre alakítani.

Vagy adatbázisban tárolod és megnézed, van-e olyan név már benne.

(#3) Gabor válasza erre: (#1) onlyteszt 2012.09.12. 14:44

Gabor
Gabor
Szerkesztő

Én neked valami egyszerűbbet javaslok mint amit Geeb mondott pl.:

1
2
3
4
5
6
7
8
9
function ervenyes_e($nev) {
$tiltott = array("eznemjo", "ez sem");
foreach($tiltott as $szo) {
if(strpos($nev,$szo)!==FALSE) {
return $szo;
}
}
return TRUE;
}


és ezt a fügvényt használhatod az ellenőrzésre így:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
 
//megnézzük hogy érvényes-e a felhasználó név
$engedely = ervenyes_e($nev) //ha a név érvényes $engedely értéke TRUE ha nem akkor egy karakterlánc mégpedig az a szó amelyiket a $nev tartalmaz pedig tilos
// példa tiltott szavak kaka, pisi
// $nev = "gabor" => $engedely = TRUE
// $nev = "kiskakas" => $engedely = "kaka"
 
//ellenőrzés
if($engedely!==TRUE){
echo "Hiba a $engedely szó le van tiltva így ez a felhasználó név nem használható";
} else {
 // érvényes felhasználónév mehetünk tovább
}
 

remélem nem zavartalak össze a sok kommenttel nagyon. Remélem segítettem kep

(#2) Geeb válasza erre: (#1) onlyteszt 2012.09.12. 12:43

Geeb
Geeb
Kezdő

cenzúraként nem találtál semmit?
Most találtam munjkahelyen vagyok:

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
 
A szotar.txt tartalma:
 
<iframe>:&#
<script>:##
.
.
.
és így tovább...
 
Tehát esetünkben az <iframe> taget lecseréljük egy "&#"-re.   
Ennek a megoldásnak nagy előnye - mármint, hogy egy fájlból olvassa be ezeket az
értékeket -  az, hogy
nagyon könnyen, bárki által egyszerűen módosítható/testreszabható az, hogy ki
mit szűr. Így aztán ezt lehet
éppúgy tagek szűrésére használni mint egy üzenőfal cenzúrázására, vagy egy
kezdetleges titkosításra. 
És akkor jöjjön a lényeg a script, amit igyekeztem a lehető legrövidebben
megírni.
 
<?php
$text=$_GET['text'];
//első rész
$fajl="szotar.txt"; 
$file=fopen($fajl, "r");
while(!feof($file))
{
$sor=fgets($file,1024);
$szotar[]=$sor;
}
//második rész
For ($x= 0; $x <= count($szotar)-1; $x=$x+1)
{
$text2=explode(":", $szotar[$x]);
$text3[]=$text2[0];
$text4[]=$text2[1];
}
//harmadik rész
$text5 = str_replace($text3, $text4, $text);
print $text5;
?>
 
Magyarázat:
A script egy form által, GET metódussal küldött text input tartalmát elhelyezi
egy $text nevű változóban.
Értelem szerűen ezt a változót szeretnénk megtisztítani a különböző kódoktól. 
 
Első rész: Itt beolvasásra kerül a szotar.txt fájl tartalma. A fájl teljes
tartalmát
ezután soronként beleírjuk egy $szotar nevű tömbbe.
 
második rész: Szétszedjük a $szotar tömben található sorokat ":" mentén. 
Itt kezd egy kicsit bonyolodni a dolog . Miután szétszedtük az adot sort
pl.: <iframe>:&# 
ebből lesz egy <iframe> és egy &# .
Tehát esetünkben a $text2[0] értéke <iframe>, míg $text2[1] &# lesz.
Ezen értékeket külön-külön behelyezzük megint egy tömbe azért, hogy aztán 
az összes kiolvasott sor [0] és [1] elemére hivatkozhassunk. 
 
Harmadik rész: Itt történik meg a karakterlánc lecserélése, tehát itt lesz az
<iframe> -ből &#. Majd kiiratjuk az egészet a képernyőre. 
 
 
Amennyiben nem teljesen világos, hogyan is működik a script nem kell kétségbe
esni.
Ebben az esetben ajánlom az explode(), str_replace() függvények alaposabb
megismerését
illetve a tömbökkel való műveletek elsajátítását. 
 
Felhasználás:
 
//egy fórum űrlapja//---(method=GET)--->//cenzura.php//=>//kiiratás, vagy
továbbadás//
 
 
űrlap:
 
<form action=cenzura.php method=GET>
Üzenet: <input type=text name=text>
<input type=submit value=mehet>
</form>
 
Jelen esetben ezaz űrlap elküldi a text nevű input tartalmát a cenzura.php-nek,
ami elvégzi rajta a szűrést,
a szotar.txt fájlt beállításától függően, majd az kiírja a márt
megszűrt/cenzurált stringet a képernyőre.
 
pl.: szotar.txt tartalma
 
<:#
>:##
":&
':&&
_:,
%:.
/:-
\:--
 
 
Összefoglalás:
 
A cenzura.php modult tudom ajánlani azoknak, akik egy valamennyire
automatizált moderációs üzenőfalat/fórumot/vendégkönyvet akarnak csinálni.
Egy olyan szotar.txt fájl összeállítását javaslom mellé, amiben szűrésre kerülnek 
az általunk veszélyesnek talált tagek, illetve metakarakterek, és mellette
esetlegesen a ronda szavak is. 


(#1) onlyteszt 2012.09.11. 18:22

onlyteszt
onlyteszt
Kezdő

Próbálgattam de nem igen akar sikerülni:)
Regisztrációba szeretnék egy tiltott neveket szűrő funkciót.
Valami hasonlóra gondolok hogy:

1
2
3
4
5
6
7
 
if($nev == $tiltott_nevek){echo"Tiltott név...";}
 
vagy
 
if(tiltott($nev)){echo"Tiltott név...";}
 

Listázás:  Idő szerint:


© 2006-2026 PHP-Script.hu, Minden jog fenntartva!
Design: Rácz Gergely, Oldalmotor: Rácz Gergely
Impresszum - Oldaltörténet - Oldalszabályzat