0

私は、製品を表示するための最大 7 つの Web ページ テンプレートをユーザーに提供するメンバー サイトを持っています。各テンプレートには同じフィールド名があり、それぞれの末尾に _1、_2... _7 で区別されます。

例えば:

// Template 1 would have the following list of variables
product_name_1
product_descript_1
product_color_1
product_price_1

// Template 2 would have the following list of variables
product_name_2
product_descript_2
product_color_2
product_price_2

// through Template 7

URLでuser_idを識別するクエリ文字列を使用して、Webページ内の特定のユーザーの変数を表示できます。

http://domain.com/folder/page.php?id=78

次に、PHP ファイルで変数を特定するだけで、任意の変数を $_Get します。つまり、

$product_name_1
$product_descript_1
$product_color_1
$product_price_1

私の問題は、各テンプレートが特定の製品、つまり_1、_2、..._7を識別するため、URLがどのテンプレートを識別する必要があるかということです。次のような URL でパラメーターを使用するにはどうすればよいですか?

http://domain.com/folder/page.php?id=78&parameter=_7

...Web ページに表示される _7 で終わるすべての変数を識別するには? URL で使用されるパラメーターは、Web ページで使用される変数 (_1、_2 など) を識別します。

アップデート

さまざまな回答を試しましたが、部分的な成功しかありませんでした。つまりArray_x、提案されたコードとともに特定の変数を使用すると、「」が表示されます。次のように、page.php で使用している残りのコードと競合する可能性があります。

$db_connection = new mysqli("", "", "");
if ($db_connection->connect_errno) {
   echo "Failed to connect to MySQL: (" . $mysqli->connect_errno . ") " . $mysqli->connect_error;
}

$id = $_GET['id']; 
$query = mysql_query("SELECT * FROM table_name WHERE id = '$id' LIMIT 1") or die(mysql_error()); 
$row = mysql_fetch_object($query);

$prop_address=array(
"_1"=>"prop_address_1",
"_2"=>"prop_address_2",
"_3"=>"prop_address_3"
//Through to Temp 7
);

$prop_address{$_GET['parameter']}=$row->prop_address;

    echo " $prop_address{$_GET['parameter']} ";

"Array_x" が表示されます (x=1、2、3 などは URL のパラメーターとして使用されます。つまり、http://domain.com/page.php?id=72¶meter=1 ) に保持されている実際の値の代わりにのデータベース テーブル$product_name{$_GET['parameter']}。何らかの理由で、コードがデータベース テーブルから変数の値を取得していません。

4

3 に答える 3

2

配列を使用することは可能でしょうか...

$product_name=array(
    "1"=>"Product name for template 1",
    "2"=>"Product name for template 2"
    //Through to Temp 7
);
echo $product_name[$_GET["parameter"]];

その後、他の変数についても同じことができます。

次のようにして、各配列を埋めることができます。

$row = mysql_fetch_object($query);
$product_name[$_GET['parameter']]=$row->product_name;
echo $product_name[$_GET['parameter']];

何かが足りないかもしれません...

于 2012-06-11T16:07:56.607 に答える
0

私は仕事に与えられた答えを得ることができませんでした。ここで、PHP マニュアルの php 変数変数のユーザーによって与えられた例を見つけて、それが機能することを発見しました。次のようにコードに組み込みました。

  $id = $_GET['id']; 
  $query = mysql_query("SELECT * FROM table_name WHERE id = '$id' LIMIT 1") or die(mysql_error()); 
  $row = mysql_fetch_object($query);

  for( $i = 1; $i < 8; $i++ )
  {
  $product_name[$_GET['parameter']] = "product_name_" . $i; 
  $product_descript[$_GET['parameter']] = "product_descript_" . $i; 
  $product_color[$_GET['parameter']] = "product_color_" . $i; 
  $product_price[$_GET['parameter']] = "product_price_" . $i; 
  }
  ${$product_name[1]}  = "$row->product_name_1"; 
  ${$product_name[2]}  = "$row->product_name_2"; 
  ${$product_name[3]}  = "$row->product_name_3"; 
  ${$product_name[4]}  = "$row->product_name_4"; 
  ${$product_name[5]}  = "$row->product_name_5"; 
  ${$product_name[6]}  = "$row->product_name_6"; 
  ${$product_name[7]}  = "$row->product_name_7"; 

  // List 7 variables and values for each field name

  echo "${$prop_name[$_GET['par']]}";

唯一の問題は、このコードで mysql インジェクションが可能になることです。誰かが解決策を提案できれば、私はそれを大いに感謝します。

于 2012-06-19T14:41:44.793 に答える
0
$_GET['parameter'] = '_2';
$product_name{$_GET['parameter']} = 'string';
echo $product_name_2; // string

また

$_GET['parameter'] = '_2';
$var = 'product_name'.$_GET['parameter'];
$$var = 'string';
echo $product_name_2; // string

個人的には、このタイプの動作には配列を使用します。

アップデート:

上記は正常に動作し、問題なくテストされていますが、おそらく誰もが望んでいたよりもはるかに多くの作業が必要です。

簡単にする代わりに、配列によるアプローチをお勧めします。

$templates = array(2 => array(
        'product_name' => "value",
        'product_descript' => "value",
        'product_color' => "value",
        'product_price' => "value",
    );

foreach($templates[substr($_GET['parameter'],1)] as $var => $val){
    $variable = $var.$_GET['parameter'];
    $$variable = $val;
}

上記は下位互換性があり、substr を使用してパラメーターから先頭の _ を削除します。

于 2012-06-11T16:06:05.097 に答える