![]() |
![]() |
![]()
Post
#1
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 22.10.2010 Ostrzeżenie: (10%) ![]() ![]() |
Witam. Robię stronę pro publico bono i mam taki kod:
To prosty skrypt na cytat losowy. Co dodać, by po wylosowaniu cytatu dodawało jego ID w adresie url? Chodzi o to, by móc dodawać cytat do ulubionych i by każdy miał niepowtarzalny, niezmienny adres. Dziękuję i pozdrawiam |
|
|
![]() |
![]()
Post
#2
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
To troszkę inaczej zrób.
1. Obok cytatu daj ikonkę "ulubiony". Kliknięcie tej ikonki niech powoduje zapisanie id cytatu ($row['id']) w ciastku - javascriptem. 2. Ten kod, który masz lekko zmodyfikuj - na początku daj "if ciastko istnieje" then "pobierz cytat z danym id" a jeśli nie, to losowy. |
|
|
![]()
Post
#3
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
- Dodajesz warunek na sprawdzanie czy w url jest np. ?cytat=1232
jeśli jest to wybierasz z BD cytat o tym ID. Jeśli nie ma to losujesz sobie cytat i dodajesz sobie do li np: <li data-id="12312"> a potem w JS robisz dodawanie kawałka do url z ID cytatu: https://stackoverflow.com/questions/486896/...with-javascript albo po prostu po wylosowaniu robisz redirect na już gotowy link z ww. query |
|
|
![]()
Post
#4
|
|
Grupa: Zarejestrowani Postów: 218 Pomógł: 16 Dołączył: 6.06.2014 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem, czy mnie dobrze zrozumieliście... Teraz mam adres www.strona.pl i jak wcisnę losowanie cytatu, to zaciągnie cytat (o np. ID 32), ale adres wciąż zostaje www.strona.pl A chciałbym po wylosowaniu cytatu adres zmieniał się np na www.strona.pl?id=32 Jak to zrobić z tym kodem? Co dopisać? Będę wdzięczny... Przecież Pyton podał Ci rozwiązanie Twojego problemu, zrozumiał go doskonale. Po gotowca to musisz zmienić dział na giełdę ofert. |
|
|
![]()
Post
#5
|
|
Grupa: Zarejestrowani Postów: 218 Pomógł: 16 Dołączył: 6.06.2014 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
a potem w JS robisz dodawanie kawałka do url z ID cytatu: https://stackoverflow.com/questions/486896/...with-javascript A bez JavaScript nie da się tego zrobić? PHP jest językiem działającym po stronie serwera, także musiałbyś zmieniać ID już w momencie generowania strony. Twój problem wymaga ingerencji skryptu dopiero w momencie eventu od usera, dlatego też musi być to obsłużone przez JS (frontendowo). |
|
|
![]()
Post
#6
|
|
Grupa: Zarejestrowani Postów: 218 Pomógł: 16 Dołączył: 6.06.2014 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Czy muszę używać JS, bo zastosowałem stmt zamiast get? Czy dlaczego? Dziękuję. Jeśli dobrze rozumiem - chcesz dodać do części adresu element. Tu musisz zastosować JS tylko dlatego, że id dodajesz dynamicznie do adresu. Nie możesz edytować nic w adresie jak strona jest wygenerowana, ponieważ PHP już nie jest wywoływany, ale nadal możesz dokonywać przeróżnych operacji działając w oparciu o JS. To czy użyłeś STMT czy czegokolwiek innego nie ma znaczenia - takie są już te języki. Edycja adresu jest w tylu miejscach zrobiona, że gotowiec nie jest ciężki do znalezienia i zastosowania. Ten post edytował patwoj98 11.06.2017, 21:18:42 |
|
|
![]()
Post
#7
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Bez javascript to ta druga opcja o której pisał Pyton - redirect. Za pomocą header. (btw. wg mnie to powinna być pierwsza opcja):
Kod $idCytatu = 32;
header('Location: http://www.strona.pl?id=' . $idCytatu); exit(); |
|
|
![]()
Post
#8
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze Cię zrozumiałem ale chodzi Ci najpierw o losowanie cytatu, czyli:
I czemu miałoby nie wejść? Ten post edytował leonpro778 13.06.2017, 07:10:45 |
|
|
![]()
Post
#9
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Nie wiem czy dobrze Cię zrozumiałem ale chodzi Ci najpierw o losowanie cytatu, czyli:
I czemu miałoby nie wejść? Dokładnie. Id cytatu masz w $row['id'], czyli
|
|
|
![]()
Post
#10
|
|
![]() Grupa: Zarejestrowani Postów: 8 068 Pomógł: 1414 Dołączył: 26.10.2005 Ostrzeżenie: (0%) ![]() ![]() |
No bo nie dodałeś warunku że jak jest $_GET['id_cytatu'] nie puste to ma nie losować nowego i nie przekierowywać a jedynie wyświetlić cytat o zadanym ID. Wszystko opisałem w mojej 1-szej odpowiedzi...
Ten post edytował Pyton_000 13.06.2017, 21:15:52 |
|
|
![]()
Post
#11
|
|
Grupa: Zarejestrowani Postów: 218 Pomógł: 16 Dołączył: 6.06.2014 Skąd: Warszawa Ostrzeżenie: (0%) ![]() ![]() |
Kolorowanie składni powinno dać Ci do myślenia.
header tworzy nagłówek, więc nie może być tam HTMLa. header('Location: http://strona.pl?id_cytatu='.$idCytatu); Tak powinno to działać. Musiałem dać bez BB bo dodaje ten link, rzeczywiście. Jaki teraz masz z tym problem? Ten post edytował patwoj98 13.06.2017, 21:39:11 |
|
|
![]()
Post
#12
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Dało... Właśnie chcę to zmieniać... Ale to nie rozwiąże problemu... ![]() ![]()
Korci mnie żeby Ci napisać gotowca, ale nie ![]() Chyba trzeba od początku zacząć... header Inicjuje przekierowanie, czyli wysyła tzw. nagłówki co powoduje przeładowanie strony na podany url. Nagłówki muszą być wysyłane zanim cokolwiek (nawet spacja) zostanie wysłane do przeglądarki (echo, print, var_dump, itd), w przeciwnym razie wywali błąd. Czyli już tutaj widać że Twój skrypt nie zadziała - masz echo przed wywołaniem header. Ale to tylko jeden z kilku problemów. Napisz to dokładnie w takiej kolejności, i pisz kod punkt po punkcie: 1. Sprawdzenie, czy id_cytatu jest przekazane GETem. (żadnego echa na razie) 1.1. Jeśli jest, to pobranie z bazy cytatu z tym id. Ale na razie żadnego echa - zapamiętaj w zmiennej, np. $cytat. (żadnego echa na razie) 1.2. Jeśli nie, to sprawdzenie czy istnieje ciastko z zapisanym id ulubionego cytatu. (żadnego echa na razie) 1.2.1. Jeśli istnieje, to przekierowanie (header z exitem) na url z id tego cytatu pobranym z ciastka ($_COOKIE). (żadnego echa na razie) 1.2.2. Jeśli nie istnieje, to wylosowanie cytatu i zapamiętanie go w zmiennej $cytat. (żadnego echa na razie) 2. Wydrukowanie (echo / czysty HTML po zamknięciu bloku kodu php "?>") strony razem z cytatem $cytat ORAZ ikonką polubienia cytatu z odpowiednim javascriptem zapisującym ciastko. I tyle. Odnośnie $_GET - jeśli url ma wyglądać tak: strona.pl?id_cytatu=32, to id cytatu będzie w $_GET['id_cytatu']. Czyli w p.1 sprawdzasz najpierw czy w ogóle $_GET['id_cytatu'] istnieje (isset). Odnośnie try/catch - zrezygnuj z tego na razie, bo na tym etapie może Ci zakłócać zrozumienie reszty. Potem koniecznie z try/catch, ale na razie to wyrzuć. |
|
|
![]()
Post
#13
|
|
![]() Grupa: Zarejestrowani Postów: 374 Pomógł: 79 Dołączył: 6.04.2010 Skąd: Ostrów Wielkopolski Ostrzeżenie: (0%) ![]() ![]() |
Nie rozumiem w ogóle idei tego... Bo jeśli header mam wstawić przed echo, to od razu muszę po części odpowiedzialnej za losowanie cytatu, gdzie $row jest jeszcze nie zdefiniowane. Wtedy w url dodaje mi ?id= i nic poza tym. Czyli źle definiuję $idCytatu? Dzięki... Po kolei Drapeta. Na razie nie zrobiłeś tego o czym kilka osób tutaj Ci napisało - nie ma w twoim kodzie żadnego ifa. Zrób dokładnie tak jak napisałem. Jeszcze raz podaję co i jak, i w nawiasach dodaję jak w języku programistycznym rozumieć słowa "sprawdź czy", "jeżeli", "jeśli nie", "istnieje". Na razie zrezygnuj z try/catch. Będzie prościej na początek. Później sobie dodasz. 1. Sprawdzenie (isset), czy id_cytatu jest (isset) przekazane GETem ($_GET['id']). (żadnego echa na razie) 1.1. Jeśli jest (if), to pobranie z bazy cytatu z tym id. Ale na razie żadnego echa - zapamiętaj w zmiennej, np. $cytat. (żadnego echa na razie) 1.2. Jeśli nie (else), to sprawdzenie czy istnieje (isset) ciastko z zapisanym id ulubionego cytatu ($_COOKIE['id__ulubionego_cytatu']). (żadnego echa na razie) 1.2.1. Jeśli istnieje, to przekierowanie (header i exit) na url z id tego cytatu pobranym z ciastka ($_COOKIE). (żadnego echa na razie) 1.2.2. Jeśli nie istnieje, to wylosowanie cytatu i zapamiętanie go w zmiennej $cytat. (żadnego echa na razie) 2. Wydrukowanie (echo / czysty HTML po zamknięciu bloku kodu php "?>") strony razem z cytatem $cytat ORAZ ikonką polubienia cytatu z odpowiednim javascriptem zapisującym ciastko. |
|
|
![]()
Post
#14
|
|
Grupa: Zarejestrowani Postów: 25 Pomógł: 0 Dołączył: 22.10.2010 Ostrzeżenie: (10%) ![]() ![]() |
Kto i za ile zrobi mi to w php?
![]() |
|
|
![]()
Post
#15
|
|
Grupa: Zarejestrowani Postów: 146 Pomógł: 19 Dołączył: 1.03.2012 Ostrzeżenie: (0%) ![]() ![]() |
To już chyba kategoria zlecenie czy coś tam
![]() Napisz lepiej z czym masz dalej problem bo tutaj masz wszystko rozpisane od podstaw. |
|
|
![]() ![]() |
![]() |
Wersja Lo-Fi | Aktualny czas: 18.07.2025 - 01:35 |