Strona 1 z 13 12311 ... OstatniOstatni
Pokaż wyniki od 1 do 10 z 125

Wątek: [PHP][MySQL]Piszemy chat - część pierwsza - by sazian

  1. #1
    Zasłużony Awatar sazian
    Dołączył
    Jul 2008
    Posty
    1,721

    Domyślnie [PHP][MySQL]Piszemy chat - część pierwsza - by sazian

    Witam,
    w tym artykule opiszę jak napisać prosty czas który można wykorzystać w każdej(chyba ) grze via www i nie tylko
    założenia dla wersji pierwszej:
    *chat nie będzie samodzielną aplikacją ale dodatkiem do już istniejącej aplikacji
    *chat będzie wykorzystywał technologię AJAX
    *chat ma działać prawidłowo nawet przy wyłączonej obsłudze js
    *chat będzie rozpoznawał zalogowanego użytkownika poprzez sesje
    *chat będzie oparty o bazę danych MySQL
    *chat nie będzie zawierał własnego systemu autoryzacji(będzie korzystał z systemu aplikacji macierzystej)


    zaczynamy od bazy danych
    Kod:
     `id` int(11) NOT NULL auto_increment
     `id_sender` int(11) NOT NULL
     `tekst` varchar(255) collate utf8_polish_ci NOT NULL
    gdzie:
    `id` to numer identyfikacyjny wiadomości
    `id_sender` to numer identyfikacyjny osoby wysyłającej wiadomość
    `tekst` tekst wiadomości

    a teraz pora na pliki:
    cały czat będzie "składał się" z pięciu plików:
    chat.php główny plik czatu w którym będą wyświetlane rozmowy i wysyłane nowe wypowiedzi
    get.php plik odpowiedzialny za pobieranie oraz wyświetlanie rozmów
    send.php plik odpowiedzialny za przetwarzanie oraz wysyłanie wiadomości
    config.php plik aplikacji macierzystej, odpowiadający za inicjowanie połączenia z bazą MySQL
    jquery.js plik biblioteki jQuery


    Przejdźmy do budowy plików. Plikiem od którego zaczniemy będzie chat.php, pierwszą rzeczą jaką należy zrobić jest dołączenie biblioteki jquery w sekcji head naszego pliku
    Kod:
    <script type="text/javascript" src="jquery.js"></script>
    kolejną rzeczą jest stworzenie formularza do wysyłania wypowiedzi. Formularz będzie się składał z pola do wprowadzania danych oraz przycisku do wysyłania. Ze względów bezpieczeństwa dane będą przesyłane metodą POST.
    Kod html:
    <form method="post" id="send" action="send.php" >
    <input type="text" name="tekst" id="tekst" />
    <input type="submit" name="send"  value="wyślij" />
    </form>
    Dobra mamy już formularz do wysyłania danych, a teraz przydało by się coś do ich wyświetlania. Posłuży do tego div
    Kod html:
    <div id="chat">
    <?php include "get.php"; ?> 
    </div>
    Wewnątrz diva jest dołączony plik get.php aby zaraz po wczytaniu strony zostały wyświetlone wszystkie wypowiedzi.

    Jest już formularz i pole do wyświetlania wypowiedzi, ale ciągle nie możemy nic pisać. Więc pora zabrać się za send.php.
    Pierwszą rzeczą jaką musimy zrobić to nawiązanie połączenia z bazą danych, oraz utworzenie sesji. W tym celu do pliku send.php dołączamy plik config.php(zakładam że to w nim dochodzi do zainicjowania połączenia z bazą danych w programie macierzystym, zakładam również że to w tym pliku jest tworzona sesja). Kolejną rzeczą jest wykonanie odpowiedniego zapytania do MySQL'a oraz ponowne przekierowanie do pliku chat.php(potrzebne w przypadku nieobsługiwania js przez przeglądarkę użytkownika).
    Kod php:
    <?php
    include 'config.php';

    mysql_query("INSERT INTO chat SET `id_sender`=".$_SESSION['id_player'].", `tekst`='".mysql_escape_string($_POST['tekst'])."'");

    header("Location: chat.php");

    ?>
    zakładam ze $_SESSION['id_player'] przechowuje id zalogowanej osoby, w różnych aplikacjach może to różnie wyglądać !!!

    Kolejna część za nami. Możemy już wysłać wiadomość ale ciągle nie możemy ich odczytać. Dlatego teraz napiszemy get.php, ale najpierw krótkie wyjaśnienie

    skrypt był pisany na potrzeby vall 0.3beta więc opieram się na tabeli z użytkownikami o nazwie players(tak jak w vall), za imię gracza odpowiada kolumna user, a ranga to rank.


    Po pierwsze dołączamy config.php
    Po drugie wykonujemy odpowiednie zapytanie pobierające treść wypowiedzi, imię autora oraz jego rangę w grze.
    Kod php:
    <?php
    include 'config.php';
    $tekst=mysql_query('SELECT ch.tekst, p.user, p.rank FROM chat ch LEFT JOIN players p ON p.id = ch.id_sender ORDER BY ch.id DESC LIMIT 5 ');
    Klauzura LIMIT 5 powoduje wyświetlenie 5 ostatnich wiadomości.

    następnie tworzymy tabelę z innymi kolorami czcionek dla odpowiednich rang

    Kod php:
    $text_color=array('Admin'=>'#ff0000','Member'=>'#000000'); 
    ja uwzględniłem na początek 2 rangi, administrator i zwykły użytkownik.
    Teraz sprawdzamy czy są jakieś wypowiedzi, jeśli tak to je wyświetlamy

    Kod php:
    if(mysql_num_rows($tekst)>0){
        echo 
    '<table style="width:100%">';
            
        while(
    $a=mysql_fetch_array($tekst)){
            echo 
    '<tr class="chat"><td style="width:50px;background:#bbbbff;color:'.$text_color[$a['rank']].'">'.$a['user'].'</td><td style="background:#9999ff;"> '.$a['tekst'].'</tr>';
            
            
        }
        echo 
    '</table>';
    }
    ?> 
    Całość powinna już działać poprawnie(mam taką nadzieją, ponieważ upraszczałem bardziej skomplikowany kod. Jak mi wena nie przejdzie to napiszę "całość" w kolejnych częściach).

    A skoro kod php działa to można przejść do AJAX'a, w tym celu wracamy do pliku chat.php.

    AJAX ma odpowiadać ze odświeżanie wypowiedzi co pewien czas, oraz przechwycenie zdarzenia wysłania formularza. Po przechwyceniu tego zdarzenia wysyłamy dane do pliku send.php, odświeżamy wypowiedzi, czyścimy pole "tekst" oraz(bardzo ważne) blokujemy wysłanie danych przez formularz dzięki czemu nie odświeża się strona.
    Kod:
    $(document).ready(function(){
     
      $("#send").submit(function(){
          
           $.ajax({
             type: "POST",
            url: "send.php",
             data:"tekst="+$("#tekst").val(),
            success: function(){ 
                    $("#chat").load("get.php");
                    $("#tekst").val('');
                    }})
        
        
         return false;
        });
        window.setInterval(function(){
             $("#chat").load("get.php");
            
        },3000);
        
    });
    i na tym kończę pierwszą cześć.
    Jeśli mi wena nie przejdzie to w części drugiej zamierzam opisać:
    założenia dla części drugiej:
    *chat ma obsługiwać system wiadomości prywatnych oraz umożliwiać rozmowę z tylko jedną osobą
    *użytkownicy mogą zgłaszać wypowiedzi
    *wiadomości zostają usunięte po upływie określonego czasu, chyba że zostały zgłoszone
    na chacie będzie można blokować wypowiedzi wybranych użytkowników(system "banów")
    Ostatnio edytowane przez sazian ; 05-05-2010 o 14:34 Powód: poprawa krzaków pozostałych po aktualizacji forum

  2. #2
    Zarejestrowany
    Dołączył
    Sep 2008
    Posty
    126

    Domyślnie Odp: piszemy chat część pierwsza

    Sazian pomysł świetny!!!! Ostatnio właśnie szukałem czatu!! Czekam na cz2

  3. #3
    Pesymista :( Awatar Harrocan
    Dołączył
    Sep 2007
    Posty
    1,663

    Domyślnie Odp: piszemy chat część pierwsza

    Podklejam.

  4. #4
    Programista
    Dołączył
    Dec 2007
    Posty
    346

    Domyślnie Odp: piszemy chat część pierwsza

    Dobry i pomocny dla wielu osób. Prostota przede wszystkim.
    Nie analizowałem kodu ale używająć przekierowywania
    Kod:
    header("Location: chat.php");
    Należy pamiętać że po każdej instrukcji tego typu należy używać funkcje "php" die(); lub exit; , które bezwarunkowo zakończą skrypt, unikając sytuacji powstania błędu zapętlenia się skryptu.
    Kod:
    header("Location: chat.php");
    die();
    Powrót z zaświatów ? ; )

  5. #5
    Zarejestrowany
    Dołączył
    Jul 2008
    Posty
    98

    Domyślnie

    czekam z niecierplowoscia na druga czesc

  6. #6
    Zasłużony Awatar sazian
    Dołączył
    Jul 2008
    Posty
    1,721

    Domyślnie

    już prawie jest

  7. #7
    Zarejestrowany Awatar ArekJ
    Dołączył
    Oct 2008
    Posty
    81

    Domyślnie

    Hm... Coś mi nie działa... A dokładnie problem występuje podczas pobierania wiadomości wyskakuje błąd
    Resource id #6
    Niestety nie bardzo mogę znale??ć u wujka google odpowied?? jak to naprawić.
    Zapytanie mam takie
    Kod php:
    $tekst mysql_query('SELECT cz.tekst, p.login FROM czat cz LEFT JOIN uzytkownicy p ON p.id = cz.id_w ORDER BY cz.id DESC LIMIT 5 '); 
    Jak to naprawić? Z góry dzięki

  8. #8
    Grupa MmoCenter Awatar Kiri
    Dołączył
    Sep 2007
    Posty
    1,741

    Domyślnie

    Dodaj or die(mysql_error()) na końcu.

  9. #9
    Zarejestrowany Awatar ArekJ
    Dołączył
    Oct 2008
    Posty
    81

    Domyślnie

    Dawałem myql_error już wcześniej, ale nic nie zwracał. Rozwiązanie okazało się jakże banalne. Zmienna $tekst już była wcześniej używama co powodowało błąd. Wystarczyło zmienić jej nazwę i po problemie, ale dzięki za chęci

  10. #10
    Zarejestrowany Awatar Imperator_Edi
    Dołączył
    Dec 2008
    Posty
    614

    Domyślnie

    A dało by rade zrobić z tego minichat do rozmowy pomiędzy dwoma użytkownikami, lub klanem (opcje do wyboru w głównym chacie, ale to najmniejszy problem), tak by nie pisać oddzielnych skryptów dla każdego klanu?

Strona 1 z 13 12311 ... OstatniOstatni

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: 6
    Ostatni post / autor: 24-06-2010, 21:34
  2. Odpowiedzi: 6
    Ostatni post / autor: 10-12-2008, 22:03
  3. [R] Grafika Pierwsza strona gry
    Przez Vicious w dziale Support Vallheru
    Odpowiedzi: 6
    Ostatni post / autor: 19-05-2008, 21:22

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
  •