Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP] zmiana id w adresie na tytul - nie dziala
Forum PHP.pl > Forum > Przedszkole
Michał90
Witam,

  1. $query = mysql_query("select * from `games` where category = '" . clean($_GET['id']) . "'$limit ");
  2. while($row = mysql_fetch_array($query)) {
  3.  
  4. echo '<a href="' . $siteurl . 'games/' . $row['id'] . '/">' . $row['title'] . '</a>';
  5. }


Aktualnie gdy kliknę w utworzony link to wygląda on tak: http://adres.pl/games/342/ i działa OK
Jak zrobić, żeby link wyglądał tak:

http://adres.pl/games/NAZWAGRY/

Gdy zrobie tak:

  1. $query = mysql_query("select * from `games` where category = '" . clean($_GET['id']) . "'$limit ");
  2. while($row = mysql_fetch_array($query)) {
  3.  
  4. echo '<a href="' . $siteurl . 'games/' . $row['title'] . '/">' . $row['title'] . '</a>';
  5. }


To link wygląda tak jak chce czyli:
http://adres.pl/games/NAZWAGRY/

Ale niestety ten link nie działa...

Co zrobić, żeby działało to poprawnie?

Pozdrawiam



Rysh
Pokaż .htaccess ?
Michał90
  1. Options +FollowSymLinks
  2. RewriteEngine on
  3.  
  4. RewriteRule "^games/([0-9]+)/$" gamer.php?id=$1 [Last]
Rysh
Użyj tego:
Kod
?([a-z]*)
Michał90
Nie działa również.

Tak wygląda zrzut bazy

Rysh
Tu nie chodzi o baze, masz źle wpisane w .htaccess

Twój pliczek:
Kod
RewriteRule "^games/([0-9]+)/$" gamer.php?id=$1 [Last]

Wyraźnie widać, że w linku games/xxx/
xxx musi być cyfrą. Znajdź formułkę która pozwoli Ci wstawiać tam wszystkie znaki.

W moim .htaccess mam:
Kod
RewriteRule ^dodaj-?([a-z]*).html$ konto.php?dodaj=$1

I działa jak należy (nie sprawdzałem w przypadku jeśli $1 posiada spację).
thek
Po pierwsze -> zmana htaccess jak Ci już powiedziano. A po drugie, to w takim wypadku odczytany ciąg znaków musisz znaleźć w bazie. Poprzednio miałeś to poprzez ID, więc pytanie do bazy leciało WHERE id = numer, a teraz będzie musiało być WHERE title = 'wyraz'. I tu może być problem, bo ten title MUSI BYĆ unikatowy. Inaczej będziesz miał w wyniku problem co wyświetlić winksmiley.jpg
Rysh
No tak nie pomyślałem o tym zapytaniu.
Możesz jeszcze zrobić tak jak jest tutaj na forum, nazwa_tematu_bla_bla_t(id_tematu).html winksmiley.jpg

Możesz również dodać do zapytania na końcu LIMIT 1. Ale to raczej obejście problemu winksmiley.jpg
Michał90
Czyli jak to zrobić, żeby zadziałało i było wszystko OK?

Z góry dziekuje

Pozdrawiam
Rysh
Zrób to co napisał thek, a zadziała.
Michał90
próbowałem ale coś mi to nie działa, daje poprawny kod jak to zmienić?

  1. $query = mysql_query("select name from `categories` where id = '" . clean($_GET['id']) . "'") or die(mysql_error());
  2.  
  3. if(!isset($_GET['id'])) {
  4. header("Location: $siteurl");
  5. } elseif(empty($_GET['id'])) {
  6. header("Location: $siteurl");
  7. } elseif(mysql_num_rows($query) == 0) {
  8. header("Location: $siteurl");
  9. } else {
  10. $id = clean($_GET['id']);
  11. }
  12.  
  13. if (isset($_GET['page'])) {
  14. $pageno = clean($_GET['page']);
  15. } else {
  16. $pageno = 1;
  17. } // if
  18. $result = mysql_query("SELECT count(id) FROM `games` WHERE category = '$id'") or trigger_error("SQL", E_USER_ERROR);
  19. $query_data = mysql_fetch_row($result);
  20. $numrows = $query_data[0];
  21. $rows_per_page = $setting['pagination'];
  22. $lastpage = ceil($numrows/$rows_per_page);
  23. $pageno = (int)$pageno;
  24. if ($pageno < 1) {
  25. $pageno = 1;
  26. } elseif ($pageno > $lastpage) {
  27. $pageno = $lastpage;
  28. } // if
  29. $limit = 'LIMIT ' .($pageno - 1) * $rows_per_page .',' .$rows_per_page;
  30.  
  31. ?>


i kod, który wyświetla
  1. <?php
  2. $query = mysql_query("select * from `games` where category = '" . clean($_GET['id']) . "'$limit ");
  3. while($row = mysql_fetch_array($query)) {
  4.  
  5. echo '.....
To jest wersja lo-fi głównej zawartości. Aby zobaczyć pełną wersję z większą zawartością, obrazkami i formatowaniem proszę kliknij tutaj.
Invision Power Board © 2001-2025 Invision Power Services, Inc.