-1

我正在寻找解决我遇到的这个问题的最佳方法,并且我一直在寻找一种尝试解决它的方法。

我有一个名为的数据库表products,在这个表中我有我所有的产品,比如鞋子、衣服、帽子等

我有一个页面,我曾经根据产品将所有内容回显到其中,我使用ID的代码如下所示

<a href="product.php?ID=<?php echo $row['ID']; ?>">View</a>

网址看起来像这样

http://www.example.x10.mx/product.php?ID=1

问题是有人可以更改ID为 2 或 3 或 4.... 这不应该发生。我不知道问题是它没有使用付费域还是仅在 x10hosting 上。

问题

我想提供从将IDurl 更改为他们想要的任何随机数的用途,有人可以告诉我如何做到这一点。

另一个问题 是它们是 phpMyadmin 可以生成随机字母和数字混合的一种方式,因为这是我想到的解决问题的唯一方法

谢谢

4

2 回答 2

-1

这不是一个真正的答案,但我觉得有必要在这里发帖,因为我觉得应用程序设计情况很糟糕

从主要问题的评论线程:

很抱歉让你感到困惑,但它们没什么好混淆的。例如,帽子、鞋子使用 product.php 页面,而手套、衬衫使用 itemview.php 页面,当您单击查看时,这两个页面都使用产品 ID (ID)。希望这是有道理的

它仍然没有意义。您提到的所有这些实际上都是产品……只是不同类型的产品。在任何理智的设计中,它们都将使用相同的 URL 格式。根据产品类型执行操作的逻辑属于您用作控制器的任何内容 - 在您的情况下,我假设 url 中的 .php 页面。你只需要其中之一......从那里你可以做不同的事情。

最基本的例子:

// This is product.php

if(!isset($_GET['id'])) {
  // 404 or some other error
}

$product = get_item_by_id($_GET['id']);

if(!$product) {
   // 404 or other error
}

switch($product['type']) {
    case 'cap':
    case 'shoes':
       // for cap and shoes use the product_view template
       include 'product_view.php';
       break;

    case 'gloves':
    case 'shirts':
        // for gloves and shirts use the item_view template
       include 'item_view.php';
       break;

    default:
       // otherwise use the default product view template
       include 'default_view.php';

}

// anything else you need to do that isnt done in the view specific file

现在所有假设这些都是特定产品,但您的示例听起来更像类别。通常,您会有一个单独的页面用于与产品做很多相同事情但以某种视觉方式输出产品实体的“集合”的类别。

于 2013-07-09T13:45:44.607 回答
-1

在工作中处理我们的商务系统时,我不得不处理类似的问题。我们处理它的方式是提供用户在查询中拥有的值的哈希值。

如果您使用盐对查询字符串进行加密并使您的网址 /product.php?id=1&hash=ajk23j4aksdljfklasdjf2345j - 然后在 product.php 上验证哈希是否正确匹配。如果哈希值不匹配,则意味着用户更改了某些内容。

于 2013-07-09T00:17:49.323 回答