2017-06-08 4 views
0

redefinieren Ich habe ein Problem, meine Variable $ x redefiniert nicht auf "Englisch". Wo ist das Problem? Vielen Dank:nicht Variable in 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; 
} 
?> 

auch wenn ich tun:

if (mysqli_num_rows($possible_lang) > 0) { 
    $x = "bla bla"; 
    echo $language_table; 
} else { 
    $x = 'english'; 
    echo $language_table; 
} 

$ x noch den Wert hält:

$x = $lang_detected; 

Vielen Dank!

+2

** WARNUNG **: Bei der Verwendung von 'mysqli' Sie [parametrisierte Abfragen] (http://php.net/manual/en/mysqli.quickstart.prepared-statements.php) verwendet werden soll, und [ 'bind_param'] (http://php.net/manual/en/mysqli-stmt.bind-param.php), um Benutzerdaten zu Ihrer Anfrage hinzuzufügen. ** Verwenden Sie NICHT ** String-Interpolation oder Verkettung, um dies zu erreichen, weil Sie einen schwerwiegenden [SQL injection bug] erstellt haben (http://bobby-tables.com/). ** NIEMALS ** $ _POST ',' $ _GET' oder ** irgendwelche ** Benutzerdaten direkt in eine Abfrage einfügen, es kann sehr schädlich sein, wenn jemand versucht, Ihren Fehler auszunutzen. – tadman

Antwort

2

Wenn Sie eine Variable mit anderen Variablen konstruieren, werden diese Werte genau in diesem Moment übernommen. Es gibt keine Möglichkeit, die Bewertung zu verschieben, außer sie in eine Funktion zu integrieren.

Das heißt:

$x = 'a'; 
$y = '(' . $x . ')'; 
$x = 'b'; 

In diesem Fall $y ist und bleibt, (a) obwohl $x verändert hat. Es gibt keinen verbindlichen Unterschied.

In Ihrem Code, den Sie immer nach unten, dass die Inhalte bewegen und vermeiden, dass die Duplikation:

if (mysqli_num_rows($possible_lang) > 0) { 
    $x = "bla bla"; 
} else { 
    $x = 'english'; 
} 

echo '<form ...language table'.$x.'...'; 
0

Ihr Problem zu lösen, könnten Sie eine Funktion verwenden.

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

}