skip to Main Content

Im developing my own PHP Mysql site.

I used to fetch data by id like this : mysite.com/articles.php?id=12

now i want to change the url with slug:

mysite.com/articles/google-search

or

mysite.com/articles.php?article=google-search

I dont want to use id and numbers.

My table:

+----+---------------+---------+------------------------------------+
| id | title         | article |   urlslug                          |
+----+---------------+---------+------------------------------------+
| 12 | google search | xxxxxxx |   google-search                    |
| 13 | bing yahoo    | xxxxxxx |   bing-yahoo                       |
| 14 | friendly seo  | xxxxxxx |   friendly-seo                     |
+-------------------------------------------------------------------+

I used the below code to get data by id:

$id = $_GET['id'];
$id = mysqli_real_escape_string($conn,$id);
$query = "SELECT * FROM `table` WHERE `id`='" . $id . "'";
$result = mysqli_query($conn,$query);

while($row = mysqli_fetch_array($result)) {
echo ($row['title']);
echo ($row['article']);    }

I tried the above code by substituting urlslug it says Invalid ID specified.
I googled and even searched in stack questions i didnt get any help. Please assist me. Thanks in advance.

2

Answers


  1. If url is like this mysite.com/articles.php?article=google-search
    then instead of id get the article from url and change the condition to urlslug instead of id.

    $slug = $_GET['article'];
    $slug = mysqli_real_escape_string($conn,$slug);
    $query = "SELECT * FROM `table` WHERE `urlslug`='" . $slug. "'";
    $result = mysqli_query($conn,$query);
    
     //Since  slug is unique you will get only 1 result so no need to loop
    
     $row = mysqli_fetch_array($result);
     echo $row['title'];
     echo $row['article'];    
    
    Login or Signup to reply.
  2. You can use the following rule in Root/.htaccess

    RewriteEngine On
    
    
    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^articles/([^/]+)/?$ /articles.php?id=$1 [NC,L] 
    

    This will rewrite

    example.com/articles/123
    

    to

    example.com/articles.php?id=123
    
    Login or Signup to reply.
Please signup or login to give your own answer.
Back To Top
Search