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'":""
我想让下拉菜单的选定值由查询的结果决定。但无论我尝试什么,它的选择值都停留在第一个选项。
我浏览了多个问题相同的问题,但 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'":""