0

選択ボックスと、以前に選択されたデータベースからの値を含むフォームがあります。はい、フォーム内で最後に選択されたものとして表示されるように選択されたこの値が必要です。私は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;
4

3 に答える 3

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>";
于 2012-10-18T08:39:39.710 に答える
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();

すべてのフィールドタイプを処理できるクラスを作成しました。これは単なるサンプルコードであることに注意してください。本番環境では、データ配列にキーが存在するかどうかなどに注意する必要があります。

これには素晴らしい副作用があります。dom を介して値を設定するため、フォームが XSS から保護されます。

于 2012-10-18T08:47:39.593 に答える
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>、このアイテムがデフォルトとして選択されます。

お役に立てれば

于 2012-10-18T08:42:26.010 に答える