Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [PHP]Instrukcje warunkowe
Forum PHP.pl > Forum > Przedszkole
Szunaj85
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. sadsmiley02.gif
cycofiasz
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. ?>
Szunaj85
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ć? co_jest.gif
Na drugim warunku też mi zależy. wstydnis.gif
potreb
Cham to nie przekleństwo.
erix
  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. tongue.gif

PS. Tytuł raczej nie jest związany z warunkami. winksmiley.jpg
potreb
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
Szunaj85
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. ?>
erix
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.
Szunaj85
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. 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 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ć.
erix
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?
Szunaj85
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.
erix
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.
Babcia@Stefa
Jeśli chcesz kożystać z pierwszego sposobu dodaj do "zakazanego słowa" spację na końcu winksmiley.jpg

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

Pozdrawiam, WebNuLL
cycofiasz
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ć?
erix
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.
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.