Pokaż wyniki od 1 do 7 z 7

Wątek: [PHP][MySQL]Chat by Khulmar na podstawie skryptu saziana

  1. #1
    Programista
    Dołączył
    Dec 2008
    Posty
    776

    Post [PHP][MySQL]Chat by Khulmar na podstawie skryptu saziana

    http://forum.mmocenter.pl/showthread...t=piszemy+chat

    W bazie danych tworzymy tabelę chat (pola: id, sender, message).

    Chyba nie muszę wspominać, by posiadać własny plik config.php, który łączy z bazą danych

    Pobieramy biblioteczkę jquery (Link: http://jquery.com)

    chat.php

    Kod php:
    <?php 
    session_start
    (); 
    $_SESSION['player'] = 'Khul';
    ?>
    <html>
    <head>
    <title>Chat - testowy</title>
    <script type="text/javascript" src="jquery-1.4.2.min.js"></script>
    <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
    <meta http-equiv="Content-Language" content="pl" />
    <meta name="author" content="Khulmar" />
    </head>

    <style type="text/css">
    * {
        color: black;
        font-size: 11px;
        font-family: Verdana;
    }
    a {
        color: #811f1f;
        font-size: 11px;
        text-decoration: underline;
        text-transform: none;    
    }
    a:hover {
        color: #551313;
        font-size: 11px;
        text-decoration: none;
        text-transform: none;
    }
    body{
        background: #9c9c9c; 
    }
    </style>

    <script type="text/javascript">
    function c_count (c_field, c_view, c_max)
    {
        if (c_field.value.length > c_max) {
            c_field.value = c_field.value.substr(0, c_max);
        }
        document.getElementById(c_view).innerHTML = c_max - c_field.value.length;
    }

    $(document).ready(function() {
        $("#size").click(function() {
            $.ajax( {
                type: "POST",
                url: "execute.php?action=size",
                data: "size="+$("#size").val(),
                success: function() {  
                    $("#chat").load("execute.php?action=view");
                }
            })
            return false;
        });
        $('#truncate').click(function() {
            var $this = $(this);
            $('.error, .message').remove();
            $('<span class="message">Czyszczę...<br /></span>')
            .css('color', 'orange')    
            .insertBefore($this);
            $.ajax( {    
                url: "execute.php?action=del",
                success: function() {
                    $("#chat").load("execute.php?action=view");            
                }
            })
            return false;
        })
        $("#send").submit(function() {
            var $this = $(this); 
            if ($this.find('input[name=tekst]').val() && $this.find('input').val()) {
                $('.error, .message').remove();
                $('<span class="message">Wysyłam...</span>')
                .css('color', 'green')
                .insertBefore($this);     
            } else {
                $('.error, .message').remove(); 
                $('<span class="error">Wypełnij wszystkie pola!</span>')
                .css('color', 'red')
                .insertBefore($this);             
            }
            $.ajax( {
                type: "POST",
                url: "execute.php?action=send",
                data: "tekst="+$("#tekst").val(),
                success: function() {  
                    $("#chat").load("execute.php?action=view");
                    $("#tekst").val('');
                }
            })
            return false;
        });
        window.setInterval(function() {
             $("#chat").load("execute.php?action=view");    
        },5000);
        window.setInterval(function() {
             $('.message').remove();    
        },1500);    
        $("#chat").load("execute.php?action=view");
    });
    </script>

    <body onload="$('#chat').load('execute.php?action=view');">

    <div align="center">
    <div align="left" style="width: 700px; background: #9C9C9C; border: 1px solid black; padding: 15px;">

    <table width="700">
    <tr><td width="300" valign="top">
    <form method="post" id="send" action="execute.php?action=send" >
    <i>Message:</i> <input onkeyup="c_count(this, 'licz', 255);" type="text" name="tekst" id="tekst" />
    <input type="submit" name="send" value="wyślij" /> 
    <span id="licz">255</span>
    </form>
    </td>
    <td width="100" valign="top">
    <a href="#" id="truncate">Wyczyść chat</a></span>
    </td>
    <td width="100" valign="top">
    <form method="post">
    <select name="size" id="size">
    <option value="11" <?php if ($_SESSION['size'] == '11') echo 'selected="selected"'?>>11px</option>
    <option value="12" <?php if ($_SESSION['size'] == '12') echo 'selected="selected"'?>>12px</option>
    <option value="13" <?php if ($_SESSION['size'] == '13') echo 'selected="selected"'?>>13px</option>
    <option value="14" <?php if ($_SESSION['size'] == '14') echo 'selected="selected"'?>>14px</option>
    <option value="15" <?php if ($_SESSION['size'] == '15') echo 'selected="selected"'?>>15px</option>
    <option value="16" <?php if ($_SESSION['size'] == '16') echo 'selected="selected"'?>>16px</option>
    </select>
    </form>
    </td>
    <td width="200" valign="top">
    <b>~ <?php echo $_SESSION['player']; ?></b>
    </td>
    </tr>
    </table>

    <br /><br />

    <div id="chat"></div>

    </div>
    </div>

    </body>

    </html>
    execute.php

    Kod php:
    <?php
    session_start
    ();

    require_once (
    'config.php');

    if (isset(
    $_SESSION['player'])) {
        switch (
    $_GET['action']) {
            case 
    'send': if (!empty($_POST['tekst'])) mysql_query("INSERT INTO `chat` SET `sender`='".$_SESSION['player']."', `message`='".mysql_escape_string($_POST['tekst'])."'"); header("Location: chat.php");
                         break;
            case 
    'del'mysql_query("TRUNCATE `chat`"); header("Location: chat.php");
                        break;
            case 
    'size': if (isset($_POST['size'])) $_SESSION['size'] = $_POST['size']; header("Location: chat.php");
                         break;
            case 
    'view': if (isset($_SESSION['player'])) {
                            
    $chat mysql_query('SELECT `id`, `sender`, `message` FROM `chat` ORDER  BY `id` DESC LIMIT 30');
                            if (
    mysql_num_rows($chat) > 0) {
                                echo 
    '<table style="width:600">';
                                
    $i 0;
                                while (
    $c mysql_fetch_array($chat)) {
                                    echo 
    '<tr class="chat">
                                            <td style="width:100px; background:gray; color:white; padding:2px; font-size:'
    .$_SESSION['size'].'px;">'.$c['sender'].'</td>
                                            <td style="background: gray; padding:2px; font-size:'
    .$_SESSION['size'].'px;">'.$c['message'].'</td>
                                          </tr>'
    ;
                                    
    $i++;
                                }
                                 echo 
    '</table><br />'.$i.' wypowiedzi.';
                            } else {
                                echo 
    '0 wypowiedzi.';
                            }
                        }
                        break;
        }
    }
    ?>
    Edit:

    Już tylko raz ładuje

    Dodałem powiększanie tekstu

    Rozbicie kodu na 2 pliki (zamiast 5)

    Strona testowa: http://harrocan.com.pl/khulmar/chat.php
    Ostatnio edytowane przez Khulmar ; 09-05-2010 o 14:27
    Kod php:
    echo 'A kij wam w oko!'
    Każdą decyzję analizuje na podstawie tysięcy IF'ów i ELSE'ów. ... na zasadzie (if) obiecałem (then) dzwonię - nonsopedia, informatyk

  2. #2
    Zasłużony Awatar karer
    Dołączył
    Apr 2008
    Posty
    2,554

    Domyślnie

    Fajnie tylko mam pewne zastrzezenie. Po co includujesz plik get.php w zrodlo strony a pozniej w body.onload dajesz jeszcze raz sciaganie tego pliku? To akurat jest bez sensu. Usunac jedno albo drugie.

    No i ogolnie nie lubie skryptow ktore WYMAGAJA do dzialania bibliotek trzecich. Tymbardziej ze ludzie nie wykorzystuja nawet 3% ich mozliwosci i uzywaja ich do dostania sie do danego obiektu tylko ;/

    Wiec konkluzja:
    -bezsensowne podwojne ladowanie chata
    -jalowa biblioteka jquery ktora tylko zamula strone.

    Czy jest ok? Powinno byc bo skomplikowane nie jest. Podstawowe funkcje. Ale na strone bym tego nie uzyl bo skrypt bardzo sztywny. Mozna sie ze mna nie zgadzac ale prosze nie wymagac ode mnie podania argumentu dlaczego sie nie zgadzam. To by bylo bezsensowne jak pytanie sie "dlaczego 2+2=4?". Pozatym oceniam dosyc surowo wszystko co widze bo oceniam to tak jakbym sam mial tego uzywac w przyszlosci.

  3. #3
    Programista
    Dołączył
    Dec 2008
    Posty
    776

    Domyślnie

    Dzięki za komentarz :P

    Tylko dlaczego sztywny? Ma być prosty do zrozumienia dla nowych i tyle.
    I jałowa biblioteka?
    Kod php:
    echo 'A kij wam w oko!'
    Każdą decyzję analizuje na podstawie tysięcy IF'ów i ELSE'ów. ... na zasadzie (if) obiecałem (then) dzwonię - nonsopedia, informatyk

  4. #4
    Zasłużony Awatar karer
    Dołączył
    Apr 2008
    Posty
    2,554

    Domyślnie

    Sztywny przykladowo dlatego ze masz 5 plikow. Jesli chcesz cos zmienic to musisz edytowac kazdy z osobna. Moznaby calosc umiescic w jednym pliku podzielonym na sekcje. Nie ma sensu rozbijanie 130 linijek na pare plikow... Za duzo lopatologii chocby z sensjami. Za duzo tekstu w kodzie js.

    Jalowa biblioteka to taka ktora jest wczytywana a nie jest uzywana. W tym wypadku wlasnie tak jest. Biblioteka jquery jest bardzo duza a wlasciwie nieuzywana. Te funkcje ktorych z niej uzywasz przeciez sa dostepne z poziomu zwyklego JS. Jedyna roznica jest zapis. Tak wiec includujesz biblioteke tylko dla innego zapisu w sumie. Ten zapis ktorego uzywasz jest bardzo malo intuicyjny. Zbyt duzo w nim niespojnosci. Jquery w tym wypadku jest totalnym dnem.

  5. #5
    Programista
    Dołączył
    Dec 2008
    Posty
    776

    Domyślnie

    Prawda to samo można, by zrobić za pomocą js (wyobrażam sobie nawet, że lepiej by to wyglądało, ale jest już jak jest).

    Masz rozbiłem na 2 pliki. Nie chce mi się kombinować w jednym.
    Ostatnio edytowane przez Khulmar ; 08-05-2010 o 17:45
    Kod php:
    echo 'A kij wam w oko!'
    Każdą decyzję analizuje na podstawie tysięcy IF'ów i ELSE'ów. ... na zasadzie (if) obiecałem (then) dzwonię - nonsopedia, informatyk

  6. #6
    Zarejestrowany
    Dołączył
    May 2009
    Posty
    11

    Domyślnie

    Proponuje jeszcze dodać kilka rzeczy...

    Jest "odliczanie" ilości znaków do końca ale mimo to, że pokazuje mi, że zostało 0 znaków to mogę dalej pisać. Jakiś "maxlength" by się przydał chociaż.

    Kolejna sprawa to brak wordwrap() lub czegoś podobnego.

    No i na koniec proponuję wpisać w chat trochę js i zobaczyć efekt

    Kod:
    <script type=text/javascript>alert(/A to psikus.../)</script>
    Ostatnio edytowane przez Traceur ; 25-05-2010 o 12:59

  7. #7
    Zarejestrowany
    Dołączył
    Dec 2007
    Posty
    241

    Domyślnie

    Wiem, że temat trochę stary, ale co tam. Nie zgodzę się, że biblioteka jQuery jest bezsensowna. Nie możesz tego ocenić dopóki nie spojrzysz na cały projekt. Może na jego stronie są animacje jQuery, może używa innych funkcji, rozszerzeń itd. Nie zaprzeczysz, że biblioteki po prostu ułatwiają poruszanie się w dokumencie. Kilka znaków i uzyskuje to, do czego normalnie zastosowałbym pętlę i przeszukał cały dokument (wiem, że jQuery i tak to robi). Jeśli i tak wczytuje JS na stronę to równie dobrze może ja wykorzystać w chatcie.

Informacje o wątku

Użytkownicy przeglądający ten wątek

Aktualnie 1 użytkownik(ów) przegląda ten wątek. (0 zarejestrowany(ch) oraz 1 gości)

Podobne wątki

  1. Odpowiedzi: 50
    Ostatni post / autor: 16-06-2013, 09:19
  2. Gra na podstawie anime Naruto
    Przez zabka229 w dziale Wasze prace
    Odpowiedzi: 13
    Ostatni post / autor: 29-06-2010, 07:00
  3. Chat by Khulmar - PHPBB3
    Przez Khulmar w dziale PBF
    Odpowiedzi: 9
    Ostatni post / autor: 12-12-2009, 22:34
  4. Gra via www na podstawie gry na PC
    Przez tabi19 w dziale Kosz
    Odpowiedzi: 17
    Ostatni post / autor: 30-06-2008, 20:05

Zakładki

Uprawnienia umieszczania postów

  • Nie możesz zakładać nowych tematów
  • Nie możesz pisać wiadomości
  • Nie możesz dodawać załączników
  • Nie możesz edytować swoich postów
  •