php - $_POST 和字符串中的变量 - 不确定为什么它不起作用

标签 php mysql post php-5.6

我有这样的非动态脚本:

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

最佳答案

在函数中回显从来都不是一个好主意,而只是返回一个数组然后循环遍历它。

您也可以脱离 PHP,这样您就不需要做很多 echo 。

这么多语法错误,所以我重写了它:

<?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 注入(inject),如果 $itemName="Environment"; 是用户提供的,您应该更改代码以使用 prepared queries .

关于php - $_POST 和字符串中的变量 - 不确定为什么它不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/49472047/

相关文章:

php - joomla中如何获取此组件的布局到其他组件

php - addClause 始终返回空集合

php - 为什么我不应该在 PHP 中使用 mysql_* 函数?

php - 更改 HTML <area> 元素的背景颜色

node.js - 使用 Nodejs 和 body-parser 发布表单数据

php - 尝试使用 PDO 将表单数据插入数据库时​​不断出现错误

mySQL LIKE 全文查询

javascript - 针对 IIS7+Windows 7 Pro 进行多次连续请求后,XMLHttpRequest POST 停留在 ReadyState 1

linux - 无法在 bash 中使用/dev/stdin 访问 POSTed 变量

php - 使用mysql从数组中洗牌