Stránka 1 z 3

Při odeslání zprávy kontrola slova, nevhodné slovo neodeslat

Napsal: 15 črc 2014 08:45
od Gizzer2
Zdravím,
potřeboval bych poradit následující.

Potřeboval bych poradit jakým způsobem kontrolovat slova psaná do teaxtera a pokud se tam objeví nevhodné slovo zprávu neodeslat. Slovo které považuji za nevhodné je "heslo".

Tudíž pokud odesílaný vzkaz do chatu bude obsahovat toto slovo zpráva se neodešle a vyskočí hláška o tom že uživatel používá nevhodné slovo.

Scripty:
index.php

Kód: Vybrat vše

<?php
  session_start();
  require "../settings.php"; // Vloží soubor s třídou User
require "../user.class.php"; // Vloží soubor s třídou User
$user = new User; // Zavede třídu do proměnné
$user->load(); // Pokusí se přihlásit uživatele z uložených údajů v _SESSION nebo _COOKIE
$_SESSION['jmeno'] =  $user->jmeno ;
$_SESSION['admin'] = $user->admin ;
$_SESSION['id'] =  $user->id ;
?>
<!DOCTYPE html>
<html>       
  <head>
  <meta http-equiv="content-type" content="text/html; charset=UTF-8">             
    <title>AJAX chat     
    </title>             
    <link rel="stylesheet" href="/chat/css/style.css">           
  </head>
             
  <body>                           
    <div class="chat">                       
      <div class="messages">     
      </div>
      <div class="emotikons">
      <img onclick="Smile(':-)')" src="smileys/1.gif" width="15" height="15" align="middle">
<img onclick="Smile(':-(')" src="smileys/2.gif" width="15" height="15" align="middle">
<img onclick="Smile(':-D')" src="smileys/3.gif" width="15" height="15" align="middle">
<img onclick="Smile(':-P')" src="smileys/4.gif" width="15" height="15" align="middle">
<img onclick="Smile(';-)')" src="smileys/5.gif" width="15" height="15" align="middle">
<img onclick="Smile('X[]')" src="smileys/6.gif" width="20" height="15" align="middle">
<img onclick="Smile('B-]')" src="smileys/7.gif" width="15" height="15" align="middle">
<img onclick="Smile(':-!')" src="smileys/8.gif" width="20" height="15" align="middle">
<img onclick="Smile(':-/')" src="smileys/9.gif" width="25" height="15" align="middle">
<img onclick="Smile('blee')" src="smileys/10.gif" width="25" height="15" align="middle">
<br /></div>         
<textarea class="entry" id="zprava" placeholder="Zprávu odešleš pomocí enter. Na další řádek jdi pomocí SHIFT + ENTER. Nepište si zde o heslo!!"></textarea>                 
    </div>               
<script src="http://code.jquery.com/jquery-2.0.3.js"></script>               
<script src="/chat/js/chat.js"></script>             
  </body>   
</html>


chat.js

Kód: Vybrat vše

var chat = {}
chat.fetchMessages = function () {
   $.ajax({     url: '/chat/ajax/chat.php',
       type: 'post', 
          data: { method: 'fetch' }, 
             success: function(data) {
                    $('.chat .messages').html(data);   
                      } 
                       });
                         }
             chat.throwMessage = function (message) {
             if ($.trim(message).length !=0) {
             $.ajax({     
             url: '/chat/ajax/chat.php',
             type: 'post',   
              data: { method: 'throw', message: message },
                success: function(data) {     
                  chat.fetchMessages();   
                  chat.entry.val('');
           } 
            });   
              } 
               }
               
                chat.entry = $('.chat .entry');
              chat.entry.bind('keydown', function(e) {
                    if (e.keyCode === 13 && e.shiftKey === false) { 
                            chat.throwMessage($(this).val());
                  event.preventDefault();     
                      }     
                       });
   chat.interval = setInterval(chat.fetchMessages, 15000);
   chat.fetchMessages();
   
   
function Smile(smiley)
    {
   
        var currentText = document.getElementById("zprava");
       
        var smileyWithPadding = " " + smiley + " ";
        currentText.value += smileyWithPadding;
    currentText.focus();
   
    }
        function Names(name)
    {
   
        var currentText = document.getElementById("zprava");
       
        var nameWithPadding = ""+name+"";
        currentText.value = nameWithPadding;
    currentText.focus();
   
    }
   


Chat.php

Kód: Vybrat vše

<?php
class Chat extends Core{
     public function fetchMessages() {
          $this->query("
           SELECT     `chat`.`message`,
                       `chat`.`timestamp`,
                       `chat`.`ip`,
                       `chat`.`message_id`,
                       `uzivatele`.`jmeno`,
                       `uzivatele`. `id`,
                       `uzivatele`. `admin`
           FROM        `chat`
           JOIN        `uzivatele`
           ON          `chat`.`id` = `uzivatele`.`id`
           ORDER BY    `chat`.`timestamp`
           DESC           
          ");
         
          return $this->rows();
     }
     public function throwMessage($id, $message){
     $adr=$_SERVER["REMOTE_ADDR"];   
         $this->query("
             INSERT INTO `chat` (`id`, `message`, `timestamp`, `ip`)
             VALUES (" . (int)$id.", '" .$this->db->real_escape_string($message) ."', UNIX_TIMESTAMP(), '$adr')
         
         ");
     }
}


Budu vděčný za radu. :clap:

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:13
od lucAss
Z toho, co jsi napsal to chápu tak, že potřebuješ pouze kontrolovat, jestli tam není jedno slovo, ale bude to asi jako cenzura, že? Že bude někde v databázi seznam slov, popř. ve scriptu budeš mít array a v ní slova k vycenzurování..

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:16
od Gizzer2
Jde mi jen o jedno jediné slovo a to slovo je "heslo" takže když někdo napíše větu do chatu a v té větě bude slovo heslo a pokusí se zprávu odeslat, vyskočí mu hláška o tom že použil nevhodné slovo a zpráva se neodešle.
Umím už v odeslané zprávě to slovo scenzůrovat, ovšem není dobré že se vůbec ta zpráva s tím slovem odeslala.

--- Doplnění předchozího příspěvku (15 Črc 2014 09:20) ---

Osobně si myslím že by bylo nejlepší použít javascript, ovšem vůbec nevím jak.

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:27
od lucAss
Já bych to přes js neřešil, ale udělal bych to klasicky přes funkci strstr..
Tím myslím:

Kód: Vybrat vše

<?php
if(strstr($retezec-textarea, "heslo"))
{
   echo "Textarea obsahuje slovo heslo";
}
?>

Tohle řešit přes js je zbytečné.
Ale jestli to chceš přes js..

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:31
od Gizzer2
Vyzkouším to ale ještě mi prosím řekni kam tohle vložit?

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:39
od lucAss
Do části, kde script zpracovává tu zprávu - tj. odesílá do db. Což je tedy toto:

Kód: Vybrat vše

  public function throwMessage($id, $message){
     $adr=$_SERVER["REMOTE_ADDR"];   
      if(!strstr($message, "heslo")){
         $this->query("
             INSERT INTO `chat` (`id`, `message`, `timestamp`, `ip`)
             VALUES (" . (int)$id.", '" .$this->db->real_escape_string($message) ."', UNIX_TIMESTAMP(), '$adr')
         
         ");
      }else{
        die("Text obsahuje slovo heslo!");
      }


Pokud si spustím tento script:

Kód: Vybrat vše

<?php
$retezec = "Toto je řetězec, v kterém se nachází slovo heslo";
if(strstr($retezec, "heslo"))
{
   echo "Textarea obsahuje slovo heslo";
}
?>

Tak mi vyjede: Textarea obsahuje slovo heslo

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:44
od Gizzer2
Děkuji.

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:51
od lucAss
Nemáš zač. Funguje?

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:54
od Gizzer2
Funguje, zpráva se neodešle tak jak má.
Teď ještě dokoumat aby to vyhodilo JS hlášku že není možné takovou zprávu odeslat, místo toho echa.

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 09:58
od lucAss
alert? http://imgur.com/TGNh0A7

Kód: Vybrat vše

<script type"text/javascript">
alert("Text obsahuje nepovolené slovo!");
</script>

Nebo jakou js hlášku?

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 10:01
od Gizzer2
přesně takovouto hlášku, co se týče toho jak to napsat jsem věděl ale už zase nevím kam :D

Re: Při odeslání zprávy kontrola slova, nevhodné slovo neode

Napsal: 15 črc 2014 10:04
od lucAss

Kód: Vybrat vše

public function throwMessage($id, $message){
     $adr=$_SERVER["REMOTE_ADDR"];   
      if(!strstr($message, "heslo")){
         $this->query("
             INSERT INTO `chat` (`id`, `message`, `timestamp`, `ip`)
             VALUES (" . (int)$id.", '" .$this->db->real_escape_string($message) ."', UNIX_TIMESTAMP(), '$adr')
         
         ");
      }else{
      ?>
        <script type"text/javascript">
      alert("Text obsahuje nepovolené slovo!");
      </script>
      <?
      }
      ?>