0

私は大学のプロジェクトのショッピング カートの Web サイトに取り組んでおり、助けが必要です。

このサイトは現在http://www.cutecupcak.esで制作中です。

現時点では、各製品には http://cutecupcak.es/product.php?id=11 のような URL がありますが、http://cutecupcak.es/product.php?id=のようなものにしたいと考えています。チョコレート_カップケーキ

これは、これを機能させるために与えられたコードです。

if(isset($_GET['id'])) {
$id = $_GET['id'];
$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_id`=($id)");    
}

cake_nameではなく を表示するには、何を変更する必要がありcake_idますか?

4

5 に答える 5

2

データベースに名前とIDの両方があり、両方を検索して使用できるため、URLに名前を入れることができます。これは非常に簡単です。

名前とIDの両方です
が、私はそれをお勧めしません。製品名が少し変わる可能性があり、変更すると古いリンクが機能しなくなります。

次のような URL を作成します。

http://cutecupcak.es/product.php?id=11&name=chocolate_cupcake 

またはむしろ:

http://cutecupcak.es/product/11/chocolate_cupcake

これらの URL は安全にインデックス化できます。数値の検索に使用できる数値 ID を保持します。名前は URL にもあり、読みやすさと SEO (検索エンジン最適化) には適していますが、名前に実際の意味はありません。番号を取得したので、無視しても問題ありません。そのため、名前を変更した後も、以前にインデックス付けされリンクされたすべての URL が有効なままになります。

製品名にアンダースコアの代わりにダッシュを使用することを選択します. 私はchocolate-cupcakechocolate+cupcakeの両方が よりもインデックスされていると信じていますchocolate_cupcakeが、このトピックに関する私の情報は少し古くなっている可能性があります。

mysql? パラメーター!
また、 を使用しなくなり、 または を使用することをお勧めmysql_*PDOますmysqli。どちらも、パラメーター化されたクエリを使用できます。これにより、ID または名前を安全で透過的な方法でクエリに渡すことができます。mysql_real_escape_stringまたはそのような機能を使用するよりも安全で、クリーンで、パフォーマンスが優れています。パラメータの使用に慣れると、すべての変数をパラメータとして渡し始めるため、特に安全です。現在のクエリで変数をエスケープするのを忘れることはありますが、エスケープする必要がないため、変数をエスケープすることを忘れることはできません。

于 2012-11-12T22:29:24.693 に答える
2

通常、ID ではなく名前で製品を参照する場合は、UNIQUE キーを使用して新しい列 (私は常に "slug" という名前を付けます) を追加する必要があります。次に、製品が追加または編集されると、その名前に基づいてスラッグ列の新しい値が生成されます。たとえば、「Chocolate Cake」から「chocolate_cake」を作成します。次に、スラッグが一意かどうかを確認する必要があります。そうでない場合は、何らかの方法で競合を解決します (例: "chocolate_cake_1")。

この設定がすべて完了している場合は、一意のスラッグで適切な製品を選択するだけです。

$result = mysql_query("SELECT * FROM `CAKE` WHERE `slug`='" . mysql_real_escape_string($_GET['id']) . "'"); 

そして - 明らかに - 非推奨の mysql 関数の代わりに mysqli を使用してください。

http://php.net/manual/en/mysqli.query.php

于 2012-11-12T22:30:58.527 に答える
1

次のようなことを試してください:

if(isset($_GET['id'])) {
   $id = $_GET['id'];
   $result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=(". mysql_real_escape_string($id). ")");    
}

注: これをmysql_real_escape_string行わないと SQL インジェクションのリスクが非常に高くなるため、 も追加しました。

于 2012-11-12T22:28:48.013 に答える
0

以下は、あなたがしなければならないことの青写真です: 1- テーブルで、cake_name フィールドを一意に設定する必要があります。2- SQL クエリは次のようになります。

$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=($id)");    

3- 製品リストで見つかったリンクを変更して、数値 ID の代わりに cake_name 値を取得します。

于 2012-11-12T22:32:17.700 に答える
0

これは次のように変わるだけだと思います:

$result = mysql_query("SELECT * FROM `CAKE` WHERE `cake_name`=($id)"); 
于 2012-11-12T22:25:18.227 に答える