下拉列表中的选定值似乎未发布

Selected value in dropdown does not seem to be posted

如果此 problem/question 已得到答复,那么我深表歉意。我找不到 HTML dropdown.

问题的答案

我有一个包含多个输入字段和文本区域的表单,每当我 post 这个表单时,所有这些值都会被 post 编辑。但是,我还有一个从我的数据库创建的下拉列表。此 dropdown 显示正确,但当我 post 表单时,这是表单中唯一似乎未被 post 编辑的 $_POST 变量。 此表单用于编辑现有对象并确保自动选择对象的类别。

下面是我的表格中带有 dropdown 的部分:

<?php if (isset($_SESSION['categoryselect'])) {

    $allcategory = $_SESSION['categoryselect'] ?> 
    <select name="selectedcategory" required="required">

    <?php foreach($allcategory as $category) {

        if ($category->sub_categorie == $selectedproduct->sub_category) {?>

            <option value="<?php $category->sub_category?>"selected="selected">
                <?php echo $category->sub_category?>
            </option>

        <?php } else {?>

            <option value="<?php $category->sub_category?>">
                <?php echo $category->sub_category?>
            </option>

        <?php } 
      } ?>
    </select> 
 <?php } ?>

下面是处理 posted 形式的代码的一部分:

$name= $_POST['name'];
$name= mysql_escape_string($name);

$sub_category = $_POST['selectedcategory'];
$sub_category = mysql_escape_string($sub_category);

$price= $_POST['price'];
$price= mysql_escape_string($price);

'name''price' 的 post 也与我的 'category' 形式相同 这 2 个字段确实得到 posted。然而,我的 'category' 给出了一个未定义的索引错误。据我所知,这意味着 'category' 不会被 post 编辑。但这让我想知道为什么其他值确实得到 posted 而来自 dropdown 的这个特定值却没有。

试试这个:

$name = mysqli_real_escape_string($_POST['name']);
$sub_category = mysqli_real_escape_string($_POST['selectedcategory']);
$price= mysqli_real_escape_string($_POST['price']);

您还可以在前端重构代码,例如:

<select name="selectedcategory" required="required">
<?php 
    foreach($allcategory as $category) {
        echo '<option value="' . $category->sub_category . '"'; 
        if ($category->sub_categorie == $selectedproduct->sub_category) {
            echo 'selected="selected"';
        }
        echo '>' . $category->sub_category . '</option>';
    }
?>
</select> 

注意 mysql 函数已弃用..请改用mysqli..

$sub_category = $_POST['category'];

应该是

$sub_category = $_POST['selectedcategory'];

因为 select 的 name 属性是 "selectedcategory" 而不是 "category",这就是表单发布后 $_POST 中的键。