Skocz do zawartości
  • 👋 Witaj na MPCForum!

    Przeglądasz forum jako gość, co oznacza, że wiele świetnych funkcji jest jeszcze przed Tobą! 😎

    • Pełny dostęp do działów i ukrytych treści
    • Możliwość pisania i odpowiadania w tematach
    • System prywatnych wiadomości
    • Zbieranie reputacji i rozwijanie swojego profilu
    • Członkostwo w jednej z największych społeczności graczy

    👉 Dołączenie zajmie Ci mniej niż minutę – a zyskasz znacznie więcej!

    Zarejestruj się teraz
  • 0

Szukam skryptu na shoutbox


Verlis

Pytanie

Opublikowano

Hey :)
Potrzebuję skryptu shoutbox'a.
Długo czekałem  z napisaniem tutaj i szukałem w internecie.
Przekopałem już chyba cały internet i nic nie znalazłem :(
Przejdźmy jednak do sedna sprawy:

Stworzyłem sobie logowanie i rejestrację.
Dla zalogowanych użytkowników przewiduję dostęp do shoutbox'a.
Niestety wszystkie shoutbox'y napisane są w mysql, a ja szukam PDO.
Macie może taki skrypt albo poradnik jak napisać taki shoutbox? :)
Najlepiej żeby ten skrypt pobierał nazwę użytkownika (autora posta) z bazy danych, a nie tak jak jest w większości shoutbox'ów, że użytkownik ma miejsce na wpisanie swojego nicku.
Jednak jeżeli będzie mieć to pole do wpisania nicku to nic się nie stanie, przerobię go sobie.
Pozdrawiam i dziękuję za każdą pomoc :)
 

8 odpowiedzi na to pytanie

Rekomendowane odpowiedzi

Opublikowano

Mógłbym się produkować, ale w sumie to co mam jest łatwe do dostosowania pod Twoje potrzeby - ajaksowy chat z PDO (nie jest najwyższych lotów, ale dawno go pisałem):

http://www.mpcforum.pl/topic/1457438-kap-chat-prosty-chat-php-js/

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Opublikowano

@Hans Kloss PL
Dziękuję :)
To jest to czego szukałem!
Tylko mam problem z przerobieniem tego skryptu.
Chciałbym kompletnie wywalić inputa do wpisywania nicku <- Żaden problem, zaznaczam, klikam delete i po problemie :)
Tylko teraz gdy napiszę post to jest on "bez autora".
No i to rozumiem, bo nie jest on zdefiniowany.
Jak już wyżej wspomniałem, shoutbox jest dostępny dla zalogowanego użytkownika.
I tu jest mój problem.
Jak mam zrobić żeby skrypt pobierał mi login z bazy danych, a dokładnie z tabelki users i podawał go jako autora posta?
Samo pobieranie i wyświetlanie danych z bazy ogarniam, ale przez to, że posty są zapisywane w tabelce kapchat, a login w users to nie wiem jak mam to zrobić..
Próbowałem zrobić coś metodą prób i błędów przez 2-3 godziny i nie wyszło :(
Mógłbyś mi to zrobić lub wytłumaczyć jak to zrobić?
Tylko jeżeli wytłumaczyć to łopatologicznie :D

Opublikowano

Nie widziałem tego skryptu, ale możesz zamiast wywalać inputa z nickiem ukryć go i pobierać do jego value login użytkownika.

Ale to głupi pomysł bo można zmienić. Skrypt musi mieć zapytania do bazy danych jeśli piszesz, że posty się tam dodają.

Wystarczy, że pobierzesz dane użytkownika, zapiszesz login do zmiennej i podasz ją w zapytaniu, w zamian za te pole, w którym można było wpisywać swój nick.

Opublikowano

@Console
Znalazłem taki kod gdzie pobiera nick:


<?php
class Chat extends GetSet
   {
      protected $db;
      protected $db_engine;
      protected $current_hash = false;
      protected $previous_hash;
      protected $counter;

      function __construct(PDO $db, $db_engine){
         $this->db = $db;
         $this->db_engine = $db_engine;
      }

      private function checkLast(){
         try{
            if($this->current_hash != false)
            {
               $sql['mysql'] = 'SELECT `hash`, `counter` FROM `kapchat` ORDER BY `message_id` DESC LIMIT 1';
               $sql['postgres'] = '';

               $result = $this->db->query($sql[$this->db_engine]);
               $arr = $result->fetch(PDO::FETCH_ASSOC);
               $result->closeCursor();
               $this->previous_hash = $arr['hash'];
               $this->counter = $arr['counter'];
            }
            return true;
         }
         catch(PDOException $e){
            return 'false FILE: '.basename($e->getFile()).
            ' LINE: '.$e->getLine().
            ' MESSAGE: Query error.';
         }
      }

      function add($maxMessages)
      {
         try{
            $this->checkLast();
            if($this->current_hash == false || $this->counter < $maxMessages || $this->current_hash != $this->previous_hash)
            {
               if($this->current_hash != false)
               {
                  if($this->current_hash == $this->previous_hash)
                     $this->counter++;
                  else
                     $this->counter = 1;
               }
               else
                  $this->counter = 0;


               $sql['mysql'] = 'INSERT INTO `kapchat` (`hash`, `counter`, `timestamp`, `nick`, `color`, `message`) VALUES(:hash, :counter, :timestamp, :nick, :color, :message)';
               $sql['postgres'] = '';

               $prep = $this->db->prepare($sql[$this->db_engine]);
               $prep->bindValue(':hash', $this->current_hash, PDO::PARAM_STR);
               $prep->bindValue(':counter', $this->counter, PDO::PARAM_INT);
               $prep->bindValue(':timestamp', time(), PDO::PARAM_INT);
               $prep->bindValue(':nick', htmlspecialchars($_POST['nick']), PDO::PARAM_STR);
               $prep->bindValue(':color', htmlspecialchars($_POST['color']), PDO::PARAM_STR);
               $prep->bindValue(':message', htmlspecialchars($_POST['message']), PDO::PARAM_STR);

               $added = $prep->execute();
               $id = $this->db->lastInsertId('message_id');
               return $added;
            }
            else
               return 'false spam';
         }
         catch(PDOException $e){
            return 'false FILE: '.basename($e->getFile()).
                        ' LINE: '.$e->getLine().
                        ' MESSAGE: Query error.';
         }
      }

      function show($range){
         try{
            $start_time = time() - 60 * 60 * $range;

            if($_POST['lastId'] == 0)
            {
               $sql['mysql'] = 'SELECT `message_id`, `nick`, `color`, `message`, `timestamp` FROM `kapchat` WHERE  `timestamp`>'.$start_time.' ORDER BY `message_id` ASC LIMIT 300';
               $sql['postgres'] = '';
               $result = $this->db->query($sql[$this->db_engine]);
               $arr = $result->fetchAll(PDO::FETCH_ASSOC);
               $result->closeCursor();
               $json = json_encode($arr, JSON_UNESCAPED_UNICODE);
               return $json;
            }
            else
            {
               $sql['mysql'] = 'SELECT `message_id`, `nick`, `color`, `message`, `timestamp` FROM `kapchat` WHERE  `message_id`>:lastId ORDER BY `message_id` ASC LIMIT 300';
               $sql['postgres'] = '';
               $result = $this->db->prepare($sql[$this->db_engine]);
               $result->bindValue(':lastId', $_POST['lastId'], PDO::PARAM_INT);
               $result->execute();
               $arr = $result->fetchAll(PDO::FETCH_ASSOC);
               $result->closeCursor();
               $json = json_encode($arr, JSON_UNESCAPED_UNICODE);
               return $json;
            }
         }
         catch(PDOException $e){
            return 'false FILE: '.basename($e->getFile()).
                        ' LINE: '.$e->getLine().
                        ' MESSAGE: Query error.';
         }
      }
   }




I jak mam teraz jednocześnie pobierać login z tabelki users (tam są zarejestrowane konta) i resztą potrzebnych rzeczy z tabelki kapchat?

Tutaj masz jeszcze index.html


<!DOCTYPE html>
<html>
<head>
    <meta charset="utf-8" />
    <title>KAP CHAT</title>
    <meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no">
    <meta name="mobile-web-app-capable" content="yes">
    <link rel="manifest" href="manifest.json">
    <!-- STYLE -->
    <link rel="stylesheet" type="text/css" href="kapchat_files/style/dark.css" />
    <!-- BIBLIOTEKI JS -->
    <script src="http://code.jquery.com/jquery-1.11.1.min.js"></script>
    <script src='kapchat_files/js/libs/timer.js' type='text/javascript'></script>
    <script src='kapchat_files/js/libs/cookie.js' type='text/javascript'></script>
    <!-- WŁASNE JS -->
    <script src='kapchat_files/kapchat_config.js' type='text/javascript'></script>
    <script src='kapchat_files/js/kapchat_functions.js' type='text/javascript'></script>
    <script src='kapchat_files/js/kapchat.js' type='text/javascript'></script>
    <!-- ICONS -->
    <link rel="icon" sizes="192x192" href="kapchat_files/images/icon192.png">
    <link rel="icon" sizes="128x128" href="kapchat_files/images/icon128.png">
    <link rel="apple-touch-icon" sizes="128x128" href="kapchat_files/images/icon128.png">
    <link rel="apple-touch-icon-precomposed" sizes="128x128" href="kapchat_files/images/icon128.png">
    <link rel="shortcut icon" href="kapchat_files/images/icon72.png">
</head>
<body>
    <div id="kapchat">
        <!-- POPUPS -->
        <div id="kapchat_error_box">
            <h2 id="kapchat_error_message">Błąd...</h2>
            <a id="kapchat_error_close" href="">ZAMKNIJ</a>
        </div>
        <!-- POPUPS END -->
        <!-- EMOTICONS -->
        <div id="kapchat_emoticons_box">
            <h2>Wstaw emotikonę:</h2>
            <p id="kapchat_emoticons">
            </p>
            <a id="kapchat_emoticons_close" href="">ZAMKNIJ</a>
        </div>
        <!-- EMOTICONS -->
        <!-- SETTINGS -->
        <div id="kapchat_settings_box">
            <h2>Twój kolor:</h2>
            <p>
                <a class="kapchat_color" style="background-color: #b9714a" href="#b9714a"></a>
                <a class="kapchat_color" style="background-color: #fd6500" href="#fd6500"></a>
                <a class="kapchat_color" style="background-color: #ed1c24" href="#ed1c24"></a>
                <a class="kapchat_color" style="background-color: #ff3577" href="#ff3577"></a>
                <a class="kapchat_color" style="background-color: #b04fb0" href="#b04fb0"></a>
                <a class="kapchat_color" style="background-color: #9f40ff" href="#9f40ff"></a>
                <a class="kapchat_color" style="background-color: #3f48cc" href="#3f48cc"></a>
                <a class="kapchat_color" style="background-color: #00a2e8" href="#00a2e8"></a>
                <a class="kapchat_color" style="background-color: #22b14c" href="#22b14c"></a>
                <a class="kapchat_color" style="background-color: #82a202" href="#82a202"></a>
            </p>
            <a id="kapchat_settings_close" href="">ZAMKNIJ</a>
        </div>
        <!-- SETTINGS -->
        <!-- CHAT -->
        <div id="kapchat_main">
            <div id="kapchat_header">
                <div id="kapchat_menu">
                    <a id="kapchat_emoticons_open" href=""><img class="kapchat_menu" src="kapchat_files/images/emoticons.png"/></a>
                    <a id="kapchat_settings_open" href=""><img class="kapchat_menu" src="kapchat_files/images/settings.png"/></a>
                </div>
            </div>
            <div id="kapchat_add_message">
                <form id="kapchat_add_mess" action="" method="post">
                    <input id="kapchat_nick" class="kapchat_short" type="text" name="nick" maxlength="30" placeholder="nick" required/>
                    <input id="kapchat_mess" class="kapchat_short" type="text" name="message" maxlength="500" placeholder="napisz coś..." required/>
                    <input id="kapchat_nick_color" type="hidden" name="color" value=""/>
                    <input id="kapchat_send" class="kapchat_submit" type="submit" value="OK"/>
                </form>
            </div>
            <!--szablon bloku wiadomości - nie wyświetla się bezpośrednio-->
            <div id="kapchat_messages_skeleton" style="display: none">
                <div class="kapchat_message">
                    <p class="kapchat_id" style="display: none">{id}</p>
                    <p class="kapchat_nick">{nick}</p>
                    <p class="kapchat_message">{message}</p>
                    <p class="kapchat_ago" timestamp="{timestamp}">{ago}</p>
                </div>
            </div>
            <!--koniec szablonu bloku wiadomości-->
            <!--szablon wiadomości video - nie wyświetla się bezpośrednio-->
            <div id="kapchat_iframe_skeleton" style="display: none">
                <div class="kapchat_iframe">
                    <img src="kapchat_files/images/placeholder.png"/>
                    <iframe src="{iframe_src}" frameborder="0" allowfullscreen></iframe>
                </div>
                <a href="{video_url}">obejrzyj na {website}</a>
            </div>
            <!--koniec szablonu wiadomości video-->
            <div id="kapchat_messages">
                <!--tu jest wstawiana docelowa treść-->
            </div>
        </div>
        <!-- CHAT END -->
        <!-- FOOTER -->
        <div id="kapchat_footer">
            KAP CHAT v1.7 by kap
        </div>
        <!-- FOOTER END -->
    </div>
</body>
</html>


 

Opublikowano

Nie modyfikuj mocno tego skryptu - pobieranie bieżącego użytkownika zrób sobie całkiem osobno i wrzucaj jako zmienną w miejscu zaznaczonym na zielono (zamiast htmlspecialchars($_POST['nick'])):

 
$sql['mysql'] = 'INSERT INTO `kapchat` (`hash`, `counter`, `timestamp`, `nick`, `color`, `message`) VALUES(:hash, :counter, :timestamp, :nick, :color, :message)';
$sql['postgres'] = '';
 
$prep = $this->db->prepare($sql[$this->db_engine]);
$prep->bindValue(':hash', $this->current_hash, PDO::PARAM_STR);
$prep->bindValue(':counter', $this->counter, PDO::PARAM_INT);
$prep->bindValue(':timestamp', time(), PDO::PARAM_INT);
$prep->bindValue(':nick', $userNick, PDO::PARAM_STR);
$prep->bindValue(':color', htmlspecialchars($_POST['color']), PDO::PARAM_STR);

 

$prep->bindValue(':message', htmlspecialchars($_POST['message']), PDO::PARAM_STR);
 
 
Zmienną możesz przekazać jako parametr w metodzie add():
 
function add($maxMessages, $userNick)
{
    try{
        ...
 
Konkretne dane przekazujesz w pliku q_insert_message.php przy wywołaniu tej metody:
 
$added = $chat->add($cfg_max_messages$userNick);

Chcesz precyzyjnej i zrozumiałej odpowiedzi? - Zadaj precyzyjne i zrozumiałe pytanie. Nie przyjmuję zleceń.
Nie odpowiadam na priv na pytania, które można zadać na forum. Chcesz mojej pomocy - oznacz mnie w poście =>  @"Hans Kloss PL" 

Zarchiwizowany

Ten temat przebywa obecnie w archiwum. Dodawanie nowych odpowiedzi zostało zablokowane.

×
×
  • Dodaj nową pozycję...