我有一个带有选择框的表单和之前选择过的数据库中的值。是的我需要这个值,它被选择显示为最后选择的形式。我尝试使用php dom,但我没有得到任何地方。
所以这是html:
<select name="conf_1">
<option value="Y">Yes</option>
<option value="N">No</option>
</select>
<select name="conf_2">
<option value="text">text</option>
<option value="alsotext">alsotext</option>
</select>
现在我想显示所选的选项,它存储在数组中,如下所示:
$confs = array([1] => N, [2] => text );
做一些代码:
loop{
<option value="$confs[$i]">$confs[$i]</option> has to be appended to <select name="conf_$i">
}
现在我找不到办法做到这一点。我尝试过使用php dom,但我不知道如何选择逐个元素的属性,然后循环槽,所以我不能做一个真正的PHP示例。我只是不知道从哪里开始。
如果有人有办法做到这一点,请赐教!?
使用@Markus I启发的代码完成它。:
$dom = new DOMDocument();
$dom->loadHTML($form);
$xPath = new DOMXPath($dom);
foreach ($dom->getElementsByTagName('select') as $select) {
$name = $select->getAttribute('name');
$name = str_replace('conf_', '', $name);
foreach($xPath->query('./option', $select) as $option) {
if ($option->getAttribute('value') == $confs[$name]) {
$option->setAttribute('selected', 'selected');
}
}
}
$form = $dom->saveHTML($dom);
echo $form;
答案 0 :(得分:2)
喜欢这个??
$confs_arr = array("1" => N, "2" => text,"3" => N4, "4" => text3,"5" => N5,"6" => text7);
echo "<select name='option' id='option'>";
foreach($confs_arr as $keys=>$confs){
echo "<option value='".$confs."'>".$confs."</option>";
}
echo "</select>";
答案 1 :(得分:1)
我更喜欢将孔模板加载到DOM中并对其进行修改:(代码未经过测试!)
$dom = new DOMDocument();
$dom->loadXML('<yourTemplateXML />');
$xPath = new DOMXPath($dom);
$data = array('conf1' => 'N', 'conf2' => 'text');
foreach ($xPath->query('//select') as $select) {
foreach($xPath->query('./option', $select) as $option) {
if ($option->getAttribute('value') == $data[$select->getAttribute('name')]) {
$option->setAttribute('selected', 'selected');
}
}
}
echo $dom->saveXML();
我写了一个类,可以处理所有字段类型。请注意,这只是samplecode。在生产时,您应该注意数据数组中的密钥是否存在等等。
这有一个很好的副作用:因为您通过dom设置了值,它可以保护您的表单不受XSS
的影响答案 2 :(得分:0)
以下示例代码与您提出的代码类似:
<?php
$categories = $rows; //array from database
foreach($rows as $row){
if($row['name'] == $_POST['category']){
$isSelected = ' selected="selected"'; // if the option submited in form is as same as this row we add the selected tag
} else {
$isSelected = ''; // else we remove any tag
}
echo "<option value='".$row['id']."'".$isSelected.">".$row['name']."</option>";
}
?>
$_POST['category']
是之前选择的用户,可以是任何内容,而不仅仅是$_POST
。
根据此示例,您可以修改代码。
如果用户之前选择"text"
,则html代码应为:
<select name="conf_2">
<option value="text" selected="selected">text</option>
<option value="alsotext">alsotext</option>
</select>
将selected="selected"
放入<option>
标记中,此项目将被选为默认值。
希望这有帮助