$ _POST和变量在字符串中 - 不知道为什么它不起作用

时间:2018-03-25 02:47:01

标签: 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>

因为我试图在变量中尽可能使它更具动态性。我在嵌套中遇到代码问题,我认为它与字符串和变量混合在一起会使它变得更复杂。在这方面有任何正确的编码方式的任何帮助。我很感激帮助,因为我只有几个月的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>";

2 个答案:

答案 0 :(得分:1)

在函数中回显永远不是一个好主意,而只是返回一个数组然后循环它。

你也可以打破PHP,这样你就不需要做很多回声。

语法错误太多了,所以我刚刚重写了它:

    <ImagePicker containerStyle={styles.defaultStyle} />

请注意SQL注入,如果用户提供了<?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> ,则应更改代码以使用prepared queries

答案 1 :(得分:0)

修正了语法错误。并使代码更具可读性。您可以尝试以下代码。没有测试过,希望它能正常工作。

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