Select 来自变量的下拉值

Select dropdown value from variable

我想让下拉菜单的选定值由查询的结果决定。但无论我尝试什么,它的选择值都停留在第一个选项。

我浏览了多个问题相同的问题,但 none 解决了我的问题。

我试过这个:

<select name="Period">
    <option value="Day" <?php if($PeriodTXT == "Day") echo "selected"?>>Day</option>
    <option value="Week" <?php if($PeriodTXT == "Week") echo "selected"?>>Week</option>
    <option value="Month" <?php if($PeriodTXT == "Month") echo "selected"?>>Month</option>
    <option value="Year" <?php if($PeriodTXT == "Year") echo "selected"?>>Year</option>
</select>

还有这个:

<select name="Period">
       <option <?php echo ($PeriodTXT == 'Day')?"selected":"" ?> >Day</option>
       <option <?php echo ($PeriodTXT == 'Week')?"selected":"" ?> >Week</option>
       <option <?php echo ($PeriodTXT == 'Month')?"selected":"" ?> >Month</option>
       <option <?php echo ($PeriodTXT == 'Year')?"selected":"" ?> >Year</option>
 </select>

但是不行。此外,当我使用 echo "$PeriodTXT"; 时,它会回显 "Week"(与下拉选项中所写的完全相同),因此它应该选择 "Week" 但它没有。

编辑:$PeriodTXT 应该显示带有数字计数的选定间隔(例如“3 天”它只会保留 "Day" 部分)

    $usersdata = array();
    while($row = mysqli_fetch_array($result))
    {
        $usersdata = $row;
    }

    $PeriodTXT = preg_replace("/\d+/u", "", $usersdata[4]);

我了解到您使用 POST 方法发送表单,发送后,您想尝试使用 selected 选项显示它。

请描述什么是 $PeriodTXT 变量以及如何设置它。

这里有一个简单的解决方案,希望对您有所帮助。

$sent = $_POST['Period'];
$options = aray("Day", "Week", "Month", "Year");


echo '<form method="post" action="">
<select name="Period">';

foreach ($options as $v)
{
  $selected = ($sent == $v) ? ' selected' : null;
  echo '<option value="'.$v.'"'.$selected.'>'.$v.'</option>';
}

echo '</select>
<input type="submit" value="send">
</form>';

编辑:

您 post 编写的带有 "while" 的代码似乎是错误的。

每次 while() 运行时,您都在创建 $userdata 变量。事实上,它不是真正的数组,正如您希望的那样。它仅在您 select 数据库中只有一条记录时有效(当 mysql_num_rows($result) == 1 时)。不然就错了。

应该这样做:

$usersdata = array();
while($row = mysqli_fetch_array($result))
{
    $usersdata[] = $row;
}

$PeriodTXT = preg_replace("/\d+/u", "", $usersdata[$index][4]);

注意,您必须知道您正在对哪一行($index 变量)进行更改。

$usersdata 变成 Associative array.

使用var_dump() 函数检查变量本身包含的内容。我希望它能让你更接近解决方案。如果您需要更多帮助,您必须 post 更多代码,因为目前这里并不是所有内容都清楚。

你的问题是当你用正则表达式删除 count 时文本周围有多余的空格,所以隐藏的额外 whitespace 产生的条件为 false ,

$PeriodTXT = '3 Week';
$PeriodTXT = preg_replace("/\d+/u", "", $usersdata[4]); //without trim()
var_dump($PeriodTXT); // outputs string ' Week' (length=5)

但是当我们 trim

$PeriodTXT = trim(preg_replace("/\d+/u", "", $usersdata[4])); //with trim()
var_dump($PeriodTXT); // outputs string 'Week' (length=4)

所以使用 trim() 来解决这个问题,例如,

<?php 
    $usersdata = array();
    $usersdata[4] = '3 Week';
    $PeriodTXT = trim(preg_replace("/\d+/u", "", $usersdata[4]));

?>
    <select name="Period">
           <option <?php echo ($PeriodTXT === 'Day')?"selected ='selected'":"" ?> >Day</option>
           <option <?php echo ($PeriodTXT === 'Week')?"selected ='selected'":"" ?> >Week</option>
           <option <?php echo ($PeriodTXT === 'Month')?"selected ='selected'":"" ?> >Month</option>
           <option <?php echo ($PeriodTXT === 'Year')?"selected ='selected'":"" ?> >Year</option>
     </select>

另请注意,我已将 HTML 部分从 "selected":"" 更改为 "selected ='selected'":""