Pomoc - Szukaj - Użytkownicy - Kalendarz
Pełna wersja: [MySQL][PHP]Problem z linkami z bazy danych i htaccess
Forum PHP.pl > Forum > Przedszkole
arcziustka
Witam, jestem tu pierwszy raz i potrzebuje waszej pomocy.
Mam problem z linkami w php i htaccessie (temat był wałkowany wielokrotnie na forum, ale nie znalazłem odpowiedniego rozwiązania).

Chcę zrobić seo linki na swojej stronie, które mają być generowane dynamicznie przez serwis.
Mam kilka plików php, ale chodzi mi głownie o 2 z nich i plik htaccess.
W pliku view.php mam:
CODE

<?php
session_start();
require_once('connect.php');

$tytul= $_GET['tytul'];
$zapytanie = mysql_query("SELECT * FROM posty WHERE tytul='".$_GET['tytul']."'" ) or die("ERROR: Post doesn't exist.");
$wynik= mysql_fetch_array($zapytanie);

?>

w drugim pliku: upcoming.php mam komendę do wyświetlenia zapytania z pierwszego pliku:
CODE

echo '<a href="view.php?tytul='.$wynik['tytul'].'">'.$wynik['nazwa'].'</a>';


Działa to w taki sposób, że z pliku upcoming wywołuję plik view.php z danym parametrem 'tytuł',
efektem jest tworzenie linku w postaci:
/view.php?tytul=nazwa_z_bazy_danych

Chcę zrobić linki seo, czyli aby link wyglądał tak jak poniżej:
/view/nazwa_z_bazy_danych
W htaccesie mam do tego taką regułkę:
RewriteRule ^view/([^-]+)$ view.php?tytul=$1 [L]

Mój problem polega na tym, że o ile linki w formie view.php?tytul= działają normalnie i wyświetlają się poprawnie, to przy linkowaniu w upcoming.php w formie:
echo '<a href="view/'.$wynik['tytul'].'">nazwa linku</a>'; pojawia mi się błąd apache'a 500, czyli że jest coś nie tak z .htaccess (chociaż pozostałe linki w nim działają normalnie). Podobnie dzieje się jak wpisuje dany link ręcznie do przeglądarki, np: /view/tytul
. Potrzebuję waszej pomocy bo nie wiem gdzie leży błąd, czy coś jest nie tak z samym zapytaniem do bazy i jej zwrotem, czy też błąd leży po stronie apache'a, który nie rozpoznaje tego zapytania (chociaż sama regułka jest dobra).

Ps. Jestem zielony w php i dopiero się go uczę, dlatego potrzebuję pomocy.
CuteOne
RewriteRule ^view/([a-zA-Z0-9_]+)$ view.php?tytul=$1 [L]

Przyjmuje od a do z, od A do Z, od 0 do 9 oraz _. Odpadają linki typu tytul=zosia_śama,oh_og
arcziustka
Dzięki CuteOne za odpowiedź. Zrobię to w taki sposób, że jak ktoś poda tytuł to php będzie generować dwa wpisy w bazie, jeden "tytul" a 2 o nazwie "link" , i w tym "link" pozbędzie się z niego niepotrzebnych znaków i dostosuje go do formy wyświetlania w przeglądarce.

Rozwiązałem problem, powód był prozaiczny. Wystarczyło dodać do htaccess:
CODE
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d


Teraz mam trochę inny problem, ale nie chcę otwierać nowego działu więc opiszę go tutaj.
Mianowicie mam plik php z formularzem i tam mam w formularzu $_POST['tytul'] . Kiedy użytkownik wpisuje tytuł artykuły to php generuje z niego link do tego posta. Problem pojawia się kiedy ktoś da taki sam tytuł do nowego posta jaki już jest w bazie danych, ponieważ tworzy się taki sam link. Przydała by mi się taka funkcja która sprawdza czy link już jest w bazie danych i jeżeli już jest to aby generowała inny link, np jak mam już w bazie danych link: /nowy-post to aby tworzyła /nowy-post-1. Narazie napisałem coś takiego:
  1. $link = $_GET['url'];
  2. $sprawdz = mysql_query("SELECT `url` FROM `posty` WHERE `url`='$link'" ) or die("ERROR");
  3. $ile = mysql_num_rows($sprawdz); //to mi pobiera istniejące urle z bazy danych aby je sprawdzić z tym nowym, który ma się stworzyć
  4. if ($ile = $nowylinkgenerowanyzpost) {
  5.  
  6. // tutaj chciał bym wstawić funkcję która mi generuje nowy link do posta, jeżeli już taki istnieje w bazie
  7.  
  8. } else {
  9.  
  10. $zapytanie = "INSERT INTO `posty` (`id`, `tytul`, `obrazek`, `tagi`, `autor`, `data`, `typ`, `url`) VALUES ('', '$tytul', '$obrazek', '$tagi', '$autor', '$data', 'obrazek', '$url')";
  11. $wykonajzap = mysql_query($zapytanie);
  12.  
  13. }
  14.  

Mógł bym to rozwiązać w taki sposób, że link generuje mi z tytułu i id, ale problem jest w tym, że chce podłaczyć do tego moją starą bazę z cmsa, gdzie własnie tak było to rozwiązane.
___________________________

Ten powyższy problem też jest już nieaktualny, napisałem na stackoverflow i po chwili miałem odpowiedź, ale załączam link jak by ktoś w przyszłości musiał się z tym zmierzyć:
http://stackoverflow.com/questions/8113122...reated-by-title

Temat można zamknąć.
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.