$_POST 和字符串中的变量 - 不确定为什么它不起作用
$_POST and variable in the string - not sure why it is not working
我有这样的非动态脚本:
<p>Environment: <select name="formEnvironment" value="" >
<option value="TEST" <?= $_POST['formEnvironment'] == TEST ? 'selected' : '' ?>>Test</option>
<option value="PROD" <?= $_POST['formEnvironment'] == PROD ? 'selected' : '' ?>>Production</option>
</select></p>
因为我试图让它在变量中尽可能地动态化。我在 while nest 中遇到代码问题,我确实认为它与字符串和变量混合在一起有关,这使它变得更加复杂。在这方面有关正确编码方式的任何帮助。我将不胜感激,因为我才进入 PHP.
几个月
function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()){
$MAS = "$_POST['form"{$itemName}"']";
echo "<option value=\"{$row['DDVALUE']}\" ";
echo "<?= "{$MAS}" == "{$row['DDVALUE']}" ? 'selected' : '' ?>>"{$row['DDTEXT']}"</option>";
}
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName.": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
DropDownItems($itemName, $query, $connection);
echo "</select>";
在函数中回显从来都不是一个好主意,而只是 return 一个数组然后循环遍历它。
你也可以跳出 PHP 这样你就不需要做很多回声了。
这么多语法错误,所以我重写了它:
<?php
function DropDownItems($itemName, $query, $connection) {
$return = [];
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()) {
$return[] = [
'value' => $row['DDVALUE'],
'label' => $row['DDTEXT']
];
}
return $return;
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
?>
<p><?= $itemName ?>
<select name="form<?= $itemName ?>">
<option value="">Select below:</option>
<?php foreach (DropDownItems($itemName, $query, $connection) as $item): ?>
<option value="<?= $item['value'] ?>"<?= (isset($_POST['form'.$itemName]) && $_POST['form'.$itemName] === $item['value'] ? ' selected' : '') ?>><?= $item['label'] ?></option>
<?php endforeach ?>
</select>
</p>
注意 SQL 注入,如果 $itemName="Environment";
是用户提供的,您应该更改代码以使用 prepared queries。
修复了语法错误。并使代码更具可读性。你可以试试下面的代码。还没有测试过,希望它能正常工作。
<?php
function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
$html = '';
while ($row = $result->fetch_assoc()){
$MAS = $_POST['form'.$itemName];
$html .= "<option value=\"{$row['DDVALUE']}\" ";
$html .= ( $MAS == $row['DDVALUE'] ? 'selected' : '' ).">{$row['DDTEXT']}</option>";
}
return $html;
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName".": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
echo DropDownItems($itemName, $query, $connection);
echo "</select>";
?>
我有这样的非动态脚本:
<p>Environment: <select name="formEnvironment" value="" >
<option value="TEST" <?= $_POST['formEnvironment'] == TEST ? 'selected' : '' ?>>Test</option>
<option value="PROD" <?= $_POST['formEnvironment'] == PROD ? 'selected' : '' ?>>Production</option>
</select></p>
因为我试图让它在变量中尽可能地动态化。我在 while nest 中遇到代码问题,我确实认为它与字符串和变量混合在一起有关,这使它变得更加复杂。在这方面有关正确编码方式的任何帮助。我将不胜感激,因为我才进入 PHP.
几个月function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()){
$MAS = "$_POST['form"{$itemName}"']";
echo "<option value=\"{$row['DDVALUE']}\" ";
echo "<?= "{$MAS}" == "{$row['DDVALUE']}" ? 'selected' : '' ?>>"{$row['DDTEXT']}"</option>";
}
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName.": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
DropDownItems($itemName, $query, $connection);
echo "</select>";
在函数中回显从来都不是一个好主意,而只是 return 一个数组然后循环遍历它。
你也可以跳出 PHP 这样你就不需要做很多回声了。
这么多语法错误,所以我重写了它:
<?php
function DropDownItems($itemName, $query, $connection) {
$return = [];
$result = mysqli_query($connection, $query);
while ($row = $result->fetch_assoc()) {
$return[] = [
'value' => $row['DDVALUE'],
'label' => $row['DDTEXT']
];
}
return $return;
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
?>
<p><?= $itemName ?>
<select name="form<?= $itemName ?>">
<option value="">Select below:</option>
<?php foreach (DropDownItems($itemName, $query, $connection) as $item): ?>
<option value="<?= $item['value'] ?>"<?= (isset($_POST['form'.$itemName]) && $_POST['form'.$itemName] === $item['value'] ? ' selected' : '') ?>><?= $item['label'] ?></option>
<?php endforeach ?>
</select>
</p>
注意 SQL 注入,如果 $itemName="Environment";
是用户提供的,您应该更改代码以使用 prepared queries。
修复了语法错误。并使代码更具可读性。你可以试试下面的代码。还没有测试过,希望它能正常工作。
<?php
function DropDownItems($itemName, $query, $connection)
{
$result = mysqli_query($connection, $query);
$html = '';
while ($row = $result->fetch_assoc()){
$MAS = $_POST['form'.$itemName];
$html .= "<option value=\"{$row['DDVALUE']}\" ";
$html .= ( $MAS == $row['DDVALUE'] ? 'selected' : '' ).">{$row['DDTEXT']}</option>";
}
return $html;
}
$itemName="Environment";
$query = "SELECT DDVALUE, DDTEXT FROM DDLISTS WHERE FIELDNAME='".$itemName."' ORDER BY DDTEXT ASC";
echo "<p>$itemName".": <select name='form".$itemName."'>";
echo "<option value=''>Select below:</option>";
echo DropDownItems($itemName, $query, $connection);
echo "</select>";
?>