Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

 
Reply to this topicStart new topic
> [PHP]Instrukcje warunkowe
Szunaj85
post
Post #1





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Tworze formularz, a raczej skrypt do niego. Sprawdza on oczywiście poprawność wpisanych danych w odpowiednie pola. Więc mam 2 pytania co do instrukcji warunkowych.
1. Chciałbym stworzyć warunek (if), który trzymałby w tablicy wulgarne słowa. W momęcie kliknięcia przeszukiwałby (pola formularza) tekst/zmienne pod względem takich samych wyrazów. I gdy znajdzie przekleństwo wyświetlałby komunikat.
Tylko, że tu trzeba uwarzać żeby warunek brał pod uwagę słowa pisane z małych jak i dużych liter (Wiem, że jest taka funkcja nie zwracająca uwagi na wielkość liter, ale nie pamiętam jej nazwy). No i na słowa zawierające tak jaby już w sobie przekleństwo.
Np. początek_słowa_przekleństwo_koniec_słowa.
Szukałem i w internecie i na forum, ale raczej to są skrypty, a nie instrukcje warunkowe w dodatku korzystające z plików txt.
2. Jak stworzyć warunek (if), który w momęcie kliknięcia przeszukiwałby (pola formularza) tekst/zmienne pod względem powtarzających się takich samych znaków? Dajmy na to gdy jakiś znak występuje 3 lub więcej razy pod rząd Np. 'ccc', 'accca', 'ccccc', 'accccca'. I gdy znajdzie wyświetlałby komunikat.
Oczywiście instrukcje warunkowe w miarę umiem pisać, ale na tych 2 problemach utknąłem. (IMG:http://forum.php.pl/style_emoticons/default/sadsmiley02.gif)

Ten post edytował Szunaj85 24.01.2009, 19:10:12
Go to the top of the page
+Quote Post
cycofiasz
post
Post #2





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


Ja bym to zrobił tak:

  1. <?php
  2. $przeklenstwa = array('przeklenstwo1','przeklenstwo2','przeklenstwo3');
  3.  
  4. if($_POST[tresc])
  5. {
  6.    foreach($przeklenstwa as $przeklenstwo)
  7.    {
  8.        if (strstr(strtolower($_POST[tresc]),$przeklenstwo))
  9.        $wulgarnosc = 1;
  10.    }
  11.  
  12.    if($wulgarnosc == 1)
  13.    {
  14.        echo "Nie klnij!<br />";
  15.    }
  16. }
  17. ?>
Go to the top of the page
+Quote Post
Szunaj85
post
Post #3





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Na pierwszy rzut oka warunek działa. Jednak tak jak pisałem wyżej uznaje za przekleństwo słowa, które mają w sobie jedynie ciąg znaków przekleństwa. Nie chcę tutaj przeklinać, ale... np. cham - champion.
Da się temu jakoś zaradzić? (IMG:http://forum.php.pl/style_emoticons/default/co_jest.gif)
Na drugim warunku też mi zależy. (IMG:http://forum.php.pl/style_emoticons/default/wstydnis.gif)
Go to the top of the page
+Quote Post
potreb
post
Post #4





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cham to nie przekleństwo.
Go to the top of the page
+Quote Post
erix
post
Post #5





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




  1. <?php
  2. if($_POST[tresc])
  3. ?>

A co to za nowa stała?

1:
  1. <?php
  2. echo preg_replace('#([ _]{1})(WYRAZ)([ _]{1})#si', '$1***$3', $x);
  3. ?>

może to nie jest najlepszy wzorzec, pisany z palca.

2:
Cytat
Dajmy na to gdy jakiś znak występuje 3 lub więcej razy pod rząd Np. 'ccc', 'accca', 'ccccc', 'accccca'. I gdy znajdzie wyświetlałby komunikat.

Jak dla mnie, wyszłoby bardzo dużo kombinacji...

~potreb, nie to jest problemem. (IMG:http://forum.php.pl/style_emoticons/default/tongue.gif)

PS. Tytuł raczej nie jest związany z warunkami. (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)
Go to the top of the page
+Quote Post
potreb
post
Post #6





Grupa: Zarejestrowani
Postów: 1 568
Pomógł: 192
Dołączył: 7.03.2005
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Oj przepraszam, ale czasami można szukać sobie dodatkowej dziury w płocie.

Jeżeli chcesz wyeliminować taki przypadek jak przekleństwo w słowie, np: "obśmiechujki" wtedy możesz zastosować banalną metodę, dać spację po słowie chu... wtedy wyeliminujesz wulgaryzmy.

Z drugiej strony jestem ciekaw co zrobisz jak ktoś wklepie np szyk D.E.B.I.L

Proponuje oprócz prostej metody, rejestracja + banowanie
Go to the top of the page
+Quote Post
Szunaj85
post
Post #7





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Cytat
Jak dla mnie, wyszłoby bardzo dużo kombinacji...
erix myślałem, że to będzie prosty warunek, ale skoro tak twierdzisz.
Cytat
Jeżeli chcesz wyeliminować taki przypadek jak przekleństwo w słowie, np: "obśmiechujki" wtedy możesz zastosować banalną metodę, dać spację po słowie chu... wtedy wyeliminujesz wulgaryzmy.
potreb No na to bym nie wpadł. Ten pomysł jest prawie idealny.
Cytat
Z drugiej strony jestem ciekaw co zrobisz jak ktoś wklepie np szyk D.E.B.I.L
Też się zastanawiałem nad tym problemem.
Dobra to jeszcze jedno pytanie. Warunek cycofiasz nawet nieźle działa. Mam jeszcze jedno pytanie. Jak przerobić ten warunek tak żeby prócz zmiennej "tresc" (w tym przypadku) sprawdzał przy okazji jeszcze dwie inne zmienne? Przecież nie będę trzy razy wpisywał tego warunku.
  1. <?php
  2. $przeklenstwa = array('przeklenstwo1','przeklenstwo2','przeklenstwo3');
  3.  
  4. if($_POST[tresc])
  5. {
  6.    foreach($przeklenstwa as $przeklenstwo)
  7.    {
  8.        if (strstr(strtolower($_POST[tresc]),$przeklenstwo))
  9.        $wulgarnosc = 1;
  10.    }
  11.  
  12.    if($wulgarnosc == 1)
  13.    {
  14.        echo "Nie klnij!<br />";
  15.    }
  16. }
  17. ?>


Ten post edytował Szunaj85 24.01.2009, 00:14:08
Go to the top of the page
+Quote Post
erix
post
Post #8





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A nie byłoby lepiej array_walk_recursive" title="Zobacz w manualu PHP" target="_manual?

Jeśli chodzi o Twój kod, to...
  1. <?php
  2. if(warunek OR warunek OR...
  3. ?>


IMHO lepszy byłby tu stripos" title="Zobacz w manualu PHP" target="_manual.

PS. NIE MA takiej stałej, jak tresc.
Go to the top of the page
+Quote Post
Szunaj85
post
Post #9





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Próbowałem z 'OR', ale jakoś mi ten skrypt nie działał. Ale skoro teraz wiem, że to na pewno 'OR' pewnie dojdę co jest nie tak. (IMG:http://forum.php.pl/style_emoticons/default/biggrin.gif)
Jeszcze jedno mi wczoraj umknęło. Pisaliśmy o spacji jako rozwiązaniu problemu brania przez warunek słów za wulgarne, gdy w rzeczywistości nimi nie są. Nie chcę ponownie przeklinać, ale... np. cham - champion.
  1. <?php
  2. $przeklenstwa = array(' przeklenstwo1 ',' przeklenstwo2 ',' przeklenstwo3 ');
  3. ?>
Czy można wstawić jakieś mniej prymitywne rozwiązanie w ten powyższy warunek (2 posty wyżej). Żeby brał pod uwagę każdy znak + spacje lub jego brak oprócz liter przed i po słowie z tablicy czy coś w tym stylu? Np. dowolny_znak+słowo+dowolny_znak (IMG:http://forum.php.pl/style_emoticons/default/co_jest.gif)
erix słusznie tutaj sygnalizuje.
  1. <?php
  2. if($_POST[tresc])
  3. ?>
Też wcześniej zauważyłem ten błąd, ale przy kopiowaniu zapomniałem poprawić.

Ten post edytował Szunaj85 24.01.2009, 19:22:54
Go to the top of the page
+Quote Post
erix
post
Post #10





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Nie chcę ponownie przeklinać, ale... np. cham - champion.

http://sjp.pwn.pl/lista.php?co=cham - nie jest wulg.

Cytat
Czy można wstawić jakieś mniej prymitywne rozwiązanie w ten powyższy warunek (2 posty wyżej). Żeby brał pod uwagę każdy znak + spacje oprócz liter czy coś w tym stylu?

A mój preg?
Go to the top of the page
+Quote Post
Szunaj85
post
Post #11





Grupa: Zarejestrowani
Postów: 392
Pomógł: 7
Dołączył: 11.05.2008

Ostrzeżenie: (0%)
-----


Cytat
A mój preg?
erix zawsze piszesz bardzo ogólnie.
Oczywiście próbowałem coś tam kombinować, ale nie wiem co z tym kawałkiem kodu zrobić. Czy wstawić gdzieś w powyższy kod na którym się opieram, a jeśli tak to gdzie? Czy jak? Napisałbyś coś więcej, żebym wiedział o co chodzi.
Go to the top of the page
+Quote Post
erix
post
Post #12





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




A zaglądałeś do manuala?

Krótkie pytanie wyciągające: co robi preg_replace" title="Zobacz w manualu PHP" target="_manual?

Cytat
erix zawsze piszesz bardzo ogólnie.

Owszem, aby dana osoba wykazała więcej zaangażowania w rozwiązanie problemu. Ja tylko naprowadzam, problem masz rozwiązać TY.
Go to the top of the page
+Quote Post
Babcia@Stefa
post
Post #13





Grupa: Zarejestrowani
Postów: 654
Pomógł: 17
Dołączył: 19.03.2006
Skąd: z kosmosu ;)

Ostrzeżenie: (0%)
-----


Jeśli chcesz kożystać z pierwszego sposobu dodaj do "zakazanego słowa" spację na końcu (IMG:http://forum.php.pl/style_emoticons/default/winksmiley.jpg)

Czyli "abc " a nie "abc" a z pewnością znajdzie tylko jedno abc w tym ciagu znaków: "abcd abc"

Pozdrawiam, WebNuLL
Go to the top of the page
+Quote Post
cycofiasz
post
Post #14





Grupa: Zarejestrowani
Postów: 711
Pomógł: 127
Dołączył: 5.07.2008
Skąd: Łódź

Ostrzeżenie: (0%)
-----


O co wam chodzi z tą stałą? Jak pisałem skrypt, to miałem pole textarea w formularzu o nazwie 'tresc', więc odwoływałem się do niego przez $_POST[tresc] i działało... Wiem że powinno to być w cudzysłowiu, ale skoro działa to po co kombinować?
Go to the top of the page
+Quote Post
erix
post
Post #15





Grupa: Moderatorzy
Postów: 15 467
Pomógł: 1451
Dołączył: 25.04.2005
Skąd: Szczebrzeszyn/Rzeszów




Cytat
Wiem że powinno to być w cudzysłowiu, ale skoro działa to po co kombinować?

Bo tak NIE POWINNO być. Będziesz miał kod:

  1. <?php
  2. define('tresc', 'skdjghksaghddfgf', true);
  3. echo $_POST[tresc];
  4. ?>

To nie będzie szukało elementu tresc, tylko skdjghksaghddfgf

Daj sobie na początku:
  1. <?php
  2. error_reporting(E_STRICT);
  3. ?>

to wtedy zrozumiesz.
Go to the top of the page
+Quote Post

Reply to this topicStart new topic
2 Użytkowników czyta ten temat (2 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Aktualny czas: 22.08.2025 - 22:52