How can I create a dynamic URL in php?

2019-04-17 08:45发布

问题:

I am new in PHP and MySQL.

Here's what I've tried so far and I can't understand how to make URL with PHP.

What I want to do is to create a dynamic web page about a particular book. I already created and have some data in my MySQL database to play with.

I've got a function to clear the special characters in the book titles.

function seo($s) {
$tr = array('ş','Ş','ı','İ','ğ','Ğ','ü','Ü','ö','Ö','Ç','ç');
$eng = array('s','s','i','i','g','g','u','u','o','o','c','c');
$s = str_replace($tr,$eng,$s);
$s = strtolower($s);
$s = preg_replace('/&.+?;/', '', $s);
$s = preg_replace('/[^%a-z0-9 _-]/', '', $s);
$s = preg_replace('/\s+/', '-', $s);
$s = preg_replace('|-+|', '-', $s);
$s = trim($s, '-');

return $s;
}

Example

echo seo($booktitle);

.htaccess

Options +FollowSymLinks
RewriteEngine on
RewriteRule ^/(.*)-(.*)$ /book.php?id=$1 [L,NC]

Link type

echo "<a href='http://sitename.com/".$bookid."-".seo($booktitle)."'>".$booktitle."</a>";

Output I want

http://sitename.com/id-book-title    

The thing is, I don't understand how I can pass the $bookid from the url to the php itself dynamically. I think I need to retrieve book_id from my database and assign it to $bookid variable, is that correct? But how can I connect it to the URL?

For instance, when I type the url http://sitename.com/5-the-trial I need to get the page for the book that has the id of 5.

What's missing here? Can you guide me to the right direction to create dynamic urls? I am both in need of guidance (learn this, search that, etc) and a specific answer to my question, if that's possible.

回答1:

Its not quite clear what your asking. If you want to create a page that lists the urls of your books, then you are not far off with your echo statement. You just need to populate $bookid and $booktitle from the database. .htaccess is not involved.

echo "<a href='http://sitename.com/".$bookid."-".seo($booktitle)."'>".$booktitle."</a>";

But if you want to unpack the URL of the link the user clicked, then you need to look at the query string passed to the page. .htaccess breaks up the URL for you and passes the $1 parameter into your script. To read the url in PHP try the following

parse_str($_SERVER['QUERY_STRING'],$query);
if (array_key_exists('id',$query)) {
   $books = explode("-",$query['id']);
}

This will create an array with the book id in the first element ($books[0]), and the first word of the title in the second etc. (If you wanted to use this approach and have the whole title in the second you might want to use a different character to delimit the id from the title to the character you use to replace spaces.



回答2:

Replace your rewrite rule to this:

Options +FollowSymLinks
RewriteEngine on

RewriteRule ^([^-]+)-(.+)$ /book.php?id=$1 [L,QSA]