Mecze z bazy danych wyswietlane na stronie |
Mecze z bazy danych wyswietlane na stronie |
6.11.2017, 19:05:42
Post
#1
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Witam
Jeśli dałby ktoś rade odpowiedzieć mi na poniższe pytania albo podesłać link do artykułu byłbym bardzo wzdzieczny. Chce na swojej stronie dodać mecze które sam będę wpisywał do bazy danych a w html beda wyswietlane i tutaj mam pare pytań: 1. W każdym meczu będą tego samego rodzaju zmienne tzn. druzyna 1, druzyna 2, czas meczu itd. Ale kazdy mecz bedzie miał inne id, jak to ogolnie wpisac w bazie? normalnie za kolejnoscia kolejne id. czy jak? 2. Jak sie mecz skonczy chce zeby mecz był juz w innej karcie tzw. "match history", jak sie zacznie zeby zniknał z głównej strony (ale to juz chyba js)jak to ogolnie zrobic? |
|
|
6.11.2017, 19:24:35
Post
#2
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Kod idMeczu | typ_rozgrywek | druzyna_1 | druzyna_2 | wynik_1 | wynik_2 | data_meczu | godzina_rozpoczecia | godzina_zakonczenia | status_meczu | 12345 | 1 | 123 | 456 | 3 | 0 | 2017.11.04 | 19:00 | 20:51 | 1 | -- mecz rozegrany 12346 | 1 | 456 | 123 | 0 | 1 | 2017.11.06 | 19:00 | 00:00 | 0 | -- mecz trwajacy 12347 | 2 | 789 | 345 | 0 | 0 | 2017.11.10 | 18:00 | 00:00 | 0 | -- mecz zaplanowany 123, 456, 789. 345 to ID klubów/reprezentacji status_meczu oznacza 1 to rozegrany i trafia do match_history, a 0 to trwające lub zaplanowane. Posortowane wg daty rozpoczęcia, czyli te z datą najstarszą (czyli najbliższą daty aktualnej) typ_rozgrywek - 1 jako mecz ligowy, 2 jako mecz np. pucharowy I tak można rozbudowywać. Można np. dodać kolejną tabelę gdzie będą zapisywane wydarzenia ze spotkania (kartki, gole, zmiany) Kod id | idMeczu | typWydarzenia | minuta | coSieWydarzylo | |
|
|
6.11.2017, 19:44:07
Post
#3
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Dzięki wielkie MORDO! Mam jeszcze tylko jedno pytanko jakbym chciał dodać tzw. strefe typera to wtedy tak:
Kod id_użytkownika | idMeczu | typ | resultat || ? A jak zrobić żeby wyświetlały sie wszystkie wpisane mecze które sie nie rozpoczeły ? Bo po wpisaniu nowych meczy do bazy danych nie bede wpisywał do każdego osobnego diva id_meczu..... przynajmniej mam nadzieje.. Ten post edytował BienuSS 6.11.2017, 20:01:16 |
|
|
6.11.2017, 20:30:13
Post
#4
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
w przypadku wyników meczu najlepiej podawać jako dwie kolumny, no chyba że zakładasz tylko że albo użytkownik trafił wynik albo nie: czyli 1:1 i 0:0 to wynik nie trafiony.
Oczywiście że nie, wystarczy stworzyć odpowiednie zapytanie, Kod SELECT {columny} FROM {tabele} WHERE status_meczu = 0 AND CONCAT(data_meczu,' ',godzina_rozpoczecia) < NOW() zamiast CONCAT można też użyć: DATEDIFF() - zwracająca ilość dni, więc np. jeżeli = 0 to mecze z dzisiaj, a 1 to mecze z jutra ( DATEDIFF(`data_meczu`, DATETIME()) ). |
|
|
10.11.2017, 19:30:40
Post
#5
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Mam jeszcze trzy pytanka
1.Każdy mecz ma inne id, i jak zrobić żeby na stronie w każdym divie wyświetlały sie te same rodzaje danych tj. typ rozgrywek, drużyna1, druzyna 2. Ale w każdym divie były one inne bo dotyczą innego id_meczu? Chodzi mi o to jak to wpisać w html/php. 2. Jak zrobić żeby na stronie wyświetlało sie tylko tyle divów ile jest meczy nadchodzących 3.Od nośnie czasu do meczu, do ogólnego skryptu do wyświetlania danych z bazy danych musze dodać polecenie żeby status meczu był 0, no okey ale nie lepiej zrobić tak żeby wypisać z tabeli dokładną godzine meczu i za pomocą JS sprawdzić ile pozostało i jeśli już trwa albo sie zakończył to wykreślić go z głównej strony i przenieść do histori? Ten post edytował BienuSS 10.11.2017, 19:39:25 |
|
|
11.11.2017, 08:25:50
Post
#6
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
1. JOIN i jego wariacje w zapytaniu SQL.
2. tworzysz odpowiednie zapytanie, a potem korzystasz z FOREACH lub WHILE w PHP. 3. Status meczu oznacza czy mecz został rozegrany lub nie. Dzięki temu wszystkie wyniki możesz trzymać w jednej tabeli, a nie w dwóch, co jest dobre bo nie musisz robić podwójnych, albo potrójnych zapytań: INSERT -> w nowej tabeli DELETE -> w starej tabeli UPDATE -> w nowej/lub starej tabeli (bo w końcu trzeba jeszcze wpisać datę zakończenia meczu) Korzystanie z JS nie jests złym pomysłem. Ale wysyłając zapytanie, to skrypt ma odpytywać konkretny mecz, albo pulę spotkań. Np. status 0 i dzień: DZISIAJ |
|
|
12.11.2017, 18:54:50
Post
#7
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
JOIN służy ogólnie do łączenia tabel, a ja w jednej tabeli mam wszystkie dane, no chyba że nie znalazłem tego dokładnie o co ci chodziło. Jak wyświetlam rekordy za pomoca echo w głównym kodzie php to wyswietlaja sie pieknie ładnie wszytskie, natomiast jak wpisze do divów już tylko np. <?echo "$team_1"?> to wyświetla sie tylko ostatni rekord w każdym divie. Myśle teraz żeby jakoś zostosować to: mysql_fetch_array
Ten post edytował BienuSS 12.11.2017, 19:44:05 |
|
|
12.11.2017, 20:19:13
Post
#8
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Jak coś, lepiej skup się na łączeniu z bazą danych za pomocą PDO.
Funkcje mysql_ są wycofywane z PHP. Szczerze mówiąc nie wiem do końca co robisz. Bo co to jest główny kod PHP u Ciebie? W normalnych warunkach programowania proceduralnego to coś takiego. Oczywiście przedstawiam to w WIELKIM SKRÓCIE.
|
|
|
13.11.2017, 14:17:28
Post
#9
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Ok spróbuje zrobić to jak pokazałeś, w moim rozumieniu główny kod php to chodziło mi o ten pierwszy kod co napisałeś ( tj. łączenie sie z bazą danych, zmienne itd.)
<? $query="SELECT * FROM games WHERE status = 0 AND CONCAT(date_match,' ',time_match) > NOW() ORDER BY date_match, time_match;"; $result=mysql_query($query); $num=mysql_num_rows($result); $i=0; $tablica = array(); while ($i < $num) { $team_1=mysql_result($result,$i,"team_1"); $team_2=mysql_result($result,$i,"team_2"); $date_match=mysql_result($result,$i,"date_match"); $time_match=mysql_result($result,$i,"time_match"); $status=mysql_result($result,$i,"status"); $tablica_team_1[$i]=$team_1; $tablica_team_2[$i]=$team_2; $tablica_date_match[$i]=$date_match; $tablica_time_match[$i]=$time_match; $tablica_status[$i]=$status; $i++; } i w html podstawiałem np. $tablica_team_1[0],$tablica_team_1[1] Kumpel pomógł mi to zrobić bo nie szło mi twoim sposobem. Co uważasz żeby tak to wykorzystac? |
|
|
13.11.2017, 17:49:12
Post
#10
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
1. Stosuj tagi [PHP ] dla kodu php na forum.
2. Formatuj kod, stosuj 4 spacje lub 1 tabulator. 3. Jak już mówiłem mysql_* są depracated... na nowszych wersjach np. PHP7 już nie użyjesz takich funkcji. Dlatego stosuj PDO, jak coś możesz użyć jakąś bibliotekę upraszczającą zapytania PDO np.: https://github.com/wickyaswal/indieteq-php-...-database-class Wtedy otrzymasz coś takiego:
Swoją drogą, nie wiem co to za zmienne tj. $tablica_team_1[$i]. Ale wiem że sam kiedyś tak pisałem, naprawdę zalecam nie twórz sobie takich zmiennych, bo tylko utrudniasz sobie pracę. Stosuj normalne tablice np. $mecz[$id][$atrybut] = $wartosc. Już nie mówiąc że w tej chwili zmienna $games jest tablicą która zawiera wszystkie elementy które są w $tablica_* Ten post edytował Tomplus 13.11.2017, 17:49:52 |
|
|
13.11.2017, 19:33:26
Post
#11
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Skrypt dokładnie wygląda tak i działa perfekcyjnie
"Stosuj normalne tablice np. $mecz[$id][$atrybut] = $wartosc." A co jak id pobiera mi z bazy danych?Tak to zapisać $mecz[$id_match][$team_1] ? I jeszcze a pro po numerowania później poszczególnych wartości (np. <?echo "$tablica_team_1[0]"?>) Będe robił pętle gdzie chce zrobić tak żeby tyle ile jest wierszy z zapytania (tyle ile meczy zwraca) tyle mi wyświetla divów. I wstawiając później te wartośći w pętli dać tak: <?echo "$tablica_team_1[$i]"?>? A jeszcze jedno, z tyl limitem " 'limit' => 20" to chodzi o to że max 20 rekordów sie wyświetli ? Ten post edytował BienuSS 13.11.2017, 19:34:36 |
|
|
13.11.2017, 21:58:17
Post
#12
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Tak, przecież nie ma potrzeby aby wyświetlały Ci się wszystkie mecze.
Już samym foreach() powyżej możesz rozpocząć tworzenie listy spotkań dla HTML.
Kod <body> <?php echo $listaSpotkan; ?> </body> Zalecane jest stosowanie takich znaczników: <?php niż skróconych <? Poczytaj sobie: http://www.php-fig.org/psr/psr-1/ http://www.php-fig.org/psr/psr-2/ |
|
|
16.11.2017, 19:40:26
Post
#13
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Mam 2 pytanka :
1.A co w przypadku gdy do formularza chce id_meczu z aktualnego diva?( po kliknieciu w przycisk na tym divie wyświetla sie pop-up z formularzem) Nie wrzuce tego do całości skryptu php, bo mam tam js, i właśnie jak wyciągnąć id_meczu z aktualnego diva ? Czytałem coś o preg_match 2. Czy do zmiennej $listaSpotkan .= " moge wrzucić kod js w którym jest część html ? 3.Korzystając z PDO, jak używam takiego zapytania Kod $games = $db->query($query, ['status' => 0, 'limit' => 20]); to automatycznie chronie sie przed SQL injection ?
Ten post edytował BienuSS 16.11.2017, 21:26:43 |
|
|
17.11.2017, 04:42:45
Post
#14
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Pobranie id i wykorzystanie go dalej na stronie np. wysłanie do formularza AJAX jest proste, wystarczy użyć JS, tudzież z JS z jQuery. Działający orzykład tutaj: https://jsfiddle.net/h05n75ar/
Kod HTML, przykładowy - zauważ ze do każdego DIV dodaje atrybut data-* z ID spotkania z bazy Kod <div class='matchDiv' data-id-match='456'> <button/> </div> <div class='matchDiv' data-id-match='123'> <button/> </div> <div class='matchDiv' data-id-match='234'> <button/> </div> Kod JS, przykładowy - tutaj tylko pokazuję alert, ale można z tym ID robić co się chce, np. użyć funkcji .ajax() Tako kod wystarczy aby był dodany do stopki strony, przed </body> Kod $('div.matchDiv button').click(function() { var idMatch = $(this).parent().data('idMatch'); alert("Pobrane Id: " + idMatch) }); 3. PDO Bibliotekę którą Ci zaproponowałem, jest oparta na PDO, więc tak chroni przed SQL Injection, nie potrzeba dodatkowych funkcji, co nie oznacza że powinieneś mieć 100% zaufanie. Po prostu musisz wiedzieć jakie wartości możesz wprowadzać, aby nie było sytuacji że dopuszczasz że to kolumny typu integer dopuszczasz możliwość dodania wartości typu string. Dlatego warto dodając do bind string należy chronić przed skażonym kodem np. gdy ktoś spróbuje wpisać kod JavaScript. Tutaj masz krótki artykuł na temat SQL Injection z PDO: http://lukasz-socha.pl/php/niebezpieczny-kod-sql-injection/ |
|
|
18.11.2017, 14:25:07
Post
#15
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
A jak bym chciał to id wykorzystać poza tym divem? Konkretnie chodzi mi o to że w divie z meczem( w tym skrypcie php) jest przycisk po czym wyświetla sie okienko POP-up i do tego okienka chce to wykorzystać. Okienko jest odpowiedzialne za wysyłanie fomrularza( Liga Typera) i potrzebuje do tego właśnie id danego meczu
|
|
|
18.11.2017, 14:32:33
Post
#16
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Czas trochę pouczyć się JS.
Wystarczy przeredagować: $('div.matchDiv button') i aby odnosiło się to do przycisku twojego pop'a. |
|
|
18.11.2017, 14:46:16
Post
#17
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Wiem że pytam Cie o naprawde dużą ilość i jestem Ci z tego powody bardzo wzdzięczny ale to nie chodzi o przerobienie $('div.matchDiv button') ponieważ skrypt pobiera id z rodzica aktualnego diva, a mój pop-up jest zrobiony jako wgl osobny div.To co mi napisałeś już stestowałem. I naprawde zanim napisze coś na forum próbuje sam przez 1-2 dni coś popróbować niż truć znowu dupe o jakieś pierdoły. Spróbuje teraz zrobić to za pomocą funkcji $("#test3").closest("#test1")
Ten post edytował BienuSS 18.11.2017, 15:05:15 |
|
|
18.11.2017, 15:03:52
Post
#18
|
|
Grupa: Zarejestrowani Postów: 6 365 Pomógł: 1114 Dołączył: 30.08.2006 Ostrzeżenie: (0%) |
Pobierz to w JS. Np po kliknięciu w jakiś button w twoim okienku wybierz interesujący cię element, albo w ogóle zanim stworzysz okno przepisz gdzieś do niego albo zmiennej potrzebny id. To są podstawowe manipulacje na drzewie DOM których musisz się nauczyć jeśli chcesz coś dalej zrobić.
-------------------- |
|
|
18.11.2017, 15:06:41
Post
#19
|
|
Grupa: Zarejestrowani Postów: 152 Pomógł: 0 Dołączył: 3.11.2017 Ostrzeżenie: (10%) |
Właśnie poprzestane chyba teraz jakiegokolwiek pisania tej strony, i bede sie uczył wszystkiego po kolei w JS. Spróbuje teraz zrobić to za pomocą funkcji $("#test3").closest("#test1")
Ten post edytował BienuSS 18.11.2017, 15:07:06 |
|
|
18.11.2017, 16:30:24
Post
#20
|
|
Grupa: Zarejestrowani Postów: 1 836 Pomógł: 226 Dołączył: 20.03.2005 Skąd: Będzin Ostrzeżenie: (0%) |
Zamiast się zniechęcać, to prostu nie używaj narzędzi JS które utrudniają pracę. na trudniejszych rzeczach skup się później. I tak nie zrobić interaktywnej strony, skoro nie masz wiedzy i doświadczenia w projektowaniu stron WWW.
Dlatego zamiast otwierać w okienko pop-up. Otwórz stronę w nowym oknie przeglądarki. |
|
|
Wersja Lo-Fi | Aktualny czas: 26.04.2024 - 14:47 |