Php 变量作为表单下拉列表中的默认值?
我有一个解析器,它将信息提取到数组$item中。从我的数据库中,我将所有结果存储到数组$getFormats中 然后,我将$item显示为一个大表单,用户可以修改它(以修复解析器中的任何错误)。在第二部分中,我将重点讨论$item[3],它包含由解析器提取的“类型” 我的表单在包含数据库中可能包含的“类型”的下拉列表旁边显示$item[3]。这里的目标是允许用户将解析器找到的“类型”与数据库中包含的“类型”进行匹配或更改 显然,我希望默认下拉列表值与数据库中已有的值相匹配。如果没有匹配项,则默认值为空,用户可以自己选择合适的类型 下面的代码演示了我所拥有的。显然,我做得不对,因为它不起作用Php 变量作为表单下拉列表中的默认值?,php,html,forms,drop-down-menu,selected,Php,Html,Forms,Drop Down Menu,Selected,我有一个解析器,它将信息提取到数组$item中。从我的数据库中,我将所有结果存储到数组$getFormats中 然后,我将$item显示为一个大表单,用户可以修改它(以修复解析器中的任何错误)。在第二部分中,我将重点讨论$item[3],它包含由解析器提取的“类型” 我的表单在包含数据库中可能包含的“类型”的下拉列表旁边显示$item[3]。这里的目标是允许用户将解析器找到的“类型”与数据库中包含的“类型”进行匹配或更改 显然,我希望默认下拉列表值与数据库中已有的值相匹配。如果没有匹配项,则默认
<form>
<?php
foreach($articles as $item) {
?>
Type: <input type="text" name="typeparsed" value="<?php echo $item[3]; ?>">
<select name="typechoose" value="<?php echo $value; ?>">
<?php
foreach ($getFormats as $format) {
$selected = '';
if($item[3] == 'entry form' && $format->name == 'Entry Form'){
$selected = 'selected';
}
echo "<option value='".$format->name."' ".$selected.">".$format->name."</option>";
}
?>
</select>
<?php }?>
</form>
这是因为wordpress存储分层选项的方式。在我的网站上,这些值实际上如下所示:
Entry Form
Facebook
- Entry Form
正如你所看到的,这是因为条目表单是Facebook的一个顶部菜单项和一个子菜单
因此,当我试图将一种类型的报名表与报名表进行匹配时,我在试图确定哪种报名表是正确的选择时遇到了一个问题
由于我的代码是当前的,所以选择了第二个输入表单实例
我如何调整代码,以便如果$item[3]=='entry form'(当前状态),那么将选择第一个entry form?首先,我不理解您为什么使用此选项:
<?php
foreach($articles as $item) {
if ($item[3] == 'entry form') {
$value = 'entry form';
} else {
$value = $item[3];
}
?>
您可以简单地使用代码brlowe,它将执行同样的操作:
<?php
foreach($articles as $item) {
$value = $item[3];
?>
要匹配所选元素,请执行以下操作:
Type: <input type="text" name="typeparsed" value="<?php echo $item[3]; ?>">
<select name="typechoose" value="<?php echo $value; ?>">
<?php
foreach ($getFormats as $format) {
$selected = '';
if($value == $format->name){ $selected = ' selected="selected" '; }
echo "<option value='".$format->name."' ."$selected".>".$format->name."</option>";
}
?>
</select>
<?php }?>
键入:因为您已经更改了您的问题,所以我将给出另一个答案,答案很简单:只要两个“报名表”的名称相同,您就不会确定。如果您可以检查他们的数据库ID,请尝试使用它,如果不能,那么您应该更改他们的名称
<?php // $value is actualy ID of the element; ?>
Type: <input type="text" name="typeparsed" value="<?php echo $item[3]; ?>">
<select name="typechoose" value="<?php echo $value; ?>">
<?php
foreach ($getFormats as $format) {
$selected = '';
if($value == $format->id){ $selected = ' selected="selected" '; }
echo "<option value='".$format->id."' ."$selected".>".$format->name."</option>";
}
?>
</select>
类型:if($item[3]='entry form'){$value='entry form';}的可能重复项{$value=$item[3];}将始终将$value设置为'entry form'。原因是if语句将展开并检查$item是否[3}等于其他值,并根据这些值执行不同的操作。显然,在它工作之前,我不会展开它。啊,好吧。你检查了顺序代码了吗?它会为你的问题提供解决方案。它不工作。原因是$format->name包含的是条目表单而不是条目表单。代码会破坏整个表单,将所有字段洗牌那么,如果($value==strtolower($format->name))的话,为什么不使用PHPstrtolower()
您的解决方案被证明是正确的,但现在我需要解决修改后的问题。这是我的问题。由于我的数据库来自wordpress,我受到wordpress实现其信息的方式的限制。因此,ID是数字,并且由于我使用的是包含文本字符串的解析器,我无法匹配它们。此外,用户可以修改其名称ID保持不变时的类型,因此尝试按ID进行匹配将不起作用。我必须使用$format->name进行匹配。因此,也许您将添加自己的选项卡,在其中存储anmes和ID,以便与用户选择的anmes和ID进行比较。正如您所说,您不能延迟名称,因为字符串可以轻松更改。我的意思是,我宁愿依赖名称而不是ID,因为如果用户更改名称,则下拉列表将不会有默认值(除非用户读取名称),这很好。但是如果我依赖ID,并且用户更改名称,则我的表单将默认为不正确的名称(更改的名称),而不是找到正确的名称(如果读取为新ID)。
<?php // $value is actualy ID of the element; ?>
Type: <input type="text" name="typeparsed" value="<?php echo $item[3]; ?>">
<select name="typechoose" value="<?php echo $value; ?>">
<?php
foreach ($getFormats as $format) {
$selected = '';
if($value == $format->id){ $selected = ' selected="selected" '; }
echo "<option value='".$format->id."' ."$selected".>".$format->name."</option>";
}
?>
</select>