私はPHP-OOPを初めて使用し、コーディング方法に何か問題があるのではないかと考えています。より良いコーディング方法を求めることで評判が下がらないことを願っています。index.php、product.php、see_category.phpがあります。
以下は私のproduct.phpです:
次は私のindex.phpです:
最後に、これは私のsee_category.phpです
私の質問は、これが正しい方法ですか?それを行うためのより良い方法はありますか?
問題ないように見えますが、調査したい点がいくつかあります。あなたがしていることは、AJAX (サーバーから html をロードする) とは対照的に、一般的に AHAH と呼ばれます。Post は通常、変更、製品の作成、製品の更新などに使用されます。残りは GET に固執する必要があります。jquery には、AHAH を実行する非常に簡単な方法があります (これにより、インライン js も削除されます)。
$('#computers').on('click', function() {
$(this).load('see_category.php?cat=computers');
});
サーバー側でのレンダリングから離れて、オブジェクトをクライアントに提供し、JavaScript を介してレンダリングできるように、JSON を調べたいと思うかもしれません。
これは、この種の質問には間違った場所です。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;
上記では、テーブルを生成しておらず、返されたものをエコーしているだけですが、2番目の引数を追加し、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;
}
2番目の引数としてtrueを渡したため、テーブルが自動的に返され、条件に基づいてエコーアウトされますcase
。
MySQL インジェクション
あなたはこれを行っており、mysql 文字をエスケープしていません。したがって、コードを挿入するのは簡単です。
"SELECT * FROM product WHERE product_category='" . $category . "'"
上記のコードでは、$category にインジェクションを含めることができる POST を実行できます。mysql_real_escape_stringを実行してください
Javascript
Javascript を別のファイルで提供することで、SEO と Web サイト構造に適しています。現在、あなたjquery.js
はルートディレクトリにあります。Javascript ファイル用のサブディレクトリを作成する場合。プロジェクト ファイルの概要がわかりました。
Num rows
あなたは自分自身を数えています$sth->num_rows
。
製品クラス
あなたProduct
の製品は実際には製品ではないようです。それはグループホルダーです。ProductOverview またはもっと関連性のあるものと呼ぶこともできます。
Model View Controller
現在、製品クラスがすべてを行います。おそらく、Web ページを構築するMVCの方法を詳しく調べてください。Smarty Template を使用して、HTML を分離しておくこともできます。または別のテンプレート エンジン。
OOP
オブジェクト指向FETCH_ASSOC
ではなく、オブジェクトではなく配列を返すものを使用します。なぜ使用しないのFETCH_OBJECT
ですか?
商品を入手
する 2 つの関数を使用しており、ほぼ同じ結果が得られます。2 つではなく 1 つの関数を使用する場合は、オプションのパラメーターを設定する方がよい場合があります。