我有一个会员网站,用户最多可以获得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
我能够在网页中显示特定用户的任何变量,方法是使用在网址中标识其user_id的查询字符串,即
http://domain.com/folder/page.php?id=78
然后我_ $获取任何变量,只需在PHP文件中识别它,即
$product_name_1
$product_descript_1
$product_color_1
$product_price_1
我的问题是网址必须标识WHICH模板,因为每个模板都标识了一个特定的产品,即_1,_2,... _ 7。如何在网址中使用参数,例如
http://domain.com/folder/page.php?id=78¶meter=_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']}
数据库表中保存的实际值。出于某种原因,代码没有从数据库表中获取变量的值。
答案 0 :(得分: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']];
我可能会遗漏一些东西......
答案 1 :(得分: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从参数中删除前导_。
答案 2 :(得分:0)
我无法得到任何工作答案。我在PHP手册here中找到了一个用户为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注入。如果有人能提出解决方案,我将非常感激。