Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> Mecze z bazy danych wyswietlane na stronie
BienuSS
post 6.11.2017, 19:05:42
Post #1





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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?

Go to the top of the page
+Quote Post
Tomplus
post 6.11.2017, 19:24:35
Post #2





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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 |



Go to the top of the page
+Quote Post
BienuSS
post 6.11.2017, 19:44:07
Post #3





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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.. smile.gif

Ten post edytował BienuSS 6.11.2017, 20:01:16
Go to the top of the page
+Quote Post
Tomplus
post 6.11.2017, 20:30:13
Post #4





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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()) ).

Go to the top of the page
+Quote Post
BienuSS
post 10.11.2017, 19:30:40
Post #5





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Tomplus
post 11.11.2017, 08:25:50
Post #6





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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
Go to the top of the page
+Quote Post
BienuSS
post 12.11.2017, 18:54:50
Post #7





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Tomplus
post 12.11.2017, 20:19:13
Post #8





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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.
  1. <?php
  2. $string = '';
  3. $tablica = {zapytanie_mysql};
  4. foreach($tablica as $col) {
  5.  
  6. $string .= "
  7. <div class='item-match>
  8. {$col['nazwa-gospodarz']}-{$col['nazwa-gosc']} {$col['wynik-gospodarz']}-{$col['wynik-gosc']}
  9. </div>";
  10.  
  11. }
  12. ?>
  13. <html><head></head>
  14. <body>
  15.  
  16. <section id='listaSpotkan'>
  17. <?php
  18. echo $string;
  19. ?>
  20. </div>
  21. </body></html>
Go to the top of the page
+Quote Post
BienuSS
post 13.11.2017, 14:17:28
Post #9





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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?
Go to the top of the page
+Quote Post
Tomplus
post 13.11.2017, 17:49:12
Post #10





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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:

  1. $db = new Db();
  2. $query="SELECT `team_1`, `team_2`, `date_match`, `time_match`, `status` FROM `games`
  3. WHERE `status` = :status AND CONCAT(`date_match`,' ',`time_match`) > NOW()
  4. ORDER BY `date_match`, `time_match`
  5. LIMIT :limit;";
  6. $games = $db->query($query, ['status' => 0, 'limit' => 20]);
  7.  
  8. foreach($games as $i => $game) {
  9. $tablica_team_1[$i] = $game['team_1'];
  10. $tablica_team_2[$i] = $game['team_2'];
  11. $tablica_date_match[$i] = $game['date_match'];
  12. $tablica_time_match[$i] = $game['time_match']
  13. $tablica_status[$i] = $game['status'];
  14. }



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
Go to the top of the page
+Quote Post
BienuSS
post 13.11.2017, 19:33:26
Post #11





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


Skrypt dokładnie wygląda tak i działa perfekcyjnie
  1.  
  2. <?
  3. require("Db.class.php");
  4.  
  5. $db = new Db();
  6.  
  7. $query="SELECT `id_match`,`type_match`,`team1_img`,`team_1`, `team_2`,`team2_img`,`date_match`, `time_match`, `status` FROM `games`
  8. WHERE `status` = :status AND CONCAT(`date_match`,' ',`time_match`) > NOW()
  9. ORDER BY `date_match`, `time_match`
  10. LIMIT :limit;";
  11.  
  12. $games = $db->query($query, ['status' => 0, 'limit' => 20]);
  13.  
  14. foreach($games as $i => $game) {
  15. $tablica_id_match[$i] = $game['id_match'];
  16. $tablica_type_match[$i] = $game['type_match'];
  17. $tablica_team1_img[$i] = $game['team1_img'];
  18. $tablica_team_1[$i] = $game['team_1'];
  19. $tablica_team_2[$i] = $game['team_2'];
  20. $tablica_team2_img[$i] = $game['team2_img'];
  21. $tablica_date_match[$i] = $game['date_match'];
  22. $tablica_time_match[$i] = $game['time_match'];
  23. $tablica_status[$i] = $game['status'];
  24. }
  25. ?>


"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
Go to the top of the page
+Quote Post
Tomplus
post 13.11.2017, 21:58:17
Post #12





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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.

  1. $listaSpotkan = '';
  2. foreach($games as $i => $game) {
  3.  
  4. $listaSpotkan .= "
  5. <div>
  6. Mecz ".$game['team_1']." vs ".$game['team_2']."
  7. <br>Rozpocznie się: {$game['date_match']} {$game['time_match']}
  8. </div>
  9. ";
  10. }
  11.  
  12. //... gdzieśtam w kodzie

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/
Go to the top of the page
+Quote Post
BienuSS
post 16.11.2017, 19:40:26
Post #13





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


Mam 2 pytanka tongue.gif :

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
Go to the top of the page
+Quote Post
Tomplus
post 17.11.2017, 04:42:45
Post #14





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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/


Go to the top of the page
+Quote Post
BienuSS
post 18.11.2017, 14:25:07
Post #15





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Tomplus
post 18.11.2017, 14:32:33
Post #16





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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.
Go to the top of the page
+Quote Post
BienuSS
post 18.11.2017, 14:46:16
Post #17





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
viking
post 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ć.


--------------------
Go to the top of the page
+Quote Post
BienuSS
post 18.11.2017, 15:06:41
Post #19





Grupa: Zarejestrowani
Postów: 152
Pomógł: 0
Dołączył: 3.11.2017

Ostrzeżenie: (10%)
X----


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
Go to the top of the page
+Quote Post
Tomplus
post 18.11.2017, 16:30:24
Post #20





Grupa: Zarejestrowani
Postów: 1 828
Pomógł: 225
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.
Go to the top of the page
+Quote Post

2 Stron V   1 2 >
Reply to this topicStart new topic
1 Użytkowników czyta ten temat (1 Gości i 0 Anonimowych użytkowników)
0 Zarejestrowanych:

 



RSS Wersja Lo-Fi Aktualny czas: 29.03.2024 - 13:41