2017-06-08 101 views
0

我得到了問題,我的變量$ x沒有被重新聲明爲「english」。哪裏有問題?非常感謝:不在php中重新聲明變量

<?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; 

非常感謝!

+2

** WARNING **:當使用'mysqli'你應該使用[參數化查詢(http://php.net/manual/en/mysqli.quickstart.prepared-statements.php)和[ 'bind_param'](http://php.net/manual/en/mysqli-stmt.bind-param.php)將用戶數據添加到您的查詢中。 **不要**使用字符串插值或連接來完成此操作,因爲您創建了嚴重的[SQL注入漏洞](http://bobby-tables.com/)。 **不要**將'$ _POST','$ _GET'或**任何**用戶數據直接放入查詢中,如果有人試圖利用您的錯誤,這可能會非常有害。 – tadman

回答

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.'...'; 
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>'; 

}