我遇到了问题,我的变量$ x没有重新声明为" english"。问题出在哪儿?非常感谢:
<?php
// assign language or default english
$x = $lang_detected;
$language_table = '
<form id="lang_detected" method="post"
action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
<input type="button" value="' . $x . '" onclick = "displayLangList()" style="width:200px;display:block;margin:auto;" />
<input type="submit" value="ok" />
</form>';
$possible_lang = mysqli_query($con,
'SELECT name2 FROM page WHERE name2 = "' . $lang_detected . '"');
if (mysqli_num_rows($possible_lang) > 0 ) {
echo $language_table;
} else {
$x = 'english';
echo $language_table;
}
?>
即使我这样做:
if (mysqli_num_rows($possible_lang) > 0 ) {
$x = "bla bla";
echo $language_table;
} else {
$x = 'english';
echo $language_table;
}
$ x仍保留值:
$x = $lang_detected;
非常感谢!
答案 0 :(得分:2)
使用其他变量构造变量时,这些值将按原样在该精确时刻进行烘焙。除了将其包装到函数中之外,没有办法推迟评估。
那是:
$x = 'a';
$y = '(' . $x . ')';
$x = 'b';
在这种情况下,即使$y
发生了更改,(a)
仍然是$x
。没有任何约束力。
在您的代码中,您始终可以移动该内容并避免重复:
if (mysqli_num_rows($possible_lang) > 0 ) {
$x = "bla bla";
} else {
$x = 'english';
}
echo '<form ...language table'.$x.'...';
答案 1 :(得分:0)
要解决您的问题,您可以使用一个功能。
<?php
// assign language or default english
$x = $lang_detected;
$possible_lang = mysqli_query($con,
'SELECT name2 FROM page WHERE name2 = "' . $lang_detected . '"');
if (mysqli_num_rows($possible_lang) > 0 ) {
echo getLanguageTable($x);
} else {
$x = 'english';
echo getLanguageTable($x);
}
function getLanguageTable($x) {
return '
<form id="lang_detected" method="post"
action="' . htmlspecialchars($_SERVER["PHP_SELF"]) . '">
<input type="button" value="' . $x . '" onclick = "displayLangList()" style="width:200px;display:block;margin:auto;" />
<input type="submit" value="ok" />
</form>';
}