0

我是 PHP-OOP 的新手,想知道我的编码方式是否有问题。我希望我不会因为要求更好的编码方式而降低声誉。我有一个 index.php、product.php、see_category.php。

下面是我的product.php:

在此处输入图像描述 在此处输入图像描述

接下来这是我的 index.php:

在此处输入图像描述

最后这是我的see_category.php

在此处输入图像描述

我的问题是,这是正确的方法吗?有更好的方法吗?

4

3 回答 3

3

看起来不错,只是您可能想调查的几点:您所做的通常称为 AHAH,而不是 AJAX(从服务器加载 html)。Post 通常用于进行更改、创建产品、更新产品等。其余的你应该坚持 GET。jquery 有一种非常简单的方式来执行 AHAH(这也删除了内联 js):

$('#computers').on('click', function() {
    $(this).load('see_category.php?cat=computers');
});

您可能想查找 JSON,这样您就可以摆脱在服务器端的渲染,而是将对象提供给客户端,并通过 javascript 渲染它们。

于 2013-01-30T18:22:39.373 回答
1

这是此类问题的错误位置,您需要在codereview.stackexchange.com结束。然而; 我的意见是该see_category.php文件应该是类似的product_controller.php,它应该作为所有产品相关功能的控制器。您应该检查 post 变量的存在,并根据 post 变量中的内容采取相应的行动。

require_once('product.php');
$product = new Product(); 

如果有帖子请求,服务器只会在此文件中,无论帖子条件如何,都没有理由不实例化该类。

if($_POST): 
    switch($_POST):
        case 'category' : 
           echo $product->set_products_by_category($_POST['category'], TRUE);
           break;
    endswitch; 
endif;

您会注意到在上面我没有生成表格,我只是在回显返回的内容,但是我添加了第二个参数并传入了 TRUE 值,现在让我们看看我们的函数。

public function set_products_by_category($category, $echo = FALSE){
   //your current code
   //after the while statement...
   if(TRUE === $echo):
       return $this->generate_table();
   endif;
}

因为我们将 true 作为第二个参数传入,所以它会自动将表格返回给我们,我们会根据我们的case条件将其回显。

于 2013-01-30T18:19:42.703 回答
1

MySQL 注入
您正在这样做,而不是转义 mysql 字符。所以很容易注入代码。

"SELECT * FROM product WHERE product_category='" . $category . "'" 

上面的代码我可以做一个 POST,其中 $category 可以包含一个注入。请做一个mysql_real_escape_string

Javascript
在不同的文件中提供 Javascript,这样它对您的 SEO 和您的网站结构更好。当前您jquery.js位于根目录中。如果您为 Javascript 文件创建子目录。您对项目文件有了更多的了解。

Num rows
你在数自己,为什么不使用$sth->num_rows

产品类
似乎您Product的产品实际上不是产品。它更像是一个团体持有者。也许称它为 ProductOverview 或更相关的东西。

模型视图控制器
目前你的产品类可以做所有事情。也许更多地研究构建网页的MVC方式。也许使用Smarty模板来保持你的 HTML 分离。或不同的模板引擎。

OOP
你不想更面向对象,但你使用FETCH_ASSOC它返回一个数组而不是一个对象。为什么不使用FETCH_OBJECT

获取产品
您正在使用 2 个功能几乎相同的结果。在使用 1 个函数而不是 2 个函数的地方放置一个可选参数可能会更好。

于 2013-01-30T18:28:40.627 回答