我正在尝试构建一个if语句,该语句是根据访问该站点的用户提交的值动态编码的。 if语句可能有1到9个条件要测试(取决于用户输入),并且将根据if语句显示XML值(来自XML文档)。
可能的if语句条件插入$ if_statement变量中,如下所示:
$keyword = trim($_GET["Keyword"]);
if (!empty($keyword)) {
$if_statement = ($keyword == $Product->keyword);
}
$shopByStore = $_GET["store"];
if (!empty($shopByStore)) {
$if_statement = ($if_statement && $shopByStore == $Product->store);
}
// plus 7 more GET methods retrieving potential user input for the $if_statement variable.
但是,当使用动态编码的if语句时,下面的foreach循环中没有显示任何内容:
$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
if ($if_statement) { // the problem lies here, because results ARE displayed when this if statement is removed
echo $Product->name;
}}
有什么建议吗?或者有更好的方法来动态编写if语句吗?
答案 0 :(得分:1)
在有任何实际要评估的产品之前,会在运行时评估$ if_statement。您需要更改代码以在foreach循环期间传递产品,然后进行评估。
功能声明:
function if_statement($Product, $keyword=null, $store=null) {
$if_statement=false;
if($keyword) $if_statement = ($keyword == $Product->keyword);
if($store) $if_statement = $if_statement && ($shopByStore == $Product->store);
return $if_statement;
}
功能评估
$keyword = trim($_GET["Keyword"]);
$shopByStore = $_GET["store"];
$XMLproducts = simplexml_load_file("products.xml");
foreach($XMLproducts->product as $Product) {
if (if_statement($Product,$keyword, $store )) {
echo $Product->name;
}
}
顺便说一下。看看PHP's native filter_input。您正在评估用户输入而不进行清理。
答案 1 :(得分:0)
$names = array('Keyword', 'store', ...);
$if_condition = true;
foreach ($names as $name) {
if (isset($_GET[$name]))
$if_condition = $if_condition && $_GET[$name] == $Product->$name;
}
if ($if_condition) {
...
}