【问题标题】:How can I make to PHP write only once selected to the list?我怎样才能使 PHP 只写入一次被选中的列表?
【发布时间】:2023-03-29 23:40:01
【问题描述】:

我将用 PHP 制作一个 HTML 列表,默认值是当前日期、月份或年份。

像这样:

代码如下:

while ($start <= $end) {
    if ($start == date("Y") || $start == date("d")  || $start == date("m")) {
        echo "<option selected value='$name'>$start</option> <br>";
    } else {
        echo "<option value='$name'>$start</option> <br>";
    }
    $start++;
}
    
echo "</select>";

问题是逻辑不能正常工作,因为在日或月不能分开,它总是在 HTML 中选择 2 个项目,并且总是应用最后一个。

【问题讨论】:

  • 所以你显然需要让你的支票仔细看看它是在一天还是一个月内使用
  • 当您创建day 下拉列表时,您不应与date('m') 比较,只能与date('d') 比较
  • 为什么要将值全部设置为Day?应该是value='$start'
  • 显示所有相关逻辑,你显然走了一条不该走的捷径
  • 抱歉,所有这些下拉菜单都是由一个函数完成的

标签: php html html-select selected php-8


【解决方案1】:

根据您正在创建的下拉列表设置一个变量进行比较,这显然在$name 变量中。这样您就不会错误地选择与当前月份匹配的 Day 值,反之亦然。

if ($name == 'Year') {
    $selected = date('Y');
} elseif ($name == 'Month') {
    $selected = date('m');
} elseif ($name == 'Day') {
    $selected = date('d');
}

while ($start <= $end) {
    if ($start == $selected) {
        echo "<option selected value='$start'>$start</option> <br>";
    } else {
        echo "<option value='$start'>$start</option> <br>";
    }
    $start++;
}
    
echo "</select>";

【讨论】:

  • 您可以使用match 代替if 以使代码更简单。
  • @Dharman 这是 PHP,所以我假设您的意思是 switch/case。当操作只有一行时,我经常犹豫是否使用它——在每种情况下都必须break; 会使代码更长。
  • 不,我的意思是php.net/match 这个问题是用 PHP 8 标记的,所以使用它是安全的
  • 哦,这对我来说是新的。我还没有使用 PHP 8(遗憾的是,我们的基础架构是 5.x 和 7.2 的混合体,甚至在我们的一台关键服务器上也是 5.4,这让我痛苦不已)。
  • 很遗憾听到这个消息。我建议至少阅读 PHP 8 更改的概述,以便从高层次上熟悉它们。 php.net/releases/8.0/en.php
猜你喜欢
  • 2020-11-28
  • 2011-01-16
  • 1970-01-01
  • 1970-01-01
  • 2017-08-30
  • 2016-04-04
  • 1970-01-01
  • 1970-01-01
  • 2018-07-01
相关资源
最近更新 更多