URL中有两个单独的ID?

时间:2013-07-20 17:17:52

标签: php mysql sql cakephp

我正在设计一个人们可以在学校附近看到快餐店的网站。

我希望它能做什么;

在首页我有一些可供选择的学校,然后我点击该学校,然后根据该学校的$ id转到另一页。该页面显示了另一组食物类型(墨西哥,中国)。然后我可以点击一个类别,我希望下一页向我展示与我选择的特定学校相近的特定食物类型。

可能用于此目的的表格设计如下

id | school_id | category_id | food_id

正如您可能知道的那样,每个个人ID都与另一个表格相关联,该表格包含学校名称,类别名称或快餐店/开放时间/电话号码。

我如何实现这一目标?我假设我需要显示如何传递school_id和category_id,然后使用SQL搜索具有这两个ID的条目。

2 个答案:

答案 0 :(得分:3)

您可以在网址中传递两个内容...例如:http://www.example.com?school_id=1&category_id=2

然后在代码中

if(isset($_GET['school_id'])){ $school_id = $_GET['school_id']; }

if(isset($_GET['category_id'])){ $category_id = $_GET['category_id']; }

请记住,通过URL传递的值非常不安全,在使用它们查询数据库之前必须进行转义/验证。

答案 1 :(得分:0)

假设您希望将您的请求路由到学校控制器的查看功能,您应该使用HTML Helper建立您的链接,如下所示

$this->Html->link('Anchor Text', array('controller' => 'Schools', 'action' => 'view', 'school_id' => $school_id, 'category_id' => $category_id));

这会创建一个类似http://www.example.com/schools/view/school_id:3/category_id:4

的链接

您可以使用

在学校控制器的查看功能中访问这些值
$school_id = $this->request->params['named']['school_id'];
$category_id = $this->request->params['named']['category_id'];

如果您不喜欢网址结构,并希望将其更改为说http://www.example.com/search_school/3/4/以使其更友好,请在routes.php中添加以下行

Router::connect(
  '/search_school/:school_id/:category_id', 
  array('controller' => 'schools', 'action' => 'view'));

Cakephp的美妙之处在于您无需更改任何其他内容,您可以随时更改路由器文件中的URL结构。