0

我有一个会员网站,用户可以获得多达 7 个网页模板来展示他们的产品。每个模板具有相同的字段名称,分别以_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 的查询字符串,我可以在网页中显示特定用户的任何变量,即

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

然后我通过简单地在 PHP 文件中识别它来 $_Get 任何变量,即

$product_name_1
$product_descript_1
$product_color_1
$product_price_1

我的问题是 url 必须标识 WHICH 模板,因为每个模板都标识一个特定的产品,即 _1、_2、..._7。如何在url中使用参数,比如

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

...识别所有以 _7 结尾的变量,它们会出现在网页中吗?url中使用的参数将标识网页中要使用的变量,无论是_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
$_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 回答
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 回答