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


Output Webpage (Variable URL) with Database values, using PHP Template

我四处搜索了一下,但我对PHP没有太多经验,所以我不知道我要找的正确术语/单词。然而,我确实很清楚我想做什么。

  1. 我有一个有很多图片的网站,每个图片都有一个数据库条目(MySQL)
  2. 我希望每个图像都有自己的登录页,基于其数据库值。(TitleCategoryTags等)
  3. 我不想在我的服务器上为每个图像制作一个单独的.php文件。(例如:pinkflowers.phpredroses.php等)
  4. 应该有一个PHP模板文件,根据用户访问的URL(变量)输出所有图像的网页

因此,如果有人访问"mysite.com/pinkplowers.php",那么该页面应该使用我的数据库中的变量pinkflowers输出。

然而,文件pinkflowers.php实际上并不存在,只有template.php存在,它将是我数据库中所有图像的"蓝图"。

  1. 我希望.php从浏览器的URL中删除。

    "mysite.com/pinkplowers.php"=>"mysite.com/spinkplowers"

    我已经有代码可以对我现有的页面执行此操作(如下);我不确定它是否也适用于这些"想象"页面。

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

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

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

我在这里学习了本教程: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上这样做是为了从URL:中提取变量

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

对于redirect,如果主页的访问者输入了无效的URL/ID,我使用了这个:

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

因此,所有这些方法的结合正是我想要的。

让.htaccess类似于:

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

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

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