Autor Zpráva
barneby
Profil
Dobrý den,
Chci se zeptat jak udělám když mám např tento link:

stranka.cz/index.php?id=5

Aby vypadal nějak takhle:

stranka.cz/clanek/15

Předem děkuji za všechny odpovědi :).
Slark
Profil *
použij rewrite v .htaccess

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^clanek(.*) index.php?clanek=$1
barneby
Profil
A nešlo by to nějak pomocí PHP?
juriad
Profil
barneby:
Ne. PHP té pěkné adrese nerozumí. Musíš použít nějaký nástroj (modrewrite), který ty adresy přepíše dříve než se dostanou k PHP.
Amunak
Profil
barneby:
Nešlo, potřebuješ, aby ti server přepisoval požadavky.
barneby
Profil
Aha ale to pomocí .htaccess je také dobrej způsob, Děkuji.
Davex
Profil
barneby:
A nešlo by to nějak pomocí PHP?
I v PHP by to šlo třeba takto:

http://www.example.com/clanek.php/15 a číslo si ve skriptu clanek.php vytáhneš z proměnné $_SERVER["PATH_INFO"]

http://www.example.com/?15 a číslo si ve skriptu index.php přečteš z proměnné $_SERVER["QUERY_STRING"]
barneby
Profil
Slark:
použij rewrite v .htaccess
>
>
1
2
3
4
5RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^clanek(.*) index.php?clanek=$1

To nefunguje :(
Rfilip
Profil
Nefunguje znamená co?
barneby
Profil
Když do jdu na stranka.cz/clanek/15 tak mi to napíše že stránka neexistuje.
Rfilip
Profil
Opravdu máte v .htaccess v document rootu webu toto:

RewriteEngine On
RewriteBase /
RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME} !-f
RewriteRule ^clanek(.*) index.php?clanek=$1
?
Máte možnost zobrazit logy serveru?
barneby
Profil
Rfilip:
Máte možnost zobrazit logy serveru?
Bohužel ne :(

Opravdu máte v .htaccess v document rootu webu toto:
Ano mám


Už my to jde ale nejdou my vyčíst hodnoty.
han5vk
Profil
nejdou my vyčíst hodnoty
Ako nejdú? Nie je definovaná premenná $_GET['clanek'], je prázdna alebo ako? Čo vypíše var_dump($_GET) ?
barneby
Profil
Mám to takhle:

if 

  (isset($_GET['clanek'])){

  $id=(int)$_GET['clanek'];     

  $read = $db->query("SELECT * FROM `clanky` WHERE `id`='$id' LIMIT 1") or die (mysql_error());

if(mysql_num_rows($read))

    {

    while($p = mysql_fetch_assoc($read))

        {

        echo "<div class='new-obsah'>\n";

        echo "<h2>".$p['nazev']."</h2>\n";

        echo "<div class='new-hl'>".$p['clanek']."</div>\n";

              

        echo "</div>\n";

      }}else{

        $bl="index.php?Alert=1";

        header("location: $bl"); 

      }

  }
han5vk
Profil
Kde ti to zlyháva, vypíše to nejakú hlášku? Máš zapnuté zobrazovanie chýb?

V $db máš predpokladám objekt MySQLi(prípadne iný DB objekt), na ktoré potom voláš MySQL (procedurálne, nie objektové) funkcie.
barneby
Profil
Vše v php funguje správně hlášky mám zaplí a nepíše to nic.
han5vk
Profil
No, a čo vlastne nefunguje? Nevytiahnu sa tie články, alebo ako? Keď ti „nejdou my vyčíst hodnoty“ ?
barneby
Profil
No tak hodnota $_GET['clanek'] se nevyčte
Kubo2
Profil
barneby:
No tak hodnota $_GET['clanek'] se nevyčte.
Tak si daj vypísať var_dump($_GET); a ten skript zavolaj explicitne s parametrom ?clanek=11 a potom pomocou "hezkej url" - tj. server.cz/clanek/11 a porovnaj výstupy. Obidva by ti mali vypísať to isté:

Array(1) {
  "clanek" => string(2) "11"
}

Ak sa ti nevypíše niečo takéto, tak je zrejme problém v rewrite module.

Vaše odpověď

Mohlo by se hodit


Prosím používejte diakritiku a interpunkci.

Ochrana proti spamu. Napište prosím číslo dvě-sta čtyřicet-sedm: