Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

> [PHP] ID z tabeli w adresie
Drapeta
post 9.06.2017, 02:10:34
Post #1





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 22.10.2010

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


Witam. Robię stronę pro publico bono i mam taki kod:

  1. require_once ('baza/config.php');
  2.  
  3. try
  4. {
  5.  
  6. $db->setAttribute(PDO::ATTR_ERRMODE, PDO::ERRMODE_EXCEPTION);
  7.  
  8. $stmt = $db->query('SELECT id, cytat, autor, kategoria, home FROM slowa WHERE home LIKE "HOME" ORDER by rand() LIMIT 1');
  9. echo '<ul class="s_a">';
  10. foreach($stmt as $row)
  11. {
  12. echo '<li class="cytat">'.$row['cytat'].'</li>'.'<li class="autor">'.$row['autor'].'</li>';
  13. }
  14. $stmt->closeCursor();
  15. echo '</ul>';
  16. }
  17. catch(PDOException $e)
  18. {
  19. echo "Połączenie nie mogło zostać utworzone: " . $e->getMessage();
  20. }


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
Go to the top of the page
+Quote Post
 
Start new topic
Odpowiedzi (1 - 14)
bostaf
post 9.06.2017, 07:32:45
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.
Go to the top of the page
+Quote Post
Pyton_000
post 9.06.2017, 08:10:35
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
Go to the top of the page
+Quote Post
patwoj98
post 9.06.2017, 19:56:28
Post #4





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Drapeta @ 9.06.2017, 18:17:56 ) *
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.
Go to the top of the page
+Quote Post
patwoj98
post 10.06.2017, 20:17:45
Post #5





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Drapeta @ 10.06.2017, 10:39:58 ) *
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).
Go to the top of the page
+Quote Post
patwoj98
post 11.06.2017, 21:17:51
Post #6





Grupa: Zarejestrowani
Postów: 218
Pomógł: 16
Dołączył: 6.06.2014
Skąd: Warszawa

Ostrzeżenie: (0%)
-----


Cytat(Drapeta @ 11.06.2017, 02:04:09 ) *
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
Go to the top of the page
+Quote Post
bostaf
post 12.06.2017, 07:51:48
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();
Go to the top of the page
+Quote Post
leonpro778
post 13.06.2017, 07:06:44
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:
  1. <?php
  2. // twój kod do losowania cytatu ten co podałeś na samym początku
  3.  
  4. header('Location: adres_strony?id_cytatu=' . $id_z_kodu_powyżej);
  5. ?>


I czemu miałoby nie wejść?

Ten post edytował leonpro778 13.06.2017, 07:10:45
Go to the top of the page
+Quote Post
bostaf
post 13.06.2017, 07:32:15
Post #9





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(leonpro778 @ 13.06.2017, 08:06:44 ) *
Nie wiem czy dobrze Cię zrozumiałem ale chodzi Ci najpierw o losowanie cytatu, czyli:
  1. <?php
  2. // twój kod do losowania cytatu ten co podałeś na samym początku
  3.  
  4. header('Location: adres_strony?id_cytatu=' . $id_z_kodu_powyżej);
  5. ?>


I czemu miałoby nie wejść?

Dokładnie. Id cytatu masz w $row['id'], czyli
  1. $idCytatu = $row['id'];
Go to the top of the page
+Quote Post
Pyton_000
post 13.06.2017, 21:15:35
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
Go to the top of the page
+Quote Post
patwoj98
post 13.06.2017, 21:33:55
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
Go to the top of the page
+Quote Post
bostaf
post 14.06.2017, 11:39:52
Post #12





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(Drapeta @ 13.06.2017, 22:35:38 ) *
Dało... Właśnie chcę to zmieniać... Ale to nie rozwiąże problemu... sad.gif Ten html się pojawił dopiero po wklejeniu tutaj na stronie. Zaraz będę testował. Robię 10 rzeczy w tym samym czasie i są efekty sad.gif Dziękuję... A to jest zapewne źle, nie o to Ci chodziło?

  1. try
  2. {
  3. $_GET[idCytatu]
  4. }

Korci mnie żeby Ci napisać gotowca, ale nie smile.gif
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ć.
Go to the top of the page
+Quote Post
bostaf
post 17.06.2017, 18:30:06
Post #13





Grupa: Zarejestrowani
Postów: 374
Pomógł: 79
Dołączył: 6.04.2010
Skąd: Ostrów Wielkopolski

Ostrzeżenie: (0%)
-----


Cytat(Drapeta @ 17.06.2017, 02:19:23 ) *
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.
Go to the top of the page
+Quote Post
Drapeta
post 19.06.2017, 10:01:38
Post #14





Grupa: Zarejestrowani
Postów: 25
Pomógł: 0
Dołączył: 22.10.2010

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


Kto i za ile zrobi mi to w php? wink.gif
Go to the top of the page
+Quote Post
leonpro778
post 20.06.2017, 12:11:08
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 smile.gif

Napisz lepiej z czym masz dalej problem bo tutaj masz wszystko rozpisane od podstaw.
Go to the top of the page
+Quote Post

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: 18.07.2025 - 01:35