Problema link

Discutii despre script-uri si coduri PHP-MySQL, precum si lucru cu XML in PHP.
marianchucky
Mesaje:4

Problema link

Salut!

Am o mare problema cu mod_rewrite.
Eu am un site in care afisez cateva titluri de stiri sub forma de link ce ma trimit la o pagina articol.php unde este stirea completa.

Cod: Selectaţi tot

while( $row = mysql_fetch_assoc($result))
{
echo '<li><a href=\'articol.php?id='.$row['id'].'&titlu='.$row['url'].'\'><b>'.$row['titlu'].'</b></a></li>'; }
$row['url'] = titlul prelucrat la introducerea stirii, avand in loc de spatii caracterul "-" (ex: titlu-prelucrat-la-introducere).

In pagina articol.php am urmatorul cod

Cod: Selectaţi tot

if ( isset($_GET['id']) ) {
    $id = intval($_GET['id']);
} else {
    $id = 0;
    echo 'Stirile nu au putut fi preluate din baza de date.';
}

$query = 'SELECT * FROM stiri WHERE id='.$id.'';
$result = mysql_query($query) or die(mysql_error()); 
while($row = mysql_fetch_assoc($result)){
//pg web...
}
Afisarea stirilor in intregime si tot procesul merge bine, dar la pg unde este stirea completa am linkul: site/articol.php?id=**&titlu=titlul-stirii-respective .

Am incercat multe metode pt a rescrie url-ul cu rewrite rule in .htaccess. Am mai citit pe alte forumuri ca problema ar putea fi legata si de server.
Nu stiu ce sa cred..

Daca ma ajuta cineva i-as fi foarte recunoscator!

Multumesc anticipat!

MarPlo Mesaje:4343
Nu prea inteleg care este exact problema, faptul ca in url sunt adaugate, la "...id=**..." cele doua caractere (*) in loc de numar?
Daca e asta, atunci nu are legatura cu .htaccess si mod-rewrite, ci cu mysql si php. Si anume, cum apar in tabelul mysql datele adaugate, cum preia si returneaza php datele. Acele caractere asterics, daca nu apar si in mysql, cel mai probabil sunt adaugate de php, ori din cauza formatului charset al tabelului ori ceva de la server. Trebuie sa testezi ce returneaza separat "$row['id'].
Daca problema e alta, explica exact care anume e.

marianchucky Mesaje:4
Pana la urma ai dreptate, problema nu este legata de mod_rewrite.

Sa o iau cu inceputul:

Eu cand introduc in bd o stire, introduc idul, titlul, stirea completa si intr-un camp url introduc titlul prelucrat astfel incat in loc de spatii am "-", iar la sfarsit '_id'. De ex: titlu-separat-prin-cratima_12 .

Cu ajutorul unui fisier afisare.php inclus in pagina de net, afisez linkurile stirilor :

Cod: Selectaţi tot

..
while( $row = mysql_fetch_assoc($result))
{   echo '<li><a href=\'articol.php?id='.$row['id'].'\' title="'.$row['titlu'].'"><b>'.$row['titlu'].'</b></a></li>';
}


In pagina articol.php am introdus codul:

Cod: Selectaţi tot

...
if ( isset($_GET['id']) ) {
    $id = intval($_GET['id']);
} else {
    $id = 0;
    echo 'Stirea nu au putut fi preluata din baza de date.';
}
$query = 'SELECT * FROM stiri WHERE id='.$id.'';
$result = mysql_query($query) or die(mysql_error()); 
...
Daca dau click pe link-ul unei stiri afisate cu afisare.php ma duce, de ex, la pagina site.ro/articol.php?id=12 . Eu as vrea sa pot sa fac ca acest link sa arate ceva de genul: site.ro/articol/titlu-separat-prin-cratima_12 (valoarea din campul url).
Din cate am inteles de la altii, ar trebui schimbat codul din articol.php astfel incat sa ma folosesc de idul de la sfarsitul valorii din campul url (idul stirii). Nu stiu cum sa fac asta si speram sa ma ajute cineva sa inteleg :|.

Multumesc anticipat!

MarPlo Mesaje:4343
Acum am inteles, problema tine si de php si de mod-rewrite.
in .htaccess, pt. Mod-rewrite, ar trebui trecut codul:

Cod: Selectaţi tot

Options +FollowSymLinks
RewriteEngine On

RewriteRule ^articol/([a-zA-Z0-9-]+)_([0-9]+)$ articol.php?id=$2 [NC,L]
Iar in "afisare.php", link-ul sa fie facut asa:

Cod: Selectaţi tot

...
while( $row = mysql_fetch_assoc($result))
{   echo '<li><a href="articol/'.$row['titlu'].'_'.$row['id'].'" title="'.$row['titlu'].'"><b>'.$row['titlu'].'</b></a></li>';
}
- In "$row['titlu']" nu trebuie sa fie caracterul "_", acesta fiind folosit doar pt. separare de "id", si prin asta va fi recunoscuta in mod-rewrite partea din url pt 'id'

marianchucky Mesaje:4
Linkul arata exact cum am vrut si ma duce la pagina cu stirea completa dar a mai aparut o problema...
Din cate am vazut parca nu se mai respecta CSS-ul. (toate informatiile sunt insirate de sus in jos fara nici un aspect). La problema asta chiar nu ii gasesc rezolvare.. :?: :?:

MarPlo Mesaje:4343
CSS-ul nu se mai respecta fiindca ai adaugat un director "virtual" in link.
Inainte era "site.ro/pagina" si pagina lua css-ul relativ la pozitia ei in link, acum, fiind "site.ro/articol/pagina", a aparut 'articol/' ca director, dar in pagina calea catre CSS nu e modiicata ca sa tina cont de asta.
Solutia:
- modifici in codul HTML adresa de citire CSS cu un director inapoi "../"
- scrii calea de citire pt. CSS cu adresa absoluta, completa, adica http:// www. site.ro/cale_css

marianchucky Mesaje:4
Merge foarte bine acum.
Multumesc frumos pt ajutor si numai bine! :D

Subiecte similare