使用PHP模板输出带有数据库值的网页(变量URL)

时间:2012-08-02 23:30:13

标签: php mysql templates design-patterns

我做了一些搜索,但我对PHP不是很有经验,所以我不知道我正在寻找的正确术语/单词。 但是,我确实知道自己想做什么。

  1. 我有一个包含许多图片的网站,每个图片都有一个数据库条目(MySQL)。
  2. 我希望每张图片都有自己的着陆页,基于其数据库值。 (TitleCategoryTags等等......)
  3. 我不想在服务器上为每个图像创建单独的.php文件。 (例如:pinkflowers.phpredroses.php等......)
  4. 应该有1个PHP模板文件,根据用户访问的URL(变量)输出所有图像的网页。
  5. 因此,如果有人访问“mysite.com/pinkflowers.php”,则应使用我的数据库中的pinkflowers变量输出页面。

    但是,文件pinkflowers.php实际上并不存在,只存在template.php,这将是我数据库中所有图像的“蓝图”。

    1. 我希望从浏览器中的网址中删除.php

      “mysite.com/pinkflowers.php”=> “mysite.com/pinkflowers”

      我已经拥有使用现有网页(下方)执行此操作的代码;我不确定它是否也适用于这些“虚构”页面。

      (.htaccess)    
      RewriteCond %{REQUEST_FILENAME} !-d
      RewriteCond %{REQUEST_FILENAME}\.php -f
      RewriteRule ^(.*)$ $1.php
      
    2. 如果用户尝试访问没有相关数据库条目的页面(例如:“mysite.com/430jfif0ij”),则应将其重定向到主页。

    3. 我不希望任何人给我所有的答案,但请至少引导我朝着正确的方向开始制作这样的模板。 谢谢!

2 个答案:

答案 0 :(得分:2)

我最终能够解决自己的问题,同时没有给出任何答案。

我在这里遵循了这个教程: http://net.tutsplus.com/tutorials/other/using-htaccess-files-for-pretty-urls/

我的.htaccess包含:

RewriteEngine on    
Options +FollowSymLinks

RewriteCond %{SCRIPT_FILENAME} !-d  
RewriteCond %{SCRIPT_FILENAME} !-f  

RewriteRule ^category1/(.*)$ ./template.php?image=$1
RewriteRule ^category2/(.*)$ ./template.php?image=$1
RewriteRule ^category3/(.*)$ ./template.php?image=$1
etc...

category# - 是我的图片分类的“文件夹”。

我在template.php上执行此操作以从网址中提取变量:

$result = mysql_query('SELECT * FROM image_list WHERE image_name="' . mysql_real_escape_string($_GET['image']) . '"');

如果主页的访问者输入了无效的网址/ ID,请redirect访问该主页,我使用了这个:

if (mysql_num_rows($result)==0) {
echo "<script>window.location = 'http://mysite.com/'</script>";
}

因此,所有这些方法的组合完全符合我的要求。

答案 1 :(得分:0)

让你的.htaccess像:

RewriteCond %{REQUEST_FILENAME} !-d
RewriteCond %{REQUEST_FILENAME}\.php -f
RewriteRule ^(.*)$ template.php/$1

然后(在template.php上)使用$_SERVER["path_info"]确定用户输入的路径(即/pinkflowers)并相应地查询数据库。

我喜欢$_SERVER["path_info"]的原因是因为它不使用(或污染)GET变量空间。