• Najnowsze pytania
  • Bez odpowiedzi
  • Zadaj pytanie
  • Kategorie
  • Tagi
  • Zdobyte punkty
  • Ekipa ninja
  • IRC
  • FAQ
  • Regulamin
  • Książki warte uwagi

sprawdzanie czy pojawiły się nowe dane w tabeli, jeśli tak wyświetlanie info php mysqli

Aruba Cloud - Virtual Private Server VPS
0 głosów
483 wizyt
pytanie zadane 6 maja 2022 w PHP przez gatka84 Bywalec (2,150 p.)

Witajcie nie mogę wykombinować jak w prosty sposób zrobić żeby pojawiało mi się info o nowych wpisach do bazy tzn mam tak :

<?php
                    $dash_mailing_query = "SELECT * FROM `mailing`";
                    $dash_mailing_query_run = mysqli_query($con, $dash_mailing_query);

                    if ($mailing_total = mysqli_num_rows($dash_mailing_query_run)) {
                        echo '<h4 class="mb-0"> ' . $mailing_total . ' </h4>';
                    } else {
                        echo '<h4 class="mb-0"> No Data </h4>';
                    }
?>

i pokazuje mi łączną ilość wpisów np 10 i teraz nie wiem jak zrobić żeby porównywał czy pojawiły się nowe i tu mam problem bo w pierw kombinowałam z dodatkową kolumną, w której by zapisywał ostatni stan i jeśli się zmienił to by pokazywał o ile ale w sumie nie bardzo wiem jak dać odniesienie czy od ostatniej wizyty czyli logowania się lub inny odnośnik, który by byłby punktem odniesienia (nie bardzo wiem jak powinno się do tego podejść), że pojawiły nowe wpisy w bazie? Jeśli ktoś ma jakiś pomysł albo nakierowanie jak to ugryźć była bym bardzo wdzięczna za podpowiedz lub nakierowanie na przykłady jak to może wyglądać

2 odpowiedzi

+2 głosów
odpowiedź 6 maja 2022 przez rafal.budzis Szeryf (85,460 p.)

Najłatwiej - nie sprawdzać tego i po prostu co jakiś interwał np 10 sekund wczytywać wszystkie dane na nowo. Zakładam że efekt będzie taki sam czyli odświeżone dane :) 

Nieco trudniej - co parę sekund wysyłamy zapytanie czy coś się zmieniło (Warto przepisać to na API zamiast zwracać HTMLa)

Prawidłowo - użyć technologii która pozwana na stałe połączenie. PHP jest zaprojektowany do stworzenia HTMLa, wysłania i zakończenia pracy. Dlatego asynchroniczność w nim nie jest tak oczywista. Dobrze by było użyć nodeJS. Jak to połączyć ? 

W nodeJS piszemy stałe połączenie (WebSocket). W PHP zaraz po wykonaniu zapytania SQL które coś zmienia (update/delete) wysyłamy request do nodeJSa który informuje że powinien poinformować o zmianach użytkowników. 

Prawidłowi i szybko - Użyć bazy danych firebase która wspiera wszystkie te rzeczy i nie bawić się w pisanie koła na nowo ;) 

https://firebase.google.com/products/realtime-database

komentarz 6 maja 2022 przez gatka84 Bywalec (2,150 p.)
Dzięki za podpowiedź ale niestety muszę zostać przy mysqli bo już mam wszystko w tym i próbuje sobie zrobić udogodnienie tak jak jest w np na skrzynce mailowej gdzie jest info o nowej wiadomości i stąd zastanawiałam się jak to ew dodać do już istniejącego projektu.
+1 głos
odpowiedź 6 maja 2022 przez Wiciorny Ekspert (280,450 p.)
Provider do bazy, czy rodzaj bazy - moze byc różny, generalnie zachowanie powinno być kierowane serwisem, jeśli aktualizuje się stan bazy, automatycznie powinien być efekt- informujący stronę klienta.

Z poziomu bazy ustawić logowanie informacji,
https://dev.mysql.com/doc/refman/8.0/en/faqs-triggers.html#qandaitem-23-5-1-11
Trigger bazodanowy może?   Wyzwalacz jest wykonywany na serwerze Mysql, a nie na serwerze PHP- niezaleznie od maszyny w tym jedyny kruczek i komplikacja.
Może też opcja CSV https://dev.mysql.com/doc/refman/5.7/en/csv-storage-engine.html
Z poziomu php, najlepiej po stronie API.
komentarz 9 maja 2022 przez gatka84 Bywalec (2,150 p.)

Szukając prostego rozwiązania zastanawiam się jak to prosto rozwiązać i pomyślałam czy ew można zrobić to tak że w modalu to zrobię i jak nacisnę do podglądu to od razu mi prześle do bazy info o tym że wiadomość już została obejrzana.

$(document).ready(function () {        
        $('.viewbtn').on('click', function () {            
            $('#viewmodal').modal('show');            
            $tr = $(this).closest('tr');            
            var data = $tr.children("td").map(function () {
            return $(this).text();
            }).get();            
            console.log(data);            
            $('#update_id').val(data[0]);
            $('#title').val(data[1]);
            $('#email').val(data[2]);
            $('#message').val(data[3]);
            $('#data').val(data[4]);
        });
    });

tylko nie wiem jak w podgląd wpleść mu od razu update bazy

w bazie zrobię dodatkowo np 'visible' o wartości 0- dla nie przeczytany i 1 dla przeczytany i teraz utknęłam na update przy jednoczesnym wyświetlaniu wiadomości do podglądu

Podobne pytania

0 głosów
2 odpowiedzi 1,215 wizyt
+1 głos
0 odpowiedzi 190 wizyt
pytanie zadane 19 grudnia 2022 w C i C++ przez piotr_domanski Bywalec (2,450 p.)
0 głosów
3 odpowiedzi 560 wizyt
pytanie zadane 9 lipca 2015 w PHP przez mowmiheniek Stary wyjadacz (11,900 p.)

93,324 zapytań

142,323 odpowiedzi

322,390 komentarzy

62,653 pasjonatów

Motyw:

Akcja Pajacyk

Pajacyk od wielu lat dożywia dzieci. Pomóż klikając w zielony brzuszek na stronie. Dziękujemy! ♡

Oto polecana książka warta uwagi.
Pełną listę książek znajdziesz tutaj

Wprowadzenie do ITsec, tom 1 Wprowadzenie do ITsec, tom 2

Można już zamawiać dwa tomy książek o ITsec pt. "Wprowadzenie do bezpieczeństwa IT" - mamy dla Was kod: pasja (użyjcie go w koszyku), dzięki któremu uzyskamy aż 15% zniżki! Dziękujemy ekipie Sekuraka za fajny rabat dla naszej Społeczności!

...