Witaj Gościu! ( Zaloguj | Rejestruj )

Forum PHP.pl

2 Stron V   1 2 >  
Reply to this topicStart new topic
> [MySQL][PHP]przyjazne linki w mysql?
qoqo
post
Post #1





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Witam.

Chcę zrobić bazę artykułów z newsami

Wygląd bazy danych jest taki:

ID TYTUŁ NEWSA URL TRESC DATA


Załóżmy tytuł nosi nazwe z polskimi znakami "przykładowy tytuł"

I w bazie wygląda to tak:

ID TYTUŁ NEWSA URL TRESC DATA
1 PRZYKŁADOWY TYTUŁ TREŚĆ ITD 4.04.2020


jak zrobić, aby tytuł newsa wrzucił w tabele URL o takim wyglądzie: przykladowy-tytul

i wtedy zamiast wyświetlania przez ID wyświetlałbym tytuł za pomocą %LIKE% przykladowy-tytul czyli na zasadzie URl wyświetlałby mi się post


w jaki sposób to zrobić?

Go to the top of the page
+Quote Post
Pyton_000
post
Post #2





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


To sie nazywa Slug
Możesz zrobić tym np: http://stackoverflow.com/a/2955878
Wrzucasz do BD.

Przy wejściu sprawdzasz string, szukasz w BD i pobierasz odpowiedni content.
Go to the top of the page
+Quote Post
qoqo
post
Post #3





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


super, dzięki o to mi chodziło smile.gif

Jeszcze mam jeden problem.

chodzi o tagi...

Dodaje poprawnie tagi przykład: ola śćź, karolina ęąć.

Przy dodawaniu do tablicy 'tagi' dodaje te same tagi do tablicy 'tagi_url' gdzie zamienia je na taką postać: ola-scz, karolina-eac, itd itp

W jaki sposób wyświetlić te tagi a później w jaki sposób zrobić, jak ktoś kliknie na link np. tag-ola-scz.html wyszuka za pomocą %LIKE% wpisy o zawartości ola-scz ?



baza wygląda tak:




Ten post edytował qoqo 5.03.2015, 13:43:29
Go to the top of the page
+Quote Post
fklar
post
Post #4





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


Kod
SELECT * FROM `wpisy` WHERE `tagi_url` LIKE '%ola-scz%'


Natomiast ja bym to zrobił inaczej. Nie lepiej stworzyć osobno tabelę z tagami i powiązanie tag-wpis, gdzie po prostu w osobnej tabeli trzymałbyś id wpisu i id powiązanych z nim tagów?


--------------------
fklar.pl
Go to the top of the page
+Quote Post
qoqo
post
Post #5





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


w jaki sposób to zrobić?
Go to the top of the page
+Quote Post
fklar
post
Post #6





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


Uproszczona struktura:

Wpisy
id | tytuł | slug | treść | data

Tagi
id | nazwa | slug

Tagi wpisów
id | id wpisu | id tagu

Wtedy jak masz np. wpis "Testowy" o id 1 i tagi A (id 8) i B (id 20) to w tabeli z tą relacją będziesz miał:

id | id wpisu | id tagu
1 | 1 | 8
1 | 1 | 20

Będziesz miał większą przejrzystość w bazie. Wtedy mając id tagu pobierzesz sobie id wszystkich wpisów z tym tagiem i je sobie wyświetlisz.


--------------------
fklar.pl
Go to the top of the page
+Quote Post
qoqo
post
Post #7





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


a jak zrobić aby we wpisie tagi się wyświetlały?
załóżmy otaguję post: tag-1, tag-2, tag-3

to chcę aby przy wejściu w ten wpis wyświetlały się te tagi i adres url do tych tagów (to nie problem)

ale jak tu zrobić?

ja nie pobieram treści wpisu poprzez ID tylko poprzez URL wpisu %LIKE%

(widać w bazie)

Ten post edytował qoqo 5.03.2015, 16:46:05
Go to the top of the page
+Quote Post
fklar
post
Post #8





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


1. Tak samo znajdziesz sobie po id wpisu wszystkie tagi.
2. Nic nie szkodzi, żeby znaleźć id tagu znając slug obecny w adresie.

Wiem, że to może skomplikowanie wygląda, ale tak właśnie się robi.


--------------------
fklar.pl
Go to the top of the page
+Quote Post
qoqo
post
Post #9





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


ok rozumie, mam nadzieje, że dam radę.
jedyne pytanie: jak zrobić na zasadzie ID wpisu, skoro dodają się równocześnie wpis i tagi jeszcze nie jest znany ID wpisu, wygenerować jakiś unikalny klucz bez powtórzeń?

Ten post edytował qoqo 5.03.2015, 21:16:12
Go to the top of the page
+Quote Post
fklar
post
Post #10





Grupa: Zarejestrowani
Postów: 61
Pomógł: 13
Dołączył: 17.12.2011

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


ID masz w bazie danych jako główny klucz, który jest przyporządkowywany automatycznie do rekordu. Funkcja mysqli_insert_id zwróci Ci ostatnio dodane ID w tabeli.


--------------------
fklar.pl
Go to the top of the page
+Quote Post
qoqo
post
Post #11





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Wpisy
id | tytuł | slug | treść | data

Tagi
id | nazwa | slug

Tagi wpisów
id | id wpisu | id tagu


Więc chodzi mi o to: Dodaję wpis do wpisy, po dodaniu tworzy ID unikalny np. 100, 120 itd - rozumiem, jednak przy jednym zapytaniu gdzie leci treść do wpisów, jak zrobić aby w tabeli tagi wpisów pojawiły się ID wpisu i ID tagów?

troche jestem ciemny w tym biggrin.gif albo mózg od myślenia przegrzany
Go to the top of the page
+Quote Post
Pyton_000
post
Post #12





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Normalnie, dodajesz tagi - również masz ich ID, zbierasz to do kupy i wrzucasz do "tagi wpisów"
Go to the top of the page
+Quote Post
qoqo
post
Post #13





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


Mam:

  1.  
  2. ///// Dodajemy treść do bazy wpisy_$tabela w tym przypadku jest to wpisy_test
  3. $zapytanie = "INSERT INTO wpisy_$tabela SET tytul='$tytulWpisu', url='$clean', tresc='$trescWpisu', trescwpis='$trescWpisu2', obrazek='$obrazekWpisu', description='$description', keywords='$keywords'";
  4. mysql_query($zapytanie);
  5. $wpis_id = mysql_insert_id();
  6. if($zapytanie) echo "<font color='green'>Wygenerowano wpis: <b>".$tytulWpisu." </b></font>";
  7. else echo "Błąd nie udało się dodać nowego rekordu";
  8.  
  9. ////
  10. $tagi_all= explode(',', strtolower($tagiWpisu));
  11. for ($x = 0; $x < count($tagi_all); $x++) {
  12. //dodajemy tagi tagi_test
  13. $zapytanie_tagi = "INSERT INTO `tagi_test` (`id`, `nazwa`) VALUES ('', '" . $tagi_all[$x] . "')";
  14. $maket = mysql_query($zapytanie_tagi);
  15.  
  16. //pobieram id tagu
  17. $tag_id = mysql_insert_id();
  18.  
  19. // tutaj dodajemy ID tagu i id wpisu
  20. $zapytanie_id = "INSERT INTO `tagi_wpisow_test` (`id`, `id_tagu`, `id_wpisu`) VALUES ('', '$tag_id', '$wpis_id')";
  21. $maketm = mysql_query($zapytanie_id);
  22. }


Zrobiłem jeszcze tagi bez slug'a - wrzuca je to bazy poprawnie.

Problem pojawia się w ostatniej tabeli tagi_wpisow_test

gdzie mam: ID, ID_wpisu i id_tagu

dodaje ttylko jeden rekord :1, IDWPISU: 140, ID TAGU: 10

czyli pierwszy wygenerowany tag mi jedynie dodaje, reszty nie... jak zrobić, aby wrzuciło:

ID, ID WPISU, ID TAGU:
1, 100, ID1
2, 100, ID2
3, 100, ID3

Nie wiem czy dobrze kombinuję? co jest źle?

Ten post edytował qoqo 6.03.2015, 13:17:49
Go to the top of the page
+Quote Post
Pyton_000
post
Post #14





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


- Nie potrzebujesz id w tagi_wpisow_test
- załóż indeks PK na (id_tagu, id_wpisu)

  1. ///// Dodajemy treść do bazy wpisy_$tabela w tym przypadku jest to wpisy_test
  2. $zapytanie = "INSERT INTO wpisy_$tabela
  3. SET
  4. tytul='$tytulWpisu',
  5. url='$clean',
  6. tresc='$trescWpisu',
  7. trescwpis='$trescWpisu2',
  8. obrazek='$obrazekWpisu',
  9. description='$description',
  10. keywords='$keywords'";
  11. mysql_query($zapytanie);
  12. $wpis_id = mysql_insert_id();
  13.  
  14. if($zapytanie)
  15. {
  16. echo '<span style="color: green; ">Wygenerowano wpis: <b>' .$tytulWpisu. ' </b></span>';
  17. }
  18. else
  19. {
  20. echo "Błąd nie udało się dodać nowego rekordu";
  21. }
  22.  
  23. $tagi_all= explode(',', strtolower($tagiWpisu));
  24.  
  25. foreach ($tagi_alla as $tag)
  26. {
  27. // Sprawdzamy czy jest taki tag, Nie ma sensu dodawać x takich samych
  28. $sql = "SELECT id FROM tagi_test WHERE nazwa = '$tag'";
  29.  
  30. if(!$id)
  31. {
  32. $sql = "INSERT INTO tagi_test (nazwa) VALUES ('$tag')";
  33. mysql_query($sql);
  34. $id = mysql_insert_id();
  35. }
  36. else {
  37. $id = $id[0];
  38. }
  39.  
  40. $sql = "INSERT INTO `tagi_wpisow_test` (`id_tagu`, `id_wpisu`) VALUES ('$id', '$wpis_id')";
  41. mysql_query($sql);
  42. }
Go to the top of the page
+Quote Post
qoqo
post
Post #15





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


wyskakuje Fatal error: Cannot use object of type stdClass as array in 125

a ta linia to:

  1. $id = $id[0];


Ten post edytował qoqo 6.03.2015, 13:44:11
Go to the top of the page
+Quote Post
Pyton_000
post
Post #16





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


zamień fetch_field na fetch_row
Go to the top of the page
+Quote Post
qoqo
post
Post #17





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


super dziękuję. Mam jeszcze jedno pytanie odnośnie slug'a tagów:

dodaję również
  1. $tagi_slug = explode(',', strtolower($cleantagi));


i równiez jadę tak jak z zwykłym tagiem, czy łącze w jedno?
Go to the top of the page
+Quote Post
Pyton_000
post
Post #18





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


slug dodajesz do 'tagi_test' razem z normalnym tagiem.
Go to the top of the page
+Quote Post
qoqo
post
Post #19





Grupa: Zarejestrowani
Postów: 53
Pomógł: 0
Dołączył: 5.06.2014

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


ok jeszcze jedno: w jaki sposób pobrać to we wpisie?

Chodzi mi o to, że mam pobrane wszystkie pola wpisu : między innymi ID

i teraz wyszukuję z tabeli tagi wpisów za pomocą LIKE ID z artykułu, przypisuje pobrany IDtagu i na tej podstawie wyświetlam z tabeli tagi_test we wpisach?

Ten post edytował qoqo 6.03.2015, 15:58:48
Go to the top of the page
+Quote Post
Pyton_000
post
Post #20





Grupa: Zarejestrowani
Postów: 8 068
Pomógł: 1414
Dołączył: 26.10.2005

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


Jak masz ID wpisu to

  1. SELECT name FROM tagi_wpisow_test tw JOIN tagi_test t ON(t.id = tw.tag_id) WHERE tw.wpis_id = 3

W ten deseń
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 Aktualny czas: 21.08.2025 - 18:46