0

私が達成したいこと:

連鎖選択リストを使用してデータベース テーブルにデータを挿入します (オプション値はデータベース テーブルから取得されます)。

要件:最初の選択リスト (「tip_cheltuiala」) の場合、使用可能なオプション値は、既に挿入されている行で使用されていないもののみでなければなりません (使用可能なオプションは次のとおりです: オプション 1、2、および 3; オプション 1 で行を既に挿入しました)および 3 であり、現在はオプション 2 のみが使用可能である必要があります)

1. 選択リスト「tip_cheltuiala」:

echo '<select name="tip_cheltuiala'.$row_chelt['id_factura'].'" id="tip_cheltuiala'.$row_chelt['id_factura'].'" class="selectContentIncasare">'.$opt_mod_inchidere->TipCheltuiala().'</select>';

およびその選択リストの関数:

class SelectListModInchidere{
public function TipCheltuiala(){
                    //looking for options that are  already in the table
        $stmt_chelt_inchisa = $this->conn->prepare('SELECT tip_cheltuiala FROM cheltuieli_mod_inchidere');
        $stmt_chelt_inchisa->execute(array());
        $results_chelt_inchisa = $stmt_chelt_inchisa->fetchAll();
        foreach($results_chelt_inchisa as $row_chelt_inchisa) {
            $chelt_inchisa[] = $row_chelt_inchisa['tip_cheltuiala'];
        }
        print_r($chelt_inchisa); // returns options 1 and 3

        for($i=0; $i < count($chelt_inchisa); $i++){    

            $stmt_tip_chelt = $this->conn->prepare('SELECT * FROM mi_categ_cheltuiala 
            WHERE tip_cheltuiala <> :chelt_inchisa');
            $stmt_tip_chelt->execute(array('chelt_inchisa' => $chelt_inchisa[$i]));
            $tip_cheltuiala = '<option value="0">selectati ...</option>';
            while($row_tip_chelt = $stmt_tip_chelt->fetch()) {
                $tip_cheltuiala .= '<option value="' . $row_tip_chelt['tip_cheltuiala'] . '">' . $row_tip_chelt['tip_cheltuiala'] . '</option>';
            }
            return $tip_cheltuiala;
        }
    }
}
$opt_mod_inchidere = new SelectListModInchidere();

そこに最初の問題があります。選択リストにはオプション 2 (正しい) が入力されていますが、オプション 3 も入力されています。理由がわかりません。

2. 選択リスト「mod_inchidere」: 選択リスト「tip_cheltuiala」 で選択されたオプションに従って、オプション値を返します。

echo '<select name="mod_inchidere'.$row_chelt['id_factura'].'" id="mod_inchidere'.$row_chelt['id_factura'].'" class="selectContentIncasare">
      <option value="0">selectati ...</option>
      </select>';

およびその選択リストの関数 (関数 TipCheltuiala と同じクラスの一部):

public function ModInchidere(){
        $stmt_mod_inch = $this->conn->prepare('SELECT * FROM mi_mod_inchidere WHERE categorie_cheltuiala = :categorie_cheltuiala');
        $stmt_mod_inch->execute(array('categorie_cheltuiala' => $_POST['id_categ_cheltuiala']));
        $mod_inchidere = '<option value="0">selectati ...</option>'; 
        while($row_mod_inch = $stmt_mod_inch->fetch()) {
            $mod_inchidere .= '<option value="' . $row_mod_inch['mod_inchidere'] . '">' . $row_mod_inch['mod_inchidere'] . '</option>';
        }
        return $mod_inchidere;
    }

3. 最終ステップ:選択リスト "mod_inchidere" で選択されたオプションに従って、選択リスト "mod_inchidre" のオプションに関連付けられた値 (データベースにも格納されている) を返し、その値を入力フィールドに入れる必要があるため、ユーザーは(必要に応じて)その値を変更できます。

その段階では、それを達成する方法がわかりません。値を別の選択リストに入れることはできますが、ユーザーはその値を変更できず、変更する方法ではありません。

それを手伝ってください。

テーブル構造

mi_categ_cheltuiala -> | ID | ヒント_cheltuiala | カテゴリー_チェルトゥイアラ|

mi_mod_inchidere -> | ID | カテゴリー_チェルトゥイアラ| mod_inchidere |

cheltuieli_mod_inchidere (データを挿入する必要があるテーブル) -> | ID | ヒント_cheltuiala | カテゴリー_チェルトゥイアラ| mod_inchidere | ヴァロアーレ |

入力フィールドに入力する必要がある値を取得するには、フィールド「mod_inchidere」のテーブル「mi_categ_valoare」を調べる必要があります

mi_categ_valoare -> | ID | mod_inchidere | ヴァロアーレ |

$_POST['id_categ_cheltuiala'] -> 説明:

jQueryを使用して、この選択リスト「tip_cheltuiala」で選択されているものを取得し、データをTipCheltuiala()メソッドに送信します

<script type="text/javascript">
$(document).ready(function(){
    $("select#mod_inchidere<?php echo $row_chelt['id_factura']; ?>").attr("disabled","disabled");
            $("select#tip_cheltuiala<?php echo $row_chelt['id_factura']; ?>").change(function(){
            $("select#mod_inchidere<?php echo $row_chelt['id_factura']; ?>").attr("disabled","disabled");
            $("select#mod_inchidere<?php echo $row_chelt['id_factura']; ?>").html("<option>asteptati ...</option>");
            var id_categ_cheltuiala = $("select#tip_cheltuiala<?php echo $row_chelt['id_factura']; ?> option:selected").attr('value');
            $.post("class/select_mod_inchidere.php", {id_categ_cheltuiala:id_categ_cheltuiala}, function(data){
            $("select#mod_inchidere<?php echo $row_chelt['id_factura']; ?>").removeAttr("disabled");
            $("select#mod_inchidere<?php echo $row_chelt['id_factura']; ?>").html(data);
        });
    }); 
</script>

次に、TipCheltuiala() メソッドを呼び出すサービス ファイルを使用します。

4

1 に答える 1

0

正直に言うと、英語以外の命名規則にめまいがします :)

問題:There I have the first issue: the select list is populated with option 2 (that is correct) but also with option 3 - I can't figure out why.

以下の単一のクエリを使用して行方不明を取得しますtip_cheltuila

SELECT 
    tip_cheltuila
FROM
    mi_categ_cheltuiala
WHERE
    tip_cheltuila NOT IN (SELECT 
            tip_cheltuiala
        FROM
            cheltuieli_mod_inchidere);

他の問題を勉強する必要があります...

于 2013-01-30T07:40:38.787 に答える